From 1c27c61f26236ae14eec16e9a43b7d785216bd64 Mon Sep 17 00:00:00 2001 From: Lock l00p Date: Thu, 28 Sep 2023 18:52:14 +0000 Subject: [PATCH] Begin by porting libraries --- .gitignore | 2 + Makefile | 247 +- .../emscripten/d0_blind_id/bin/blind_id | Bin 0 -> 318011 bytes .../d0_blind_id/include/d0_blind_id/d0.h | 66 + .../include/d0_blind_id/d0_blind_id.h | 91 + .../include/d0_blind_id/d0_rijndael.h | 21 + .../d0_blind_id/lib/libd0_blind_id.a | Bin 0 -> 209924 bytes .../d0_blind_id/lib/libd0_blind_id.la | 41 + .../d0_blind_id/lib/libd0_blind_id.so | 1 + .../d0_blind_id/lib/libd0_blind_id.so.0 | 1 + .../d0_blind_id/lib/libd0_blind_id.so.0.7.1 | Bin 0 -> 624149 bytes .../d0_blind_id/lib/libd0_rijndael.a | Bin 0 -> 39300 bytes .../d0_blind_id/lib/libd0_rijndael.la | 41 + .../d0_blind_id/lib/libd0_rijndael.so | 1 + .../d0_blind_id/lib/libd0_rijndael.so.0 | 1 + .../d0_blind_id/lib/libd0_rijndael.so.0.0.0 | Bin 0 -> 33374 bytes .../d0_blind_id/lib/pkgconfig/d0_blind_id.pc | 11 + .../d0_blind_id/lib/pkgconfig/d0_rijndael.pc | 11 + misc/builddeps/emscripten/gmp/include/gmp.h | 2344 ++++++ misc/builddeps/emscripten/gmp/include/gmpxx.h | 3712 +++++++++ misc/builddeps/emscripten/gmp/lib/libgmp.a | Bin 0 -> 735352 bytes misc/builddeps/emscripten/gmp/lib/libgmp.la | 41 + misc/builddeps/emscripten/gmp/lib/libgmpxx.a | Bin 0 -> 31428 bytes misc/builddeps/emscripten/gmp/lib/libgmpxx.la | 41 + .../emscripten/gmp/lib/pkgconfig/gmp.pc | 11 + .../emscripten/gmp/lib/pkgconfig/gmpxx.pc | 12 + misc/builddeps/emscripten/gmp/share/info/dir | 18 + .../emscripten/gmp/share/info/gmp.info | 179 + .../emscripten/gmp/share/info/gmp.info-1 | 7025 +++++++++++++++++ .../emscripten/gmp/share/info/gmp.info-2 | 4104 ++++++++++ misc/builddeps/emscripten/ode/bin/ode-config | 53 + .../emscripten/ode/include/Makefile.am | 1 + .../emscripten/ode/include/Makefile.in | 482 ++ .../ode/include/drawstuff/drawstuff.h | 281 + .../ode/include/drawstuff/version.h | 29 + .../emscripten/ode/include/ode/Makefile.am | 24 + .../emscripten/ode/include/ode/Makefile.in | 445 ++ .../emscripten/ode/include/ode/README | 18 + .../emscripten/ode/include/ode/collision.h | 1323 ++++ .../ode/include/ode/collision_space.h | 76 + .../ode/include/ode/collision_trimesh.h | 193 + .../emscripten/ode/include/ode/common.h | 370 + .../ode/include/ode/compatibility.h | 40 + .../emscripten/ode/include/ode/config.h | 149 + .../emscripten/ode/include/ode/config.h.in | 377 + .../emscripten/ode/include/ode/contact.h | 103 + .../emscripten/ode/include/ode/error.h | 63 + .../emscripten/ode/include/ode/export-dif.h | 32 + .../emscripten/ode/include/ode/mass.h | 121 + .../emscripten/ode/include/ode/matrix.h | 194 + .../emscripten/ode/include/ode/memory.h | 59 + .../emscripten/ode/include/ode/misc.h | 85 + .../emscripten/ode/include/ode/objects.h | 1749 ++++ .../emscripten/ode/include/ode/ode.h | 47 + .../emscripten/ode/include/ode/odecpp.h | 659 ++ .../ode/include/ode/odecpp_collision.h | 346 + .../emscripten/ode/include/ode/odecpp_old.h | 316 + .../emscripten/ode/include/ode/odemath.h | 308 + .../emscripten/ode/include/ode/rotation.h | 70 + .../emscripten/ode/include/ode/timer.h | 76 + misc/builddeps/emscripten/ode/lib/libode.a | 1 + misc/tools/all/emscripten.subr | 127 + misc/tools/all/xonotic.subr | 3 + 63 files changed, 26147 insertions(+), 95 deletions(-) create mode 100755 misc/builddeps/emscripten/d0_blind_id/bin/blind_id create mode 100644 misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0.h create mode 100644 misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0_blind_id.h create mode 100644 misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0_rijndael.h create mode 100644 misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.a create mode 100755 misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.la create mode 120000 misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so create mode 120000 misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so.0 create mode 100755 misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so.0.7.1 create mode 100644 misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.a create mode 100755 misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.la create mode 120000 misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so create mode 120000 misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so.0 create mode 100755 misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so.0.0.0 create mode 100644 misc/builddeps/emscripten/d0_blind_id/lib/pkgconfig/d0_blind_id.pc create mode 100644 misc/builddeps/emscripten/d0_blind_id/lib/pkgconfig/d0_rijndael.pc create mode 100644 misc/builddeps/emscripten/gmp/include/gmp.h create mode 100644 misc/builddeps/emscripten/gmp/include/gmpxx.h create mode 100644 misc/builddeps/emscripten/gmp/lib/libgmp.a create mode 100755 misc/builddeps/emscripten/gmp/lib/libgmp.la create mode 100644 misc/builddeps/emscripten/gmp/lib/libgmpxx.a create mode 100755 misc/builddeps/emscripten/gmp/lib/libgmpxx.la create mode 100644 misc/builddeps/emscripten/gmp/lib/pkgconfig/gmp.pc create mode 100644 misc/builddeps/emscripten/gmp/lib/pkgconfig/gmpxx.pc create mode 100644 misc/builddeps/emscripten/gmp/share/info/dir create mode 100644 misc/builddeps/emscripten/gmp/share/info/gmp.info create mode 100644 misc/builddeps/emscripten/gmp/share/info/gmp.info-1 create mode 100644 misc/builddeps/emscripten/gmp/share/info/gmp.info-2 create mode 100755 misc/builddeps/emscripten/ode/bin/ode-config create mode 100644 misc/builddeps/emscripten/ode/include/Makefile.am create mode 100644 misc/builddeps/emscripten/ode/include/Makefile.in create mode 100644 misc/builddeps/emscripten/ode/include/drawstuff/drawstuff.h create mode 100644 misc/builddeps/emscripten/ode/include/drawstuff/version.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/Makefile.am create mode 100644 misc/builddeps/emscripten/ode/include/ode/Makefile.in create mode 100644 misc/builddeps/emscripten/ode/include/ode/README create mode 100644 misc/builddeps/emscripten/ode/include/ode/collision.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/collision_space.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/collision_trimesh.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/common.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/compatibility.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/config.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/config.h.in create mode 100644 misc/builddeps/emscripten/ode/include/ode/contact.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/error.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/export-dif.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/mass.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/matrix.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/memory.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/misc.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/objects.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/ode.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/odecpp.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/odecpp_collision.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/odecpp_old.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/odemath.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/rotation.h create mode 100644 misc/builddeps/emscripten/ode/include/ode/timer.h create mode 100644 misc/builddeps/emscripten/ode/lib/libode.a create mode 100644 misc/tools/all/emscripten.subr diff --git a/.gitignore b/.gitignore index 9c8d3f41..3e0fdfa7 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ /xonstatdb/ /xonotic.org /wiki +/.tmp/ + .idea/ /result* diff --git a/Makefile b/Makefile index 2300f386..7733c970 100644 --- a/Makefile +++ b/Makefile @@ -1,97 +1,154 @@ -DPSRC = source/darkplaces -D0SRC = source/d0_blind_id -CLIENT = xonotic-local-sdl -SERVER = xonotic-local-dedicated - -# CC and MAKEFLAGS are always set so ?= has no effect, therefore -# we use CFLAGS to set default optimisations which users may override -CFLAGS ?= -pipe -march=native -mtune=native -flto=auto -# user can override this with make -j -MAKEFLAGS := -j$(shell nproc) -# DP makefile overrides CFLAGS (exporting CFLAGS does work for d0_blind_id but so does this) -export CC += $(CFLAGS) - -# d0_blind_id header location -export CC += -I$(PWD)/source/ -# d0_blind_id static libs location -export CC += -L$(PWD)/$(D0SRC)/.libs/ -# Player IDs: DP_LINK_CRYPTO needs to be set (else it defaults to "dlopen"), -# it should be set to "shared" but then LIB_CRYPTO gets overridden in DP makefile, -# and we need to set LIB_CRYPTO such that libgmp gets linked -export DP_LINK_CRYPTO=foo -export CFLAGS_CRYPTO=-DLINK_TO_CRYPTO -export LIB_CRYPTO=-ld0_blind_id -lgmp -# AES -export DP_LINK_CRYPTO_RIJNDAEL=shared - - -.PHONY: help +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.27 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /home/linuxbrew/.linuxbrew/Cellar/cmake/3.27.5/bin/cmake + +# The command to remove a file. +RM = /home/linuxbrew/.linuxbrew/Cellar/cmake/3.27.5/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /workspace/xonotic + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /workspace/xonotic + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." + /home/linuxbrew/.linuxbrew/Cellar/cmake/3.27.5/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /home/linuxbrew/.linuxbrew/Cellar/cmake/3.27.5/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /workspace/xonotic/CMakeFiles /workspace/xonotic//CMakeFiles/progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /workspace/xonotic/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named update-maps + +# Build rule for target. +update-maps: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 update-maps +.PHONY : update-maps + +# fast build rule for target. +update-maps/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/update-maps.dir/build.make CMakeFiles/update-maps.dir/build +.PHONY : update-maps/fast + +# Help Target help: - @echo - @printf " \e[1;33m===== Xonotic Makefile for stable and beta releases =====\e[m\n" - @echo - @printf "The DarkPlaces Engine builds will be named \e[1m$(CLIENT) \e[mand \e[1m$(SERVER)\e[m\n" - @printf "and will be preferred by \e[1mxonotic-linux-sdl.sh \e[mand \e[1mxonotic-linux-dedicated.sh \e[mscripts.\n" - @echo - @printf "More info is available at \e[1;36mhttps://gitlab.com/xonotic/xonotic/-/wikis/Compiling\e[m\n" - @echo - @echo "-O3 is already enabled for DarkPlaces Engine. Do not add any math flags!" - @echo - @echo "MAKEFLAGS=$(MAKEFLAGS)" - @echo "CFLAGS= $(CFLAGS)" - @echo - @echo " make clean-sources Delete build objects" - @echo " make clean Delete engine builds and build objects" - @echo - @echo " make update-stable Update to the latest stable release via rsync" - @echo " make update-beta Update to the latest daily autobuild via rsync" - @echo - @printf " make server Compile \e[1m$(SERVER)\e[m\n" - @printf " make client Compile \e[1m$(CLIENT)\e[m\n" - @echo " make both" - @echo - -GIT := $(shell [ -d .git ] && printf "\e[1;31mThis Makefile only supports stable releases and autobuilds, whereas you are using a git repository. To compile from git, please read https://gitlab.com/xonotic/xonotic/-/wikis/Repository_Access\e[m") -ifdef GIT - $(error $(GIT)) -endif - -.EXTRA_PREREQS := $(findstring update-stable,$(MAKECMDGOALS)) $(findstring update-beta,$(MAKECMDGOALS)) - -.PHONY: clean-sources -clean-sources: - $(MAKE) -C $(DPSRC) clean - $(MAKE) -C $(D0SRC) clean - -.PHONY: clean -clean: clean-sources - $(RM) $(CLIENT) $(SERVER) - -.PHONY: update-stable -update-stable: - misc/tools/rsync-updater/update-to-release.sh - -.PHONY: update-beta -update-beta: - misc/tools/rsync-updater/update-to-autobuild.sh - -$(D0SRC)/Makefile: - ( cd $(D0SRC) && ./autogen.sh && ./configure --enable-static --disable-shared ) - -.PHONY: d0_blind_id -d0_blind_id: $(D0SRC)/Makefile - $(MAKE) -C $(D0SRC) - -.PHONY: server -server: d0_blind_id - $(MAKE) -C $(DPSRC) sv-release - cp -v $(DPSRC)/darkplaces-dedicated $(SERVER) - -.PHONY: client -client: d0_blind_id - $(MAKE) -C $(DPSRC) sdl-release - cp -v $(DPSRC)/darkplaces-sdl $(CLIENT) - -.PHONY: both -both: client server + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... rebuild_cache" + @echo "... update-maps" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system diff --git a/misc/builddeps/emscripten/d0_blind_id/bin/blind_id b/misc/builddeps/emscripten/d0_blind_id/bin/blind_id new file mode 100755 index 0000000000000000000000000000000000000000..35bb6834de8df59b4dbeb3380f08a1db93fb8ccf GIT binary patch literal 318011 zcmdSCe|%KM)jz(QEU;+w28kMN)F7)(3e~JcOA6LNvIs&Hg&+!1tU_ZSR0_LDD^YMa z%JjOJR&%%m=hvK>J9|%H+$gu(?Q;IhaAmrfnzqQ}EymLm@kmjzE8o?}Rp9!r%jfEi z9F`R?Kpp&b;GKWH@WS~}dZvqiZ12j}<&yW0 zKHgmX%}0ar8E)y9+PX=7tFcif{S!pbS=1Fer2V!B_3>Z3jPQ?2Y(zp%l|g{g$tMd z{pw53@Ad4u3)?mi%)jBe`}?8nEc~5@KmPX}{GEuuQ}IXo5Z3AVBOLyhrys5}@yx{^ z+q18K_dn8^`0zjCM|}I@?_~TL_~U;!3pBH~;;I9u8`0oV#aqNV}e8OeB zx^pwm#Y6J=Tsii`hWk1noz=7FL-hsFZM{^(IZVBbN*v}_UrtY zkC%Xxz?0?GJ<^Rm(i3{5pX!kg_ejt0k-n)%`hp(mzx7Bz(j&d2N4m5}dTx*Ovpv$o zdZf4aNI%{qUDzW{KJu;T<0UWj!;J31bKL!qLHtMh{R)3i9CXUhaQzbLJt^g`8*lu{ zZFk&$o<;kbBFmx8E3=GyN9V^m(@iT{G^OHT`zioLhf# z`%N=lvqHf+uHdb=O?SBo1>4g%s$bLLD3v>7+uI@2{LID01A+&2BT zIn#rD+a;0!jN?z(*3n2}{SUUY#! z@m2&9KyLK^$v0|A=IMW(a_8x`>+?yu;UE9&ck8W?iA>k~c$a)hXSm{0>T(@{F6#}! z;vDpXa>&B7512liPY7=gpAf=aJ~4@Te4>6npHLn?J|VOPd}3Ay^9g}3;uAt#%qN&& zD4$R~!})~Zm+}eB%K3zH7|kaX#5g{I=y*P%d?xYQ7N1aHmFlAj;e8&9!=19QY0({-F7u%y-QC@_+k(BU8<1;NVVG9IfK1oq zDVv+RFZQ5i_jz9Y%QoHTks{T6jdh?|_j#mDHOpdck|u?!N!nP0q)Dl2s?OLdNt0sL z`Ak0{X;QAbfay9(lY-SnOfQf$DOo*~=~G4S8dCY(Q&u&ofhxc}lpLk96_&=idH2ib*r0P!P@mi0f(Sf?O|7;#v zaOrY@c7-mhUxDXKK1jyGcs~AZ{3atDcbBx!IXk+BorN3RPqIpPPA!Y2dP)0itECqK zxWmn!DOF9;;Q6lT`tPzn;D`6+))$~|ZA0)Bj?IOazO5b~^SawMH}%A)wbv?wLdB}4 zI^8}R$X4Y(uNla~!&CnR%9Y1wy^irn0?=qQS!msdOf!%ukDt^Net2Jjd1?bd)UU@s zt!P7}0D?(%>RSB!yFJubnhu;l904Pu9wj5V-rH41nu2>u$V|5-<`--(r1=9!(So zQb3D?d~q--W<-7p%@U3H+5rW1y{s0U>YLZ9v&aoi$VRuYW&mo4HJ?IFbaxNCJ4+8n z%0IeHmrrLoI?D$;q8_`lUj3%K8+jB<*RIe1zQnf)DB#h+$78;=c+9AaMkJekm2iU5 zZx3XzfvZFmHbOI_He0jyiKvZa3fb6@$yAbs?2%5_joBv~zlkA)fttGu|8&C?7?E#a z0P4x0=&Sa8R1ep9GmP3iyn#K)hdbtOsFzl7q{(=g1zP%;HoZMaGLt_FNO(G=;H! zU~|c@0Rs(%Kx81zTQY0s4Ak9RrMvm}aQh{unDcO$6#2FR2?hBl1dSir|)7+Z!*>!-xjltFwjYF6NAJ+OO7+C#|2t4)s_Go6*t ze>S9&cw~A1NA!c}BBVXkNd)%70FC(Dx)1iw>?iaT?qIUqmxn%tsO7%g<4#NtKniG7 z&PHV$p)Au@08Vc|hhI)IjnTcWwR^h=y@l6H7bk|YUm>pRh`4%p{~v;c?YV&HdwlRT zT-NHt;K&Dj#I1I-5&5TvMS>Iak5LK?{@+k%9b6XT`*Ym~XOVr}tNZwWO`W(+oj9Zu zA}0gfW<=H_i4l=^*mnxu?O%hFSEI?_r}~B?k3(($8i`^gI3FI+utzdh8xvB_#?YDN)6H) zC_M(<4J-&`6Y}utu~w%7`8(%gE?JZ85%Z7{;T};wN1`o2Kula#PFHt#>|WMgeLm7s z{;QPo0|!xlUV8btnu1tSxU3y4Urz&{Y(HO@Qz=-hS^lH+^0Re0^tH=c!t&oyfhF7L zq?89)o}FI)urAML`-v<+oDTn&x}2d8tC;1>(#uEaa+qF>pXDX#22qJ8 z@tdN{>G@eZSbiiOzwx?U#>Y8{-JV{4X$t%$EdP{~lZ1bXra$$t6=Zo0kW48*tjoPD zpUCnbq|Z-Wm&15s{4D>BGL?kCN0-C;Vf-wAB)z;%m&4(3SqBcFyfVGKS(gj{>|ptq zV4@WGsravE`Mv4*&(`gsDKY;nADLc$i!O&=!1!5y2uP;DxA|AfC$juOl&5*yb=rUT zZjLP}fr1F0uh#=emnYM3jU(tHT2-g=eAd{>bfmKJDxQe;_^pp7G1u#OxI3?MxfV9F z6;~UwFiEaAu;$GH1ha}hwX7KgmdC1th1l1Ms?M8BYM&Erq@e30B(-Ws@)vC)0~iv<@7AGECxWWKo1dh(9ua8Q)MmL zl~hUKi}jAGIzV#N9N`KobjYm9HYel&?Muu#xwQv_7n-L7XEhPJYd+>hwGg3VPJqYy z&P~K6bdH)2->}$ceS->S)d7ElNjOKS6p4>nmg}^LO%v?jR5e+ss6t*;LuJ&Az06tH zh$ZLiTks=UFE!`n0KZGjvALji3Yvc#s?p4LIt@yvp?n9;iN~TTbW0i82#x0(DX3qd zvtB$7>X}4+uI68do}d8e$L>b;PL2{+W%cywcVglqW|Z9p!?5q`oE?}{}=tc{rCOW{!{ts zL=698bAku6c0rPzzE3P#%uHvR-aym|+%&+MroW)PClN%P%`$SE5bn3qCb;D|lX5$n z|C{_o{Dy1%E;i?Q!Br_}-gikln&)dY&vnr3eH=738>is;WtH&#>t>nPLH%8wwe~ou zKZh4Hcdg(VA?EX#ZMxv5Q?GPnn1QVVJKX4fD-DqzhROe%k97YiEHw4ytxF zEnICg{$<%SC`+aORf0~a41+hKfxUzROsxW-VoFmPFB+bP97s5{MpDT2c>N7=OUrv= ze!iY6=codEqoHO^GOvw1HP8F7 zrZ!qreO?h8p!O2Dv83Io9Sdb{mm>Emfo?=DPUccyp=2ydVizG>n+fP|&>JSZC%uQ% z9yB87LwTBGJzODuhp(xG{xKFB^xC*x147f();8l`b}|ZOsf7M`im>?)dl32+R0Gaz zWMlUitJ`CLQKjJiTM*vHhVOa z1-cQrI+<&udvpkhc_p&z{0*^De1e{nU~sb&2G`-s4=)muBn`>7>jdWuR9Q}n#$B&- zb5&VxYk;0CG$1Tp_LLi{Vs+>ZL=d8*z*>Mbis+1|+PCBPf3w|x!a`i5dm5$6vQs#9 zxXvv~$Lf5Yd*<=5It;)w>QeEtkdwgcc=5(uIy6;>R0x(rJOEpEU-4srP3EXP?d^E1 zrzZ=I&Q+uG%+L`9C!^|+Ll&6Nd(e@s?$9DZmuh6AB2BWk$HGC;S4d6zHzd$tdMt=f zRb-o$Ip$q3FS)hdM&xBwF^BPOHQv-Xkr`FlVflz!tJzyLO=XA5@mV)9E3h}|anQxl zzKm_+zPMJU7NzQy_9dEwgLjB{+*IH!%FY|SLetzge^qpc!!@BDWRc4B+xLs$0Z#@p%B&2C1 zdQIosBIG3a*2eQ&<+*>4{xfw~m#6jrd8N?fBJ`hP1>1FQo+|SmgVjoar9DZNr$>;N z!0T9f694|Bb}|z@Rxl3O)@$`2&#qNd=p@HA7Jm=Z?}eTcB}g9IhiYo0YKNQhHYz3^ z<)nY5?Xg*zm0}|DVUp40G-wVQW3kJ0oo%};OM&^VfxQ$tSdFEtXn}>Z^VsY87a&_Q zYqzPEUrV)fb4*{s;5oADt>0mTC2a_i1eomHt3S?%q!-JM3cHx(tyFe~`Hv_UDO9D6*dP2sJI>&*3aDpy=n#GAF zAhj3KCm$qwd)=tJ|pPg7D3 zs)M2b)fFE1VK+75c>Va*nCQ;zX16IM@MV1xsge*Fx z|C81%jhAjffChfaFB}r3@=-QN_t{m%D0m%>@C4bJ&`dE=wke=Aa#-t=E2P#C+bARF z`70%701R?EeIdinidW<#z0}`e%lO>1{m7xVWGB{7wpD}@7pu4tBQ)>IrdfPJUi107 zQeF%AT94NhW7$=RWV*2|{vNW9F_!x%RkpF*C<-e$I3a5FQi{PY8qLAZJ0+2EKQh9H za^{XqADv^`Xc=!|e@V+&iRAIuRgTy{hgcV8;xEorW$E6?{1UE6n(LqI*$5|ViXoSp zlxt7DWgGUlq^1$6gu>OCq5{RZZ2nkL6 z>~fODSlo++qAb8KEVZuHB`VIHL0jOoOHpO_x)mj<&cMZ(G3^W_7dZ$o!N>XzN@$QA z{+IPaa(#w423EZjiYN$c$q;2(l(4_>RW_*;{_l4&AuY*~I&wnVS(jjG1LBX-B(>MM zf7Lu*oMZ?mPITueVTdym4wG(&kyq)Gl4L(=E)!J5*n(pW35SPuTwJf?>=0Fv=si0S z|G6DF#qTv&^{A+5cZ$KLn|qgoo+xQ+f#S@3Oq-eOmpfJ!t1!+p`3X3_GG0Z}k! zG%9O&`r~$o+doCsvSRu(`P4p;EEHMu_K5Ya?F&fZnmkuo)?d9=%zat1=Rr1`KuhJeNyUZcNMy z)j*Wgq0Q9m2P=%$@dnYy&iZ2<)*s=ToP0BsW!(1#1`w^;0L>+_UH2vx zXy&j!iUHv1wFgZkv(0NgYP`q1)~m*Q&13v^omYAAzxK;&D7Y@tE)X)p3&jp%83ayTf>NHpc&1?!h#$s%V#az zjp=9}r%e+U8ci53fX6q29t-!4_Hs&6{Y#(YUoygDL~f^_!kDKKxmjEmQ8JVHIwzYI zD)8DG=l~tX-E70k-S$2?gJwXSwp9aBx|C(&b^aJQN{|k^)0VX#jioq+&c(XG4)5mq zj!_r3-X05T<~FTsZi0JxJl7zx zdVFmpaSoP1ZW3$>Ht&zYs@feGtQp7y5#R*Tm4oNSJPN|q(8w67-3?Ka}$H{FEiL*mYsU#7sJK3u`Gx;i*zW3_g8~KYh#s{X{@cpAU&A z4QD*5CW|<@aaznoxDw=k+Gdd7fwFcC0J(?k+(nY>#Tb$Kp`AI0nVGU6HX=unh+ggv zw`OepqVQ0-yANFGdwRVBb%|qEd;1uRx&HJYj2m_7q)4Wycc{x4en2k{f7hTLaXkT$ z?4pcIg#>HrC6XXim)M+UY_x5>Ota_+w8i+)oOtLMFrJv9Y{$jPs_%plv%~oU)re%F zkptP2D1F*Kw{=nm26Qwd`15c}My!I8N}=(0`ws#}_o>uN=|iHgn#vKcj?lP0WsfJd zY>e)t_9ATT3Y2h*I{`L)G&8hZ;sxR6;S7N_C3u8%0USL&<-&5o(aspalj+oXQdjtH zV%gx(BDuZkk}5_m&*CJ9!@;3%J7@=;N2kM34=$-w*hw!%L=m&VQ*) z^1>c--y28!!Tv9P>*!v!r;!fozdiR01ga6?*Z!co&_C~Yq^x!A7%6DD8hw$ z&GV5nx+@X2GHTahzNDE$RPz1m5@H)Q-LL%q}<%o{1NlS92jP{Bz+mL5CQ0%Yr(Ga@IR%{;8gbz3d8@)Vu6iC?Tx3Tj8 zl8XJtQ`D#c(nfj(R>LsT5|83~LH3hiUNRw~g3Jr(34J@s6_Vt6aw+|-B;g_J93aU8CwYn_2Rq43B-MLz zl*He_V+dM`%`hvCI>Kot;|e6}t{UZeg8~G?M_7R_VX(N*~bdu@a`8#7(OdvMX(H zD)Ep@&r0L%N{={|xbfDr(jdDM{Q&8XyMsL|^|mWr=~Tjz8BSUnPVd{YQ|MI6ga6vI z(t5iR&+I1SQo>`L!}uu`eWEaSANRhn&AdeN!mL+Ghzr3$;!Qm0Y@A|0r7 zX6m#QNTpyTC-A)a3QXXg|59WLZE@e zwyZB?IVj!1l6$)Y=a!@oL!?5026f z(ths6&g;|oMdre89toJ+>lHqtOD!(^xG^=KAac~wz4rQ(_Q#YI@H;)(F&!c-KPN#K z%&60P7)_m}!&uE6ZDyt|=|Jr`p*1U0W49t{b46;m~ zRnFB&c_7bOa06?uB|)q2p8{HSw@S|rEDeMswwx)shWaUhljZFd=|J1p zn80j16i*Tfq>r)h1bQsGgoTtD02BJXp$pVmC`eB1zZ9*58i&YWYGqj-E&(8|HZGL| zH-V11SqylANNYvTHaGzmz1ov~qpP5tI87gMnh>pFObdLcWeT&~eX*b&d6nh=LY|(p zQTi?F9xGEHT_BKZZv$^=ZlPFl9fUM0QdXBRk%u^!vjvIKd zOjYn{r)JX0(}z)=b;R|$-hECzJBD-|k9WLHvdNfyiR$+V(akbI_DUa2T835!`8v4m zvDU~4jmX(#8*xb`>g}E0uLh_C(p!NLklb!hbna4QR@n>u~drI#|*De4P#17)0x}^RN z?;8pp0!SxbmLEkt_&*Ap{Q;YUI&230nuI5&quiIz`0{@QZ&E6}h5HI1#R>Z^#$8TT z_xY4Pt(|oghIVQ42#U zF%2PK5{x#v$MXxcuCUwFBD^k?4mSNOeG!)F4?ZgD5Z*9dourJ|({{4vkqGx1(y`Ho zm^xV7yO%kp*!L4@I0%dras414lMY5PJS&O9<#RJ~H+7n}Qt$G0j)(gMq6ra-bjo!| z94mS#@}+w~7i-vwv~tc#M>(xB4_T&^V&6al*+yh)(g@ZQe9{OW)&#o1F%k(Q*od9f z+J?JNbqs_U!IhFZZ(5rDBMO|ZrJ~bweAdIrS=h`mI%m7|(bqHdLGV-1Jw@$wlE?Aq zbp7Ml!|ODHQ3t_|LkY z#C5tr^+l_mn{&%_S>&IfX_6uSrM+y?_(i_vREWL21%RUC`!s%G*_9U#C1ZSNV}zTsHo_a|iGJ7HNZwaUK> zz_XOXXxT(O`@sJURU4%Op%MlVvCK4o5g9i zKV0KGj-mMx);h4b$2T;7u!)FWVzlQVC$>7x>W~#<+-*IqJOFfi6qH(q1j&{lgr2n^yO@GOTGkU zU%~LeLsdyqB<;flz)W4A-8ua@OEb|o0Cd`ylme!}X5~q6v=gQv%Cj}>@^d$ig9<*W?SnJ7$+(-A74&d|%>r{d$98lU9O`KSbRbAB3`AVh*L3mi2-}9L8xON zpnOL{R>ypQmDmqMjLNnlsBUD+InfVf2I61zzd?58#clfYj-2Vjf zl5@Z*)#M@;Akbz3V?=(%Y80G=_k_a1fCH9zQ@5}^Z0_tL^JZ4$4iMd}OkMG*1OzDn zgip^E2oEGN&^s2{cH{&rQf^O9J{qH+n>eRx%f~UTXuztP(!bwHIm0HSlbvvM{T8~` z1V>^c6Y|Lz63;W?D2WwJIPUqQOgKLMVkX3YMw^99(7Pqkf=F1GK@+7Tm`u4q=GI=+ zDIkyw&Y!lc;{WAZl^Ogv?g&bsOsE~AZjG~*TORbeGY?t;qSMDkK8;8>AU?@KvIZ4@ zVvsdtK!7Sr`R=KVhxfb(ThWl61xUhYEP!}LxM)9OO4=NPdc%E)JziX zYiJ5;kta#T1ayaryLIVhvY<(nI%M6TO9wp3j3hD1F~TkhI;NNT8=PxTDy5qG$cb}+ z-Zq2T_owjuWh(#lOskI|yzm4u0)#f6JODfpU6exwRk(j-EiaU^^F!8*x)*r?l~auM zD*BsXRuBNgG*vkW`5@k-PU2JtFM_n5O2!Bdt=;`3=R0_rI*Wr##AViHze)JILFlcz z7xS66n}s<u10&Hx2=xmr9XNz`*$*`QoxtBH%y;p{7ce9XF-hdg5RT zN1u^YpH~HT1!QuT1&IZb*-gYeBj(tYiX{|py*KG)-cKW(5G#Cz|2y) zYO?3Jz*j@q|COX>r`uL5yhZ|!FD`n+H- zb7Z!1;|meJpmrj2_IP^o>x+N>)1Urif0W`Q>*D*+(b>@v8C@Uv8@7HL&10zCHSC65 zRkg#o|9a4dE<`z=(W%$`Gg`b9?n$?*+^4GAVsD|QjaOz(Tlj0YvF02jau@0vYp!*N zzs^`x*=a=lI*r60^-ja58OEB!#+u4bRnu;)`NmjN)!F!or{PnNs_H~ykFjQ3-^1Y# zE^CPQR_~croeMvq_GT#E##J)4 zo1>l|7!T4J^l$Tb8*3gXM0lZVUgXP*BY@c=^#0)Q@zUbD4E?l}x-UatFJk}N)zaru zz}NjqC!t5psvV+m$fMV1hns!QdPy3@s?n34w{N9XYoHULT_BiHDmr`_lOS05li{&X z5c`mp>TUH-;|Cs1yzmD_azEFiTuc$@G1*N-1Dzv`+K zShp0mm9)(5+gg^#-mqQ`WM%f3lX#4@!_;K2M$et@Iam=NvOj}z`2X5T{(}=<0u#9S z8B~oo-Wz(a@xwmRz$eh>&J8Sbn(}U757x-o?jgN%cEJj*Bs?llROGCm5p8sn@ZlBYnV6WwvG~N7B(n>U1(|5ZuLEtGu78%0 zvfb@!RJIzGgW(_`FNYZs=e!{|{+zZS_IPlHJ_OzjR+v@U(V9=<^!P)-7 zIM6B>C2k#nzO(VEL?dj6dCcn(6D%-i&Q`B2eBagW>R$K({&6+N zyp11t`@UvY;7hrMYFB1XZRvV!={C3n8gTL)Hj z4tR&@9nq|l)lpTk&#bT--^>_Nv14GRHQ;NsINbQ!N&c_Y(Z)AV^M7TAI^C$fFSBA_ zX64@SAsn4Wiyf+Bul+r21=QjmRkJsKnpv|)QQw(Wdr_>ugtk*vmKo{*PO2&Vp<(9z zPQBOo)+wrH6Q1!*RkbBL`6Lz;|E}?^K7M5HS6z*tpP)i*=(q8$ewoF!!!fAF*Zcdw zfqaKL)y~E@dpEvyqQ8r8XZX9!(4Nei&LLH8s-{!DJz!_o+XHLbncabGRkJTTuRHvS z5gq)w-XmgcC+O)yR7)w$*k`R15BbFL5bp#lwRDUSuI zXb%6aTB}0q37g2l`SP;)4MWY+!R9>$<~2p;m|}D8a8;X&%3#Y4d2Cd(B^kJ_oZT)n>VeR8{sPDb5@9}53}%zxF= zsqADa^UWyV)v{@Pmw(msxA0y5HI{FssHjTISh*jB6OR8JB-qz?SKqIU7j_vhd^H0H z!~NUTvhf0e|ElM?k~QUD6&=l-rL-F6Qofr}z8lNm&2IcKn?`%NvGTR-zHc|i5SeIK zU68lFZTZbspE`QTzL6y;_b$=F*{n(?3eu8Y_>UVyt}c z6eTobV<8Y5??>6mLnI$HPByF74$;JWp3Th=X24SK8O!&dZY)1~y19Y5eqgm;Z75}h z8mntNg#sYUnU)#MT*|WkQRWP+S=+U9VAZODp%qG6n;UW^d;JjU!vBp4mU_O3jYDmj zOZlRf6*F1&NdG8b2G+C<2|;)o28K2b#AItQH4Ou69&uo(WrL-~CiQ#)UqV|1>9c|K z*=iX%!>mFX*+Q4C+@Ci@@-hCrAyS~Zk@Z5*EgHZX0B}ZP)XNB4ZJ-N-fn(Uuv)9aJ z%upMA%-%qe=>I(5b-#9}&u1gYy|dq2?xnhL=b9fPZ-(>8p^C#9_}#AiH#o9)2Mc;Ce>)H-0n42w!l=iQF6Dd&<-=S z!&tf1ZLDl^``=QHXy<=dZ8ui#>H`z2svZOHhZ{};AhlsM$Mn2#+{7jTZBiAFKy7bV zEr7gyXQr{dH50lW;QEWo#9LE;z}IkB5w2Oe8lZbO!WG^ynY6_eJU^Z<&@Ql_v@LDw z%S_MTheCY%=lp#*9+VslCP3C}*{SbD^0+y$P5nL;6oPMT`00LLF6u4q5Rn zWBD$~%{Ql;I>%C>B@iiA+NWyjOo+zz%s^fL$|W$Lp?w1@Rt~JO23D=`f2k@SFe~=L zG*vAE6*2>h`d2;>j=96{8`0v|QKH@pH+qpWr@rnnv)(d=K$$1^zri!4<`Gr1z!d2m zQuA15#R63mF=fR4t0F@{`VI30eGYv{&5lgiG0=9yd}h`(^k2po_a=3+S+Pak;4wqZ z{oWZE+A^e~8Im!uV$Z;uO_ao{b|4uIvQb4l@LV>Fudvr|V$2Y`{bxhJi{G)DHY&6V z#8|m2&;O=aV9dlf_`ao`WZENSf}nkK1{ec5%WeTE_54f%e4b!Iujn-9ZK!762KJiy zJm33oU@doJzwK^#(GC6HHY=Mki)O`2oUk5`Syf93%!IY66$llpVMvTxo}=WdVLxy% z1Do7us-69Q;Q=mgoICom-}PB;_^*{)`c1-@qPU2l*?nEE8EAuR)9+_EyJopZ;M1Rd z{jT=8uPZPEYy16dFl5p_qR6aV-|y;TGqlou-OzqN8@{lahF3e8&U#qCccw&Ja>TU2^rg{x>#A7%gh$VvG^R{~JJh4sUn{lxKp*iYp{K88^SF!gz8Zl$} zMsH(>w{J_|t&l6@1^#_aps&I97|Xk|XZRZ$Kh8E*wq>g?`!=dWjh|-sZ8Il~R%1)e zvEx)(x!vI=^)_;)Lm;+^JxK@X&NiFUX`(;$)_1G%0&sd^D^aDX6BN-WI#i(!c#-H_ zdal{aZYk$#?C8F2s%#we30!F-vK@44DbF0g0J<=IXqIu`JIJ_n0se{38E@1+fES5b zck!Iz`G{y#xf3W%-H|uP+9l`cjyw^4=x*R zP8g>~%~F$srl$X>d1}&pfepx84l)L+Pm(h(+S11re;wRw!c zUJ5rxJ-xBINJQDVay$4`cXy0ejmUZd$gkt7M0M@|b4%Iy1+lwO0(i)Oan`qic#a^h zLB$z$Xyc0Bb@j6~v9lzt@%S_YsKic3jveh&9TQr<2X2;2^?)f>oK3u_adKXK}TV6 z#GTjK&|fA$4)kdg(7^*f2@}wkVgg_pjxhlpjtL00i+YBxrm3)nl!gI17P_~xJHDXIy!Gich8XogG zfWpS8CxfFvD2mdHEZN`7enLhRy9s)Uc4A%W|5EwG$8}{!2ld!K7X_Y)#^@9ZzHr9N zKX6I7kt*Xvge52j0T6_p+G=e$#oz_Nk`24Wee~R)EJ}#O&!FCZ9EB%ttGBzL{p&@$ zZDTWIP1b1*F~m9%bj|WE%9_9oc#)DCH^D7r%BOxS6?tg&^yZMm4IX?{Jp0RVa}lMY zs>xAu?eX2j*kxlJIS$6XfN|=6A-t|@u`yy_ywL#l7`=Y{x_tDa-cuR%&B(w>{`yVw z^ww{YXI6ciJhSU}$TO$DU7or1d*qo{-yzTZ`n~e>)m!o`sNW~g!S$W;EUG^s&*J(+ z@*G-!M4tG5YyY2HM~>!TTSt!5k5c_8=YwB6q{Iiu@s31F3u0f&ZOnm##Q#O#& zn$O_L@N`GCY&^r;jUQ*SH~B8i8jOypYBWrMDtQ~gjC;#a|4wg7i*X+>*Khzk!?EQP zu44QzC4u(2i{lY;V6Lr}r=+XpYRXLbv4mQNKM>xB`&x@3ilhtD@>2#d*m`LXq$fjU z7@*ZB1Rz#?4M3(Cus_2s0g_p$Wg@0WV=H!_63}~Kx%VRzF$2WI(=-(IF zr#~P|rm^y-TQ9@0H%};$t8j!baUdb-Z;5#4+30tq~mhoojcxyDLxNogxEdX$67)<*-Sr}z@;Q@!60 zyuO$C)|RI+phdAeAfIYjua+bSD|D9qGMsv73R>~aBvk5r4&{No8o6Htgdhp9@xhM^ z3W3u&Ae<%Jd}LG*QVjrX)H#s6>~%&RD)KBIspL?nK3{NFt?{ih>a3f=v8vT6#Qvu> z;#`+2zUJ8P7n9>VH(?JF13LmfOUxpMA-~rm;F2`tXln%v62o=t~q!`Taf16XzYkq?Psg zIOK$J*muZ> z`^e^iV6BF75HwSTm&+>7%M2)4r+=&Q*uHJmMAK5%mmYk!UTr}?HNk`m9-qde$Bfs9 zr3i2tiTOqka(W6+x&vH4@+JWu9LKa}BdJe_*lujz_cU9O>4dMQIQ_(&@#1?K(Z7Pc zm`L7&58mb}5$jQMW@UDCa-X%}f^O`*mu$at%6LUTA{o6GHdUHY3FsoKgBYs5boB%0sF_pH1|gF`)Fdur1xo@ zV)XEnJ)9dO@*uE*l=77xQtfWU6C=OI+reI}ni(ogAb}a~H}ZJASImjPd6d8b)Xlv~ z^Gw=|hAlUWWK!`=p7#OBD`B>EUm3yWT~j>q$7LWX-%(-z}B zccizr-}n|gOIphKMacE|!*_XH#se>4NXFw0E8M^5u!7feRKgfQ!7Kyc%DqvS$`6tS z4%|71RGa$mF#-gKW3~=p$eIQo_JOdgO?T4!TF@IG+UBD`^or;U$gR*$%WcnbQ}wa9 zMbAWROme)?cS%sx6SnYL{83Z9Q(suk7+>O736$5)D^m4p5qJRZU4Ck`ItbUr(>#w|unT;m7gc&s+?H_}p8 z#4=<~gD;P~o9WWm@>VQsXVjkfNIPmqpJ(PP)DW!Bw$wiFKL85jXMm6=3?^l$L^-_} zpn0;XKz^za;X+n|{??%?K0Utq><>(8EkbVuSj1=WU-N*|5nxbXTJz7-a7B4~^jx%O z_M8iRD@EiErNlduW1j_FtPTuFv-=5{dBI#GeiabbL}1rK2aj)ugZ^eTi*fHE?L6O5 zQGYm$;drH0-jc3hK8T|odUUigbRLEc?>TX34LjBC^hn{C>Yo{L&Xc`ea&&G6PD|m; z8v-h}39t~5tEwsL)J1rxlODjoO?4&)Y2vEEE4dLZxFZ1#a?-a2I zmDl>aC%ycBh0BGSGtG!^0qHf>H$FPkS8kSal6}!~{Nf_SvJ;k>a4bBd6Oo4z!6$zO zE%L2_m!c4kR}?>+1w!F5)VdIP>xNy4+Jt}zE7_QkCP9gyFDg+1gy90PF!@VRaW9Ip zVWxJJt%rL7_+X!PJ25Esz3f}quasrhS*Q)*Lj^EU`{yuz?t)YSiWAK*hk)5(`?VY@ z%5@n)PJ#6X(MI!ot=gl(vFcD)8*myrphe0S@C_S9*K&_-Cvo*Zu%w6reLP zK4ks@pKZmLbOVj8UxerT3eGlaXNp1srh|POI)H<9?@2Ni>lb*gWsWn3pW_`2;DZdF z(ctgyYV#k2khm783}u7=37TNk)$1tFY=!~&UPK4oATk}*T+B-jV!D_RuKmP_-HT6G zz*E)H5$;Rx0D;l2`p)yrAm;b#jHqX^+8Vva-C8Ot0!r3`3_M`1xH7{P{w6c@If1QRK%DMt=u7uzrWV)~76+!npC@SctPAhUBOLUQ z3xx0y57>Qa175R{r9b<}2fP@Ae6Ig8hKOrFQhtK9Qld|T5yU7rXZl8)mt%|HgXZ~- zht2`ueE&xH3++g#7XQ12EhS$8R6$Ly!mcS+gYD*20A~j{9EfKD&?^9uN=t{ijR)_; zNX&b@$SWO!dgg6h3+I{hyvCw~C_>t3Mvuw}Z}gPx4`E{jNESr1aM|>4)TXX>FiU>7apflVi91r9V}3x*qi{{< z-Pp2--3lV0JP(tb1&&Bu(0mh^kgiEJ%1eNevG`-CJHaYPu!`Q`Ha-1Hp}jn(hl(&+ z1@5iUoYT|R7bW|R$TMsMvJGaUDnYz%&3-1iA^ zCso*=LqA6N5F@ePpzNU;_U{(c$`e0x;{8X!m9>A+?R?RR#v#=hKgq_*sO5x=33bX| z5l5doF%zMr<^d=tW+zb96T|BPh;TGZCT5hG*s zb)g4usq&a3z}}w>gCqt0C2!tM2FCItismkVcXVnmmwTh?EZn3TWxbMlIVM8O?^~fS zaStn@D9>~5P8s`1PmJ3eBCt@6Zxlmdvyma-w*kSs-*^$-yBvSREMH271B73VEZG_A zj6cmmM79$7N?p=ccnBLOZsWei$RvcHnw1{5(JV7U57nq`AlQ;OgJaE!dTeADj&55p zCf#3z(Op1vlcSr6(KXql6R+0HxE%7XGBL;!j1SD=HOp5~CYSIw=EBa{spMVsUU*2k z1?+C(v{Oc<4$63hA`j{DY!KFrk@wAjtE6>qQ(-His-e1|1qCu!v0o(Ku0$8M%?R%s z4t^@8eg{7d29Fhi--hCfWen>S3}!S|l4nB^+3^wN3 zz|O)J^j~V0LZcu*+lUkhKY-I_;%}<26!rYC7QR~Yxr!MTZ-P5>MhrWVip6-a4z4L% zqbv^7U|jhwX1!nt0<-j$uowo!JY&%Xga}Pg_&F#wT3iu0N(%lG?6bvd=W&RtHR@T0 zDI*)^xtqdAUBTJL;?=rkuCxn+OnE+c8(Wd1tarzNha1g7V0{a0pE?qs>=A<_H~1^3}_$#8d6+XP$U+_1fB_?f^t8^g=#!tagX zz0?@PeDL&Bm>Yq|Tw9En5-MyZ8jLotljQ)W$7^1m@Z~N9x~KsS4*}74hwwnv#;$ju zUq^2wECL@*-k?GzAX<9zPZr(5ENCo`b>moAn9p$v^uZ@VE+g`+p0B)U-YR@<-B!4% zWGhH9tneSq^vlv;p>s`NuwPQDG5P9lTso#|i zU+M}h3#iaDIRlxY9{^8d@elM&=b0ltT1Cn91vBHhBTN2fL~>coMu~Z|FmF@6-8df( z8iB{LffN3Qgc}XnEc^m;3`ZvF`3rf<-C}die2|jP1J-r*^mH%4S(J7#Pm}6B_rh>D z@OX+WI4a3JqddSNXJpCShFE#i^RV#E!@@T?T$bdMTp$yEK~Uv967+^Ia7X8QX5$B) z#Canxbz#X7`vXX!g`B@kPYbvNInh#@B_T1C9;vNf>pBHWXEdk;pkbFgS_)|B#78jT zhMd@x1gM{b>>B77$irvs&q6xH>AvYg=-L|*hLr(B`HpAC_2@dq|B@h9><8Qngolbxt{}#|^QYWbjIL?S^Fi#P&^iTXwWsm(Udo~(Y4XPln+o>}*N}n}eMQkS zF>hjC#`%iOWjy0^3hC*OQIcjI%pVCOmvhhBRw`YVEKiO0}z z$2mr%2|y_UQO~m?51ho|K5HU$#{f9X;yC8^1tG)pA3x$E2Q;BAuPYn}oFd|^U~{xV z^$A@V{s!~BnOI()oaf8!dERb+&gJ=y%=2$J&&u<-Tknryx^W@|`rtETbi2BaRyhyk z$cKLQL0=ZYLv7;NYdk19@lPinV&pq+B9_XJ`ir*BTh#~v``SabJmiTu0 zaICctTSAS;7t8Vu3jqv1H}WZ(RKOm;2#Yc&>$fThpR z==naM`C{L6!_$z~Qy$)z1+rzE*^M7$P}xw8GnCDxb+|dJiTuEspNa8s==cF=as+wA z40zPL*rotWfXu*d-l&q!yDtcTcn&?X?r6>ni*{{qFi#k;3B?(qQ#n1Oaq1z`0rV2~ z|9JF7MbqfwemLg2c5~>IqUrqkSA7vTI?n|@%}?pkyID8yYF^9 z%3z$GsR~c5o6|DNT@rB3AI`x9&q6brzT9Ze{o<7zlrz6B(GCYvN2xq7bnRqkydO(= z0BiXhac2d#`&MIyJPPTnBptgE_&5TN)<{XRRS6uX9 zWI+p8IqF#|Ri^r8f;sc?+Yg-Q#t$=%4KsTkDcldP%?|(LoWf6|<^AzBZr6V0MrYH= zQ#_pb7>#$iZ&q!CNQe>O`$3e>!euTfQ@g?+_5oJ28e^HlJfPZ4=&3xi*l5)Aq4i9N zL=kkuL1T0q9QQ?+prM-_#yOk`aT+|@cxDsEI?KO})#0m=@Wz-nr1ITVSTy#emuCzf0jZ(5VEc4sjarn^_?b8S1r_Kl ze3T0F7!2S-_IviCMScm?u@UKF3y@BIjnyEWc)m7m|8O0{x`khFxBAA_tBcMY6>g<6 zwt<9RBKi&mh8A`L+$`gnroz`?V7~%(Ls7Q~TGx*?aFOxgV}NC>0eRHtXgG9$wJ6hA z17%1Bvi<0`bQxemVlyjFDH2aW>9)2iiURWF5GDkSL?44Eg)%o$(x~rsW@O> z*v@#SrSKi#fri~&sKV94NONI4xIlv^>;?+4&5#iPZWy{ek{E-A0D~G~QiI0a&42`6 z)Ytfkr)B$x$SeXmKJOa`(nHmubEo=zi>h2;)1tyd(Rul?p@4%x#Y`-!{)UbYf=e@v z+Sl+J#)oK28cSh~BAbKPMH+&Y7!;X-E(3W_U(bXHndgTv1bJuz%nrtvpxR9TW-PS8 zGqKl+Ju)!6xyCaa74@;iIMGq;a_PoxEZGR~mqfM&FJc$qpv7;(^aJBuP?L_(#1%(m zg)Ti~8AQs!SzCcxKzXfm{3lAwWp{yU}%i8JchO7@HIcM5Tw;KShlQ zjyC?C&j!XnBHP#qb_oKon48Ih!fv8KP(*`(@cDTfAYMXEl_2M1^!^+6(++S$H-w+i z?8M}_%o{!CEUce@tJ?hSg>5RZx3MGRQtrCkIVaq3cDSRnuo+6^9K5K&J~rjy5D*#n z7~IuS#;Fm1=J4&MvIoa`0mVpF!EtAS|WUtv+>ukr1LOEX;Y zR^~?ooy?fQ3^N6PU|yA@cM((YpW`X{CRjSGDl0e)J8|Y{kM4mHO71PS*6x~P#SGj$9n@-w{PRH{u!=cH;sSjO|!rZoMC)s@L#Uhh(kgYYe5U`ONE z8T_IJ2jbUnD{MmW$rc$^h4ZZIjr+NRPoddB5uOG!u%1S!4w&EzFKD4Go|s3JgI`!- z*7$`BRunsbM7%oi9hzCbC>a!KR23a@udMgNtsb)v<_{n7W~;A_^$qx(Uj>>Acd7lr ztnhVv%`Z}{D%KkJpPq_O&^IvraVHMv5*bVm7^OME2-w%gdce8{IAG;B|96hpU%98G za;*{N?_u&=oWNRq-mL;{!>T%r2N{S6;Wwf>FaWdsmq&(`FFs=2n~Pk4My4mJYbE1f6HWC&2fobl>tgTCbIb zEhK=horvzWJa^)&065fldk_eKEg)B&UIJtC6cYzgSn?%4YBVBCksfyTJp)L;#4LKz z6q>ZD%xW2NX91R=`Zmekk0JW zI!g9PNqf?TghO|0repFa;gbH?Wwdbknh_G6(Ktc?T@;G0d_8$ z&jF!6AX-ET8P6dD_A|B9+0J&-EDsjK)1GF0W zrRWO$EcZUVyP%-V*&e7c`t_~;E<_!nx+-$Sg+|c1a3ikJMqIV>0adYttG>V^#)Cfs z+v55!vU=qM_-N&WjOZ1fg*Y*T?1vk`brtJ@oDumegf=?zTy24;`UZtR?2LLgu-oW( z?3~HLh^oho`$Hn!cD-`c>*zG`Rr66mSAi$U<9g!(=OKzRAYMz%$|pb|ZI8fS?=lzP z2?uidTXz+8{MEL=N*WYsWPIp~&$X)>xZHnV5ZY8-$A(!k=_P z(bj%Jx>N$nV`gB5UUF0Rp=L2+=LbTqTiI!4ovK`JRs!ASydEGWb{bfr@I`IKN)_0n zI=kA3z(_!kjcI{<0=CB)q*Y>YjarGaRjzFvDO-wWU^TSC_sojb!~DjB4-1L8P}2rN zOXU|Ak_dZI2iqK!pUUOKvW*8PvvS39;LLN;43<+P>n7`^$#U?VG}%X8!NrqfWXy^u z%mBQc$Iw+S+JZw?pm{dgjk_V_bDJX<&Y*lRkM*X|RXk!(s9CurI@NtdeH{&E98m|y z7>nMg*re_$#f|&kK%VHgXpUxsk)BKS@tE~s90bn6J7k<+5wF#`|aLwLx2f_04h z!>AT+=)pHj$TDOO%{Er!1*FykxHAKTlz~jtqP0Q_a&Vm3gb@#c)xa|FPB5i5*Tney zyMix>AkLl-AF;-ML;0jMLq7W>gYr2EdEf^3SJ9DfXncFwnSyH^taA*mE2Fq$A{xdpM^NWCEDEo_OF4?);wi#`&^Su+D$I0qC^UaZE$D2@n*yRmU1 zzl4Hc3c0p>z+qfDV~@VJ!5+0yn?Q4`B26m(;|n5dsFSo;Apg;{0k1ec>h^e~u-F2}8dFsSO}{ivd-=M^)r zcIGP}!o)MWv3g4tKQjbMeOIQ*Fk6F>WRh5jW;9giB01?*Hah*(s)Zz9&d`N5 z5PvTZ3+@w{1XGRzEY+@dq36lrjy?!Ap=ps`sEzaCvMfX*>}XT8On#~oTSsU+4M!w4 zf<+e910MDvzeclSqHc$qreWR?B-*V5O%o|n-=nBZ^;P>1Mm=Xpa0yX^WQZy8{UWd) z3^R5!h%gk#Di0cKeyF|-w|F^ZoFqAf_$nHPkDh}c%izoB`8s^`<@PV2n{!pb6@Jyj z5b5AhGhj`V!4OzsJ7_%3c&4%NFuyoW297FFZ75KihH{^=reEPMB#J=Eq3TP>N}K!L zWS;|2w+MZrMsDGk+doxR><&Vo>%=D|4un`x38)dAhmMQg=sb2Fn2d3Yd&t03F~>Ok zqXx@CS)k&vLIvOo%&6Xt=g|mU(th`OsG5(e*b93Edozz<#S=U+ZrBGOLcI~(&Bq=w zDzmM+8s}B?XSX;rzaCk+s=^h2&V2~?1Ym+dWPvYU6~=meSpaxH)97v!AC zm`sswUX7p*Xc8TF?-2syIh2^aj}Ll;zKD5IkF-#*Kc}4v`*RwAB+k#Z@?L+Qe55m@ z^-*h?I5w(GpQh7BK;k*0>7mIXYKBB`Z6$2MWRG^D8vR=f8;uA<%=%=+Mn8@;hYv#> z79p=>t5LBv`U`ioSp0~EAQf$e#Dnk!w{ibrREkbI8@^rP4g`M&7VeN0>^{EZ_9%Lo z_<$(TL5q(t3wT((oxL;?QQQzmD+}}2d;m1BvD^rLNetrV9+yP(6C4a|DCUI6TjCwg z{SvqXa;Q6mo8$K2w#T`yd6z)lIzaE?q29_);d!jdpC&2qf;N?m_~Yz%CX(2+dx#`q zTxK2*t+PGvPoy&jpP=9!bofG#%qE;3kN-Z3Yu4zXpw31Gdo6QRLlBSL#{<~hC~70gdhW2}sG(^iOZkfIFO zi?Mr{@k$CcWqh`O1Lp>xd|u@-aZ}?aO~%&|aFLY)Zjx&9Z^y-rRarxqx zS^m2tVlIFL@V!*lzW4tgS|`C*6A`8Qpc5CsfJj)&2AYk4CK93XEAnQ+5hFVLT$q&_ z=Tr08AAvw>0PN1`$H3f#_>YMz2`M19GTt=+KyVKt-LO5t1MYNtY%0fMSE$Cx*4W#2 zhRwRo=R-&X&9Uojt!`)kMY1==f9o(cuUO?yzuw~=ihgCsAB6GoLfh^TPmvZmYuMv# z)~Z7)#wuC@zA0>KjP;5ZpD1T!V8pY5WUlcb@A{_gRu(q*wUNyU(bM7?1D>hK#(EaX z9F8gK`6b!G&2d9{gMUtC5#Q_5;ztCCB{;0y=uY)BPi(3-b;ST8A!iMfC;;ZK2y;Ur zR~W$+=rKom{%T@T9DkJM3aUE)WYCd6A>t4RPiH+dpTQN_1aR~f45|1V3la5%G5@+Z zMurgMT^>hR=X$y10c+p`?8T?{K`~SX?jgm|+}X)!j1gJJmQ%dpnszsCj58wtgf|Ee zmNN_v<}XGXk=F!z1FkY?4Qygb;m#GXl)pe#uo-LMOgmqB>p?{ehj-)r{g+?ZBBwtoRUn0U{V~GzSq&e8syKnCP>eKjiqUgdkVG z3m>?410e*O5l4j4#_f;79aJLrxtX6o!}3jFi~h!%icMk&A+&J32b8~bgh)g;i5A*{ zX^=ZR|3C8HKEA5z%Hz%r7Yv$uf}|R4DpBu@+?KYarZZfjod^jpnkZ_bwvx(BX~(v7 z>gc_KZGzxUB&UZHXbYCM)G{49LtCu0+7=aTLXaR@4Fom3RPm*H4?&G@BtQz!_qWfv zH#ZSyrqAd3@8J(}&)NIzz4lsbuf6u#Yps1y%jfWBKFwjfwrzghgR#nu@zTkO)`kh% z_N3jSHHL9edTiu%Ge*1|m zkKilt2u^e!85N3;h0Pc);%|Yj5^DYj4Vxs24SAEtS<7!RE#{GuToX=8gKU1V%eOx& ziuKZK(*@K?FGv#b8}VoW_|R^{L+txPo!;+I3WL!EqH!BvW!PyB?DR4Qd{DK=+Uy^I z)IccNDRu~Bsqg>2Z@zzEfXMPaEFC8~9oX)Dl6I3goi`mbmI`fKgZA^8LBrZtvc}5% zSOc5k4J->*%W{p5DK-@)!D{XwDO_zZ9CF-nCia}~7qhs?WeU=AMqq5X2PyRFC_9|s zq~g~kA~=8;$z zVSA!Av@5hV_Po{jQMGw0&vG64qJh?KOE&C4UhII3$rn$HZVf%YX)GE`S3grPd2j?? z4xwYtxok>fTdlj5J_k+*LK0Ximm!NZt}L3HIz>pc_>_o2{DnoiIfj{kZ7{rT5W|z< zlwlZFUNqqZx-sa~bssU)+AVw_+B?+0D0{v_Pw(pCjqd=+;f=HL_vHnEg;Ph*3mShU z+CN0TBXzuXoYSN{G;Cya#tGDX3gccFP(dfjvAS(mOOd*6IOyj8#E8(sSm57?OZi_- zE89XxOHW3-$%Y$yf$O~W?&|Oic?kzj5c%Kg{T^z*GMfjlE9i_uixWiD)Dt4wQmcazuRBTZ|DOv4C9}8`Wh@FC7fLKwZg< z|306&v|A5HQaw;lWDFFHDvIpNjoy768kh+l@RgtFp+Zo$0)<3qHhHU8`5BpOvlUX#4zuf3vKxUo>o%u^4MnBY>Cl4xNZ2 z?Od{k%W{rb`#hHiY5M*XD}5h3!bHCJg??X~3I?$hnTT!lGxUd*>2o1wqo*XBS>v4N zS1D!QX1%@AfBUGIhXcj_=#HUKe&rNUYSG;z4s+@@71Mg@lC}KH(nM+kHf}#xy z4`?};M)>JeJ%Vp8@h3dGHIMY$$FHy&&lK5w7u|R-6474}u2H~*{We$^Yaik-;!#sv zd@Za6MCBP9_)sd>tl86Ve9J&m+8n3 z(1^e0)NY8??qLyxsr^OJXKFg%6D8642D^5xxVp#*&B$Iy7 zTgzzR)@<^JdXa{a9;)|Yu@wFeXsov~xLEa`_@^f~w5|wx-XaFZ0z%Kn7>!-KCYVo| zXr#$?Yv>u1 z>%`*o{B=U1Z!C#!zJX#e*5zFHrch!A$kY&7XF(~4PCbS1M`q%JSlznBYevD%Vz(DG z_bNAdZwiDLys-KKqOg{uL1-VMmZ#HTskO=eT)XYs+efbtJ%ZHFNt~r*L`QQOsqgQa zY|n-HcJ#dy>%R32tut+j!&GU%(M(bMNc*sSA<4t_41T_|CbF33m}$2>T0YgvfurK= zDHdw#Y03OKFfiv@I;BVv+j0eB#Tk=;(H*|FJ5j`M!7dTU=Cv@nt-hU1dhwT&{iChr zck#uRIrIK$?$d z_f+#&s|pGR1&ws)k4^^b!)if;eM zEv$_>kAgWOcBEK9(E918l)FPGh8zBCYyD z?g}K0z18~yUq6~gzLWx$MLsITdv^&8L-2s-i}{92B)JG#^=^jN1k=tnzP$51lVa>z zu8kw#r<0S&Ep1KBhc6#Sf{8ntdU^0X&8umo;~Px_g?E0*=pl5e7MXibu<+X3uUhyO zr)qNqR_*P33%3~g6&4y%Hdu2BCwP+ctJTFe&IL9t(BLFgse~zW97hbPN5-Ok_`4bN zKIo=`kL~R}Kd|2@J!!mHy-tR@V#Rd^t0o19d_b`e)5TT2vQwTsZNZE{HKv0+X9Tie zJ^3yAXF@Fh_9gNtYQt=5cV03rtcy|_P77?Q$!&%9jvK$&ZsNBeMtm4>0rg{mN?ZB< zETqwth1oZCIu6NMn^n#4tavm@_Ybu9O&+&MO0Dq(yI8C$5#~F;$+7~b|9K4L{~$YG zy4P#jN#}!xJbQ<{)RQ^SB75Je> z2}CbICP@1%1Tw{W7RiL%hbv9nn_Tk*Az%Zs89<&_5;Jvfx$gd{bhFAGW_5?)jm4_vg~qzCSx>!GDG6 z^9QwC?i4TKkn!DEhqc^+hE~(7{I3$VC{A&UAF|(a#&)${e!*7xoR9Sr#<~kavG*2T zqPB?}NV}t-Zyd_g_UCE%qhpwE*G{L&qOIw%_wMurnp+o|e6F?pPwET)>oZQA9pQ}< z1NIlf#``4prsXPfR22Zme#!r99?PN*%<@t;{&41$eIQyMAq+$C5^~EzqCgFpzDksjuyIm!!MM+X& zlo?*dr>AYm>7_gEWK(zITsQpV_a9*5S-&DUsZ4TASsyu*YMG4-Vsx0+5ecr)-zVkhh)4eyW7X7v8pjep%xdyMq$%hX-P7O`v7XZY>b zY~jeY=S<&!z}Gk}vbA;C1b(~~koO!f-zUqz5KF_=;!h=}nrMq{mx zF9M~AahB@osB?HocEyJfVCEKf*@l@x#AH`}DCg8c+25x%MY1Gb^4j=mmMiZe7GOqf z;%SVX8U`uWDAOZMGssnf=_CR$4z`aFj;*lOqp)X|>z~#TL=C-Y=8xAp;?$iY9=kt4`Ul2iqrQAlM7F@tk)(-QULj5y9<}_iU%DvaoHA-z zZZTQ*PvV!WJ}7?q65^LXg)I9U;+I!|!n`2?%-c!aCZr&7CqQy>mW}N@Lb@c++`k07 z;ZhI^YXwkeIg^C z@WCUNfBVpQ?W}P0zHV= zGg`Ly4L&j4+;gx0;%j^kzopLy@OQ#~P84+5xh9Mow$1%7Iwol6OstlpG)Js~Sv0Xn zZ?{JwL$tdbMX9pWYS}CV;0%n@GDlutR#kjRX^nJe!3p3UdCoO?$aOq6v3=Jbv>K1| z(d32$IBoMIkmXqhkKxV11DL z6e{N%qfo|!(?*^6aPpuE+I9manr3POP#I6mX}92H|&VCfV@ zr%0EMh0VmQstK(AOrrP2ts1d2G`#j3BRTPIHyRg%vEBhO3mKpq2~Mngeiw|)|1-${ zT#m>Q8HZfr|0jp=KZjcf4gcp)<}7fZ`N?$|PY$07JFJ#FO(D#`L!Pg#deX$mC)q%H zDwuh|6-eBdC$C_P!`CSALbGfuxFdJB)%cK*Si2{tiPD>X`5HeM8otExnkay+u#@i* zGEKBCogNgcab#^X_}yPq6Fc;@%c)#`K*8R`~p8S?2S7! zzRU~)oOEkWNHN$nLbFDL<P@P?%e2b+SL)i6Qj@S@P1n)71;_d{~o8vzL#z^1?pieIl4=Ut$8v z{(Rcd`IE1C+2Nfx^zD(;%-b2f9m0L5l)r?va)v(D9JRKWaw2Uta*&1e%@g0k2t0zfJWF_I(d_xI5sM1b#Xcj+-ZxxCT^Wf5u z#XPUmQ<`}wi`C}Gk%7fmY;EB}FatE2`o;P3~ zd0vbE0?GO|qDcaGalk+qBGKU|89lRVJ!xun_Ixkv-6r#HkH>5{DS7OB9Y_Q9vl`4t zLTdjgp9j!F)WkI=8XCVS`zah6-WVBsXVIMGi@u$q>!3U3cc3R{=0)L4>7~eO(k7oH z!r`E8%<|HL+?q@K?RSQr*2d~`?B^RkY^KSCNNU6DI5C|zxi06>r zGd*JAx!4y}{+0?oWt*PdwL9`kN#CNrMlP|TFM3&=7Z-=eM4{3VyWf{`J%i#e5ioNaOo_m9QGm;$vkY=@8 zFfAju<`5eEGG{sh!yIL6v2+GPay;;!lo*i|MigCqh~Jf+=3VN%6I2)!JKsi3+3guN zEZwaP3iW|KNy>yQDP=8gvExoz-nZA@k$kaVzTBKnHkMy=<;c8UhfW?mx3y0K@xGY%#k?E~-$QiTGKF#iO?+njM zydny47he2&GoMVwP`fd?jCqDBs}JpQp~w91y6_=1Z@wAMs+4bD-ISN9Wq&i@y}iJ_ zvtU-@KD)b4v>T>)1drFESQqt-xR$d;oY<}d?1JmX9<|A%BN0+1w_V_j;$XDzFQINO zz6s43u)C67IkOl^;?=sFzDWA(c6;ZnVV^uz3Rd%0z=@cL)JIbBuIdp$j&X{(4S8|tf9r1V* z9$^L);e*n=OliJK^E0IdDlN#A7OJ!`Q(C0bqD*PAN{ch4B`Ph+ltxq<$&`*)>G(|P z1eH$6lulIX#7t?KO3N~(lTQ#wVZQ-V^w@{8Tu%Pm{tB6L+b^tC=@%VJzvxi< zMTgQaI+T9Vq4bNMntst?^vjmM=r)@B%5GVF4;OI$y!-O_CuehXoEU3&r}tyU_wb(V zqL-7%%ldh{UHpT~6NkDE+Na&1N!|6bJW|6sr^yQgoT-}-&sQ{&@J>mRba zSMbidPwh@syZ5QxskEC)x7!o6i@s8NgyX^q2!jd)!%Wglo?uUi@PyDP=;|5Wo{An}LEDb!ZA!)2AdQzHXgU8 zbu0N%k`BT|w-laC{LnOL`p};65Xn|vq8&8EIb^2Z#cb|YJ6mHr?M}D&QfmfxD%;zm zM`Qigw71N+$_Lx^hTSXFSzBJf;PK8l)RhviN2__asly0po$(c@{hoV;J|`~p0ac$h zy;s@i8t>2tsCxPDft*9gUp_L?uvYUIDKg}k{|lifLIV+}i2w6wy3KwD*Jk_q(B3hR z*(rg$J@%9v{+uUn9H@7HJ)uwi?vxzs{#NULQKIZ#vgUL+;d`Sy z&V4-EncPcJN8etSw4!NT^Nr?>`>!)aht)5lTHmh`<$HqdDyS}YE|HAWeaimm%QN!=4ZKlYUUwl#w+P|@z# zK5JTMb@I({@~i_IX;z+IKhp0`Rk27DamJg|p45vkI{x$B^`KV!dO1ejIj-XB* zb<#WgmRIpgGsJ1$D`3ue3D782Bg>t-Z9+or|ysNIrr_=Hy zelYrwk8hF?@=RF&CRLzuqG}77jM_=(yA3Oc_HpGH>XOEwx(Fs(vb_`6Sw1nlq15-@ zVgreht}=hgn`&#MN|&6}PphRkU%=@@HUOj%Ce#l%Ni^#XqsKDbo~7J%X{--WSrD@YM8~aCMOns}Go4xpGOn z=@r%mO==;vr#F-acDb=gnhry~u?AAW&4;{M6p*$L5b9AT~HQt3G6>k6t#O)1&AkLmrzT~9g{g&`w89<_lTL)u_0&CeX zO`~LhkjWFqJ$qMw;DZv_P<{=yMZqS;38(4kql?oE`M8qIAkXHoy^(M;qUVFHEir1L z+B{BV-FiNx1x|=eM)y#wy-KI9(Whd)_V0@LWi8vrv_xouDJ&JP>4_+PQytzkfd$e2 zP;2N}d(}*V;a2JYrknNuku3ZQF5$RIeTtyYD$^Kq=~ZI3Bnn*h9Wp>g%{}Q<%MYq) zGs{?5uQZ;Dw`oHywmVIxKUhGFTK@*}zc*9_JC?(aB;M?E%!o)k5po5S2L7zGN(Onz3hi!tE!X9&#NINIJ~)dBb;OR@ZW#~umI?fCxhAlr8gWzPhELc0Da&bl zaRjUJQ`WL?AUjRLok-VZ=odN8Dt%?%T~Cfj_W;5Lu95t0vs#wwsmZj?-U#s7_zN%a zzQRX_@&5YzIOAy>$N*nmlmCH>Td>_M zNWp>H7(u37UTu{6Ll#y()S^c+d~N4_f#y$17{@qq>JBb+gh}7$1LmS;v=;>~eP9SU zNMj@2!l^$oZN23p@u>#(DQ1S2ul?T3s`9_D87Icl+#gi8$-rw6cZ!u}xBzX6raUEawMBO#vD zRg+EQp+dBGSAPf~oAB%lpz#T8uZpCJG`Q-VQd(`tw?GlK*tN|qr;ckHMo8U43&@&% zq3XO?lUUSVrRBp~{;D*ERpNf9N!=it2rV)%Y;zmC)1<<_eIaI^TCr;zCARFQd3s3O zzZ`$gh>;94=n%}zS24G%t|Wo{E+p5B1u3iSDghWWutc|*=8dQ`12$sAKlMb`eFqz@ zT6EkBwPu#Cu-%^8>b+lb)i#D!2|ULjHpGJN>M^w44d3AppQ{E`Zo1Uk*>V??#!P@F z1FXc7;Y;R#beXWT#lXZgxcUemnleUaUYeO}Z2FoeFCM1+Cqi22xWttimBzBFf_D;I z2*T7EfIU=fvC#TtYWJS(r-@2fBb;n4805;PNoqjHb%Rqzd?1t!(Xm>V3%i=ButM}G zEEd`d7Gg#~*lt|SR5shSi>>9lcUUAl>a0@heR~zE?9Sz0PscI6yArkylH^bp%`UyQ1>W?)UdDx;d+aJLyGmdP*cpqxB@H8kG zUBys*prF}ekS9I_bh8*6&|%Q8-sNM`tZ3%t(53frtgFrzp%Ak!3YFi|b~D5#;WWLX z^>SawaMoZM`-AvyOPMOlFgQ5PK4|^uz6V*egs<#3qmF_NlS3nveje6_@YECjQRX6}eBwk-6=oh3pZN0sqz)ABfU=~^{kRfT(_5c!k0MDLiK zEA>$$PCm{mgUKw0{U3&Q{(mvFe-wPRT2pPKD|^jmtbYSRF2-fe>(y5uwCo!GG_Y4M z_5nAH1mKUb`SW8fPKn(Q{_ySF`EZ_8AS1yXcOs|=J#BB1H1dvVDMAi!Q9o>WC~(az z-%_LECw%leMo~sr3iaDtq>b4|dGvC{Tujw_5oX#b__}brm(Lipd_?|s{{Z` zj%$N!wcKESYhz3PmX_yCE$tVyf3udy^}ZVs8|4ICKI-lYO#@#qNbio9>ZE4mG2XvV zJwQ;+fy3jNOXeVh*`Kj%Nj1JKA;9i7{#hZWDHY1;xkP4;rqy7Yu`+RoeyFn-YF?4> z0ZZRsk)8Qe`>j)d^<`#jPnR41^V$Cg5QCns-o`gS#btL_Kgz}_Ri9IL*8Dv3#*G&FH!e9Y4uBs_hUWjB{@Otfp}$EKiikHvk3&1=<~K*d z{)Xt|MamV(@1FDBrUEoWC_bcWcx=c&?;J+o?B+UIl6#&X!d*c}N7!EV_+jFwAm6D# zTX_z!e2-;%D2tq`>Z}726e91S$5#_38c%1B*u^-3V}BsInxjamrOIUx&+ogCqOctz z>yP}U@@3)-VIGXb>2oM}*2zs=*!QA6g7X&p*}fM;+wI%Tc{;~H_O*G`$=7{q)DU|< zXX;U_gH{Wu;>-$j{;6-DGjB)fGc_}fq%C8fbLhtYb{>Zsjy|8J5De2^^04uL=dJu* zOR!%S+K&NLF;{Yxea9S8I^hvhp6XLc7?)()T zL-p-LFi+yE%aF_yNvMODf-`@WJb>{>&^PAYB&B|x@Jo&*2WY-sr(MO%`HCNxVg2jr z`wJ%UNq)gNURK)IhZ9?XyM)0M1F$YpDok#RwDUZHt0vrv6=B$@Ok?q3a6fW>e_DY7m5%|vPf3Rhu%NemohoP6S~{!HIjIIE?*{4viZpCKDOG|U@wjDEvB5FviudaYx_C<$O{oyL8H{>q4Y@T zF|qOfF(=2oK4v!|2gzsYo*v2OJf`3IeEygo=Z*r}1P^)k=kuN72vhU2Li-Ng+7%wt zD?seaVCn)c(kOfg$*jFrK83{^X>=DnSYT!$2Tk^4I&rd7eUX;*DR&o#`{BzHJ@}}A zy$FsmR^#Q`uP*nJHbZ z($$&LH7Z?`DP615wVBd&DqWW;U9ZyhnbHj^-H<8WsM3v@(g#)gV5W4FN;hRnH>-4W zrnFV1t(nqoD&3YT-J#MQnbId!`edfGQ>C4m(mg8OlPT?1X?LddfJzT!N)M{^V5amH zmA;ZGO{p}MDLt&x!rzJ7b!)H~P{weB#tW?>ZQv)zHv)yjN0z_Tm(cyWb)|jRvC`Jqvv+>oy&@b^_JLq~ zEB|6%&((S2=|gO7fm16diL!yB#RRIo)?O?r=1^3+D}B5`AAyxw!Zm#?g5zs92`SC} zKd9khVye00g-`D{0w2P2LAp}q0W=E!3G#NRM^;&iL=UlHtX`1iEqte8ur zuCrLFPtiic?y^XMYSyzpaJ2^?Pjnk2y8N2b5`lgE85HA{rWV(cQK`&oSp;%nH~9?c zlz#$lWmRO*{Im8$wBWBJJ$w~3l+{hXov-5o9W3RgzRWI+h!|Q*Zr&_7a&TeisJPK| zSFZJ<@73n9(`K=&kOGKe7kUOL?))KD)Hd6>lE9H7*q@Qf^$6$NQv1r9TARmk=`AW6 zG2T<6?QU`ph?vZAx!rbKad2K7kBr|wDrY+1$fI<;N^dxV~oU zEXvDFd*j_TMQVyQay-qCU$RXEFb)%LfIT5p`ZpMSh^po$w+FDt zXwFn(J*X2H{kPIi;ZL1jS+DL=rk0YomAyzh_#@KS33% zNmsDZ%0#@GPoyJr3LmCcg~AXinc`LzaK#h+aOJ{}I%AVPVQ$6og8O16ItJ~X@}|%o zlY9gZQ~-_A$ZAePsOWJTH8DnXpKqgML!(r4jPCUvP)FOr?vx+p5FYLpj^Hg^MB>Nl z{HV`V@hiPD zXt+cT@S8+i0sn5#$tk})aa85p)2Al5BD2c(#nJeauNU^*&%h?S`40hng?EP3Uyc?u z9err#nFh&it7^f=-X5K^@O>aJWL$2HEaMN*6!UX2KOYg(0RZeQ9Znvhb?uZj@-(x_ z|7$h=3|3EWHs50JxrQfarFjC)jgfiOb(fhxc78-QxlV$2X$@HfF2boNo<&9@s;IZ$ zhrn*zJ90x8shEv~I?$}l%D$W;g!v23YRRhSAE$xY`zs=|tv^&mzF@D3+)M+CXMXLQm*IT5<zQ2OuCB_5D3i1Rz{S3MMASdw5pWP=i{b=b}&Z zdm>nv8M3F3w--&YuajJ;Lga|j_H`5OD<@fvo7IKH{q{nH&P=!FXx?OrisT(YU_T*j zn1Ho_H_5)@Q-Nlh)l4`Nuqqe`r*dS+5rc|(eWoRvF<@ILBSbDU$c94&23cUl@=jID z0D_Lzr2k8zn%uq2St|NI8$L-F`y0}I*$YkBd1xEzS5*u>CR$Mf8>XyQuz36M% zZS+3lw~^Rvf?^7}YEEEv15^=fYQ9oaSev)vJ~5-$`xfgC-&>n^b{#@do$*$z>vnjT z1iQ*HoGOU5-*$$dSl^kyX`; z^V@46*;=mKHnPLNf}0ksr4>kxtTVA7j*AnmSZ$HDY$czqNH@}=Fn8&v)kTk7S6f>f zdYp_AJp>2U6)9jwmrhr9M&EI3_t>oNQn;8isV`3FqiaJN&^RUb>@=o%))Rv_cgkJ< zZ5f>M76$nhAzneKlLl~<%ICg3&L3x8uT|D+S;A+WzH`H}GJuP*P2`96Gse%#kOIE^ z1)bWJMQO;F&(aD{j3(zeY=COm^q3eJas_C{`RDLR`>D8**@UL}mqL^?c(y{c!_i%O zBc$Bccf^P@27*aI-0nMf7zlNd?aQw8=L>i%16-TC} z)>Z<+zP3Z-LS#=X+I7sWntU?0!>Zol)_gb2J=axld!LaGR98gez)E_TbxnxIXHp2^ z2u3kJ1-ublMtMH`DaKJx`0~TGYioE|^WXU5YW_31SD1)WpBRTF6ejRep*DZe2^i0Fc=jHkZJ%8; z_ZjI#!>KHBs!M_+DQ(iW+Qt_QNRwM}<|&VDwL7fpV@n!JuGb2?{Es8W$R_k7*!Eue zp)3xb6Zt1>$9COfW@*W@4-DUR9(C)b9R4(oS1bxl*)$cmBi+STD zN}Re9H{87Igqy#UJ4SWa*k)uK*Y1UDqNzfPPRgPN_CtJPj?FKY=2TO(vb~{Ob9bu;)ABO z+Qpg^KkpDZ_V9*+S4=_mCLl~LQvn(0>NYuv#cA)pim?M{RGdAKxX7(KyWg!D+YjN> z>u2s&+}-GuCcW@zo$kGv!PhIy0Q<-$O?Hsd_YDAnT$}A@neWlR+olS= zjd}|j(z98sT9wQU#lfVmD(n+17eYxw42-KqF<&u34N6!Nh0)Y5 zdH^574Ycx+(WtgoZ#T%G_gFufm#k$oXw(own-qhhZh!d>r{-(3!=uoBm9;XGQ-5%W5m+3IhG)IDBUzSkym2_t(S;$Rkb)y+i zy0ZfYc$kak_EU#AJijyhxIq&xI-9_QiCz0T-6@shTcP8l+w84=z8j!-3r#dG%1y&! z2jZSlan3*@qKC>&Zq+%Exj@%s{+pb}&cmXIX@5 zHxhV}BzB>*-Vi(fB)OG%R;nWi~DDcR8R%@L(IqXy~4$?!|Wg+3>ije)Z zT{z0*b)XCQ?G-vSQdy`BT$66urO}GuR5*~SV2HysHRPzGjyGSj@xi~BcZapAluO)*%^Rpq7G! zVy8iQc#!5|e{S+R?E9GDOlg)qKE!+3tTAVv?XNKv$khV(-|!)|KttPknV-VHngF@a+cL zJ3mL$)g|PJs(#0sjI*#YFxvyap8Wa;BST_5&%t2m5PPEPpfe(Wti0f08Knf?}XEHPH zI542-k`Et9i3rq&z&Cpm>a8>fsQM>E)x+LbL>+wfekJh!m6@PPO0= zpd6=(X1p4iZQP9(5DFOzty14mg=$v0R>K)p#2tp8pbp;iDOwODd1N~_Q_;7MeTy*lx>Q=Mvh+^$|>H9jSYfd5(o z7q(@rBP<@J+sOtS-A<0b>UCUmtwv$K%4Vl(go&)b)pWCw%0okk$+$s|?d20`QNZgS zQ{*$l3OwwY!t2Cs_MgC2?K)yr5YshWhf}$NX!?~~t>5pCJ}X7?P9e2&jYylMvE&IX z3-78^+}NwvxiuRHoQmI&4h(^In$*Db3{W1ZD-*q?`@QS*8aZiZqU>Qzc$0hhL#^Pq z7U^V^6#FPE|Fhgrh!8@UBHP=rscm+!D-zm&HaV$>fC>3aME(-{ zo#+$%nFflq`a`fl8n5$ZMynuL{%asev?{Mn=C;?$R7d4n`eO!IEmw*>Cvz74i!!>K zB*BT#n*_lp208BXE5QtmK!#nvX*0M+EWl1;t;wgsrKts+i%Ok8Uqt_~nN(}+hLWsV z9e+eueWYT&*7A4horwV4nh2Ry#K=0+_{C3vnd+3?Te@58Wxi}fOO#V-YxFtt5&X;K zI_}yephdeJG!4x))PmLiT$DgSXc}$p`JJNKYUtvINeg+`fZd*9)h?2lFZ&l7Q33&} zNu|4y;&jG2bBFHH>?i!9j=O=a%6<)PGDB-r8Z6C$ziid;*NBW$wOtn+EC3pfnJ-dm z)AQx?0AU>BC}t1oD>C(hcry^2Y%nNUm#CJKxj1#Jg>KSMvSP(4C$5DJ^jJ3cVnkLQ z69e^Q)=)umqafjW%GwfdlM!NOP2V83uP%jv^?s(e)oTFA?8rn(=CLFqUw^dC&*gms z92!fkvD~Y~s@(5cw+^R1r|^s*Z}l0Z?o$aJkz8O|v~y-?uWdY@OZQLy$wI)k8Vgn7 z>bz+tA$%S(h~56n-U-k{kY>|IG^HyyaRwLvbnJzOPqJ;V&M!SeD4u`gCEf~X2*w>z z+5Vl}>6r2StJ6=AWa0&{PP$ZLwLv0!B;#NZXmSBp8hXF610`zNf% zX?i;~@3L}xYMyUz^t?-XN2)tB!!)J6|KJ7E+p87{AjMDkE6fM3jB^oYcI9I4K730N zAAsnu4`@_oXBbXB^{5Y`vK7m3?UwzEr)?`H$pBDMT0zidD!cgwmpJ4thBbxUm-&T^gvqPWWttgR`xs7d4Rn(A&{& zvPRr+vS+N!tPDMDhHf<}*d+Eu!prLZx4c3>wwfX^03to9X#zOEl2mMvaPaa3(R1Fb z!B+OWl&tWk2Tw_!_}+UOoCSMZ{Yjtiq|YNT{>{&|TKYh@Q$ZeW&UhRQ;#$HVgNwL3 z>(&9ge{`?a%*`q})|OTi?d#O_Garg&OeOTPxvlFp$imF(R|ITvS4w}1M#GWsI$!JW zdU?p(cEWgH9r9+oGxgoBzXY#FKj!MZ1o4KwOepquaLnKrKWT(+Z6}9b?5PJK6P&~!=>aFUd*$Wk7nZO6#=Jg1_a3@L)?PnN*wTU~#_^p_g_7_CMK-rgQNk@!970Qq?CxsNB?a`mzO zF)nrI;FPu-Bebm?`uc0Xjs5yqw3qkOwbhl2&RoXk$Is!!uU7oC+FXu_l-OD4J;Fp4 z+0HcvsqZ?(LeJ9Jc@9&qM*O_|@Y`g1VxsVs)%3JhTfPu+x!!p}C39RRv^cpCJ8YYS?Yz{-KB!L`E{PuUZsqgA3Fpr@xfhlzcj~vqW$<^9 zi=Viunmn!+NEEs?dHp?Sa2}nVZ;LZd7XA6BlRW6*{-)PS9+aOcN2@?X<(?R&n$vwT zZ$K!C;VyqFPoYaqg-N9BeI7hdVd+LG)?I5Re;g%FRgggL@%WgYvx4*Tto~z!nOMso zqdlwf3ceHI9IB|TI6FbsY}z-Q14=6BL)ObY8>TtC81{T?*1{42;e?mFHGlAvAAKqf z|KFRfnsPHu;p2&Bp4a

Q{e8W z1DF6_*T8EzK@B^n5%e9~8b4&+t?}B=dm(*WL0@t+NF${kaHsgb(ZYs5E;Am+V#e{g zhy3+pCo~1OEnCGJ0wMo*be6-_6zO{@tfv2>%gf|yV6Wm9}iKZu z=6=4QWe}eQrw-?5^5smv3_6}7t`Lt{EjNkjGni00>!LfM2q+D(4f52wEm$A_g{d91 zoXZu`e9CJ1a0wroL|V;lv^kL_vg@_xUH%F=Q7a@j+M08|axIo$?@yQDuAp^tu%?UY4iX4e;`|CA7>~S{gw{c;#vp-Bl}R); zfnf=IjK4&OaQca9h7aaZt5^qedL?uI8vnFQ%SB^kvED+g451JJ+QP7E__(tg=Sb`! zcQcr0dRxo?Lm+a1%lA%5>gEr$84qwfmW@N>I$mHzY5cHeF*4u4A_Y)`&>}@wryqjf z*Z5G3P$&A3#0F-i7ACGz=kOk4PZ#QnFFPZfJY~#C8U@q^mN!z}FSybQk1H2xy)j#>XK(kn6P8j8lFz6Qeu1+fe!r*9Q(^2az06Snk{w z9zy%Bzj%2dOZL)lC?`lcoZ=nPL|$nIE(#(bD(qYaS7w+rPlOM3xQPMxrU5<-?CG-> z-Z5-v|5bfrcFvlgwf#I!a!z^Ia2ho}^$phuHCQjfPU^S!XHe58EF1JBx6L;g@>LHY zad^n zzw2r2B&23og3*aDVf|d9G^wW`wa*WeXi>e=6&pwBWlY-#wf*f7gk%Y5?AXYt&$iSu$z!A;*1p1=@i=v#G$ehe&a+MO=_ z_OQ|eln!b`>HUY4lbfXv-G`h24|B8hq0s-N56zQ4H0A^JAIL44-U!v}Bex(2!}kZC7>@}WWmGX)(C0?G`FK9}GYGh3JTg%Zm|_Ya zIvO5?%)pPX%NGlc{$_{{8m`5R8H=Egp0Ul+qdbKRN;`u#K2vpnq@0tL)! zB0wp9{4vL1X0}nnr0KGZyz(n}9}lah*X@bQ3(KY<{tNK_3x6IBBA^-saD@^By#WMd zHf!tjz3x#@!I=B4iWH5_vBzUd3$7@)8fBv91{S5IooF?#)MB84izIO~ns8bT`@{Xd z8g>hHq=wzBx{&fzYFHIzX*En*#`wwXF|0;&Fg@(Hy}x+lsBAUfD|(P|2s*6rR`IIo z^+g{So4DcoU}tgr1g9z&<8LD3*5vlvJ%iT04~qeG*;KFnsr1n79??iv!-xDt<{g;I zTKNT*?3x;;mpv5#8RBrhL!}}{`WtRJM)fQvTp|&={X>kH$_21{CV?1!H z4w~%JvW$Y@sBq#cqpf~Ah1$Y*a z1pt{=zXGB7#P2geF1yj!$Pu?zlcA<8fB+PtK>(j%5L0+AZ5!W7wo-x43nX*hIiUgW zfAMwqJPjpV@9nYf{*h4sj<;9KoEX`^!_=t#^W6Fo1Ih!6+W$F~5Brobd_Khjf)Qz( zY%k9+sQMT)-fDas0<$dy$0>dRB1)+tvq_$4Gjy2hCu_p##%Y;wZkn~z|quwNx>=*N7+wXgzEFr(p>Z@Cg zCk-)=j~F(axn3ub2Ydb-0IDK$Z~~2blR&9p;DvNcv9q@3zM78kxc*l@gC2%7LiM80 z(Nmc*3;MT{o?|t2`eZG$Q=wz{ILj{hKC{>c>csXAF^id7@1Udf2y=x`;&dmsnk7+Z z2+%}!4POui{Q409_ofQ1zU-XMh-75e<{)+AzZg}$k#ge}m6*?~)+6QCD+Bh2dd|$+ zj|(%JKUG2VK?|GJ!W@H_k9#H1nG4VAA^G~i?B@GFEjhdf^ed}Y+PA4OsqGP|BI=58 z-Kt)EnNIMl*C$&?$vLX!=h9hg*O#_}H1}KKCBV;q;+|I4l1fgk{*x0wcWUOgNs~H7 zheI5Ftd|wEdW~CiRtQJz+I2(+un5Xwrn*oRm~;Aoy{ew}kjl-s(vG#|9a*bi&P^T} zC&BAmw=wjR{3)N)!e}>~i7kGOje_#mUxP@D*x~aq1apO6-3q&MZLqd=Vvpc9iN;>~ zb7!3I2X5DsD(AIcry8);MQvS9;yTnPiaWYE47oTe$vUeY*K(h z>2*JcPFw;VKZi36r*b7%3%dDS?{PZ=SxLl7^-8cC-Ni#+w>xLV$qPE8ZMccPY*)6D zy^gd!ORu0a8J_EUfsgaAgV0$St3Z=+G!ce`sM=*Vvb>Cw5e`966q}+3mSwtEf;@N) z%fLjkLxVJ1_8>c3d>!?xmnCCiYiV4>uUrpngxa&OnXr~N=fOp-0czu*_SIf08bEX& zG?+Mr<5cP7=l=$V%sRb_)fLoVDo;F;tg(|tfVx$q2D0OkPF5FK&F@GWk4+AG;d|E7 z7xb<&FFD>Msp|Kh=2`oZ1i5qy+g{BL^*J|j?APSPy21QCnquH0iS-6nib55^i~x~ptt_Ht%XL}Qr*F}#E`zeJl% zFt*-h;2Y;U2|TOi*Zhx91)oGaKkL8xF|SB?_fwLjEgHYSvS@#0!QPPvP++@v?j3p1 z{C&P{@6P8R-~0Fr-k-azyYCYL>l#DvINu(COH()eC$ze;pPZKc*8SVv{2~rCmUOD9*+l+)IlHGfes+qUEHLl)v?1upY>(+i z0bS_~H6Pr~Lzr}(2HjfU^hpsFkwKoaitlm|E&sWuiv)LYv&ssRiff)SW#K3J?}6$Y z{yii^$Y=fgAx?+h8J^6}NccZbke6=<3Nt|(Utl>&-^U{}K)03`_`kL@x>fcy4q6}M zmB00?UiL?X7eaQ)KzXb)@uv4nikQGpYyKW(^2SGSr7!X0)(=gt z+aR}WYiXC>o0R{0Myg;!Qy?(+ClKduTyCg)gfP3tP7F zj9rvVXu{tWY*T^jEl*e1v3>+X=z#cs+<$1y86k8aTL>MH5IPVDp##H((B^>BFTuN# zKy&_g33TfW7QQ=Jkq{4ojLIk5CsIo4rWu`)R3Bq>-qq4j@EtN7xOp<4I)nd zma1(m%BRBjN$8;KN3(B59?KlgT)LBQAilfVH#`RIX6rW@~94zpoIzyb~gy$Z8G;k5FE>(OSBa&aX7(-!bf9##dRy9|ZCq z31soxAk%)>05(*(NUEoEC^hmWa%PV&XAB;Kn7@xK00&z%R%XKaNNul^2b`clb6D?o zA{{uk7|j^7-ae?emCL*vII|nR!m^aIGIKICxXyl=J&9S%1Ft8_?b_y0uUQ|p_}P`K zxk1`Ux?ugg2LY5>|41^QV`G>(lKPces%~~_S3C7w{I*>=Zjo7&Vo%>b7BW5|j@uhd zn{L*;ev-^q?g-eebf^fcTwe~1tRAbu3kRX=;15p2v)8>THwti6k!Cx5x_4%P1kEQ< zb3fwDu59%F5gIeiVwJ^lJT$aGm`!uAI(+pf#M2o`zSImUkmQdTv2DC!eX;&G$?%^@ zJY&FHL*ve!lHLCoJmB_V*8XjLeF{;o1Z9IOT(-B_s>_9j#S*OH?|T2qc-8s1zp3*F zgUYbgKe*@ppJ5Scbn4a zaN$%sUVxaolK6Q|PD! z5*y|>&ivw4ZH>$Xkd-p^(tT8wmDcpST|$BOkxvaftfhb8(U(v61=2$M2fkYKQ@%>U zAHhPKmRSXoS)aN!n_$0W0-Sl7rXQjN1D_1jhoWx3Tsn7)Q%7>i#&$XIlq+ZO{AHGC0 z8RDdGzgpomtQIuf_ExTyQr>+NfQ0A7ab?Pd)et~&b4 z^_oEVd{U}HLrEzj*lKypY%)vyjl_Pl{4Ul;!fKHt>Hf-+{gsRV$IZmj|Ds+gBV7#S zzeeP@|K3t7kh({5Pd zeVOirEXZG-7wzr{FA?cTCs%pUYK+VJF8BI_(H%Alw@=U?n5iX#;#yBw#~@T^;pv_w zfkah@t9I((tAlu2Y8NQ$mv02FTnlXZl5sokMI6+%vY+gzY%HOBJF!__hjrVWx(B0m zELLls=>yj9s~g$ck8tV^w!J*UofiJAzrV2A^SaYAwhqHeI1j5s_$FjFkkUqsQ3DL2 zkQ9c<{?5;Es+z9Z=ro=qG*mxmhtE%L58Kr{k_`uuH?|?|LH3NLj9Hfg)vaZ6hq|0A zxT)w#n~TCQtyedvzOu^a9L{T-Np5epe6k!gOKEQol=fz{sQS}<%RzVFYXs*69Q3Gm zNDT)|?FKj~$-|O{gHLPLEPopS&?}sVgFuUq@mg5}q%5Jb^Clmku~rR9i@}96$qcYt zy5FL+KdidQpuv z;52L-eKxU+WswUy1-Diof`GKJ>D%a!nTgd0W7Qjo3TfQSNS(ST-Td>NkgO>eF@E~O z9%i69DFac-Ag3)7%F>1o|I$I)j#aL=+;+p!>$P(1mRzc3Q2vfh5(PCU`hAF1R}!n+ zU^U$jzaa-+5ySq2RJ_ax5H%kc+4+!ql#0EXbL~nkIF)iEF}X z9%`%T^Et9>>2!KbtmcIA@1$p|S*pt7VXRz6HdC!=4J}6mhCF*$$R>gepfO|pzx8{p zlA{cel7a#EKOh!OBVrEA)5}abnOvmZv(`vJ~zZbiI?LjM8K?BA=Z$I4!LB4=;B5wiZrPgRx*+^?44XWvcn#G`=!Z-4FqDJr>?FI z8=p5H)@k8*UQe;nUoT@m;ogAm?i4z~NSwG=+B&*&9s9`9wHv*Bv@bttJ+XrU8!5|j z`rQywYA}s5!9Aucv=qVcVr)i{dXZC8r(uQvSx2QDfpR*+%v%mselFM3?zAz`NaM8u zHQ;A)eqQS8@B60!cgeO;cM#-Hv%_cFbsN0f^+pmLJypwxxu?^qUMul63caYK@<}9C zPG4z9Wv71FXWJvZ9DT%U1DCTxu+;RjO!x`5u|cQT3p;`3pkLdyQ!N?(8evwAVGG5( zE$C=i#MmN{oc$JP&P8t>l@DsP9hE!u$F6QodSRQej_PgRBVyEswWW_gA^^1z4=%ux z4Mw?t8ha08VFBY$r~Y`Civ3v&_RFLO_lHb=ZcU#Hugz8fE*QEyGfQn;tb0o*@k{oWP1e#+=%vyBFH&O-PjY^WZSZrfhg~?ko@D)~-01y1 zgWdEB7S%tF7yi^TY>(r>>%2>~0gImqyd$jC>p4!{0aoW>NN;Gx8_urVY&UH4ro(l< zbHkbNII|B-r^v9sK%XeckR&2Nzjy*Qw^6 zK>o<6JtQaiXVFx`5Y9>C=RaH=EBe3`pXF_;@~NIFO;VcGUX9w@2UfD)mFwMzq3 z-ESCQ;FQ75P|zgeaArmS#m*f3&f@rg#qojT<|NKS%bXd$oSqP&?R-bRbyBT%uK?{c z!Uk&bi(j1jG_&40E%O$>>3*J%E*wjlls28hu)qIT1i$g0+F=N?61-E`Ac^A`b zr^ac@#3-*VH{Vav_x^x=6RKZ{3JpOAZp}#CA^pJDDIvO?GWt2YFyxo3t!A+Y~(zRlqZiWpUs5ZNxmCea4zdB2kxrMJCTqo zWyx)m+GBgIyLU1-qJKSiFQ44L*Y{t7Y<{jJ%E_*z@t~=sT(s%DH_S&MbF*UrQ0w41DE>3L|7D$)nQv z=<_Uo#( z77j<~KM!!ifR*q46_7Js{0q&+_TDP5iR{7k-1k1Dm>f;9zglWfEs=V96)UtMPGL`8Jc5H)N&N3*P9L}H zja`REZzpL_VQk-Re@Wu1ABy&!+tqU*c49&Iik>$NKIRI+(o_X38b&$SVPWSD2;v

+_YhR0*`<9KRjIH|ZwVt4S!JM9IX!nI_x) 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 EH&e8U_y7O^ literal 0 HcmV?d00001 diff --git a/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0.h b/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0.h new file mode 100644 index 00000000..4c8708e3 --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0.h @@ -0,0 +1,66 @@ +/* + * FILE: d0.h + * AUTHOR: Rudolf Polzer - divVerent@xonotic.org + * + * Copyright (c) 2010, Rudolf Polzer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Format:commit %H$ + * $Id: 6c55afeb50f24bd316079ae46582e65f8020b19b $ + */ + +#ifndef __D0_H__ +#define __D0_H__ + +#include // size_t + +#define D0_EXPORT __attribute__((__visibility__("default"))) +#define D0_USED __attribute__((used)) +#define D0_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#define D0_BOOL int + +typedef void *(d0_malloc_t)(size_t len); +typedef void (d0_free_t)(void *p); +typedef void *(d0_createmutex_t)(void); +typedef void (d0_destroymutex_t)(void *); +typedef int (d0_lockmutex_t)(void *); // zero on success +typedef int (d0_unlockmutex_t)(void *); // zero on success + +extern d0_malloc_t *d0_malloc; +extern d0_free_t *d0_free; +extern d0_createmutex_t *d0_createmutex; +extern d0_destroymutex_t *d0_destroymutex; +extern d0_lockmutex_t *d0_lockmutex; +extern d0_unlockmutex_t *d0_unlockmutex; + +void d0_setmallocfuncs(d0_malloc_t *m, d0_free_t *f); +void d0_setmutexfuncs(d0_createmutex_t *c, d0_destroymutex_t *d, d0_lockmutex_t *l, d0_unlockmutex_t *u); +void d0_initfuncs(void); // initializes them, this needs to be only called internally once + +extern const char *d0_bsd_license_notice; + +#endif diff --git a/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0_blind_id.h b/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0_blind_id.h new file mode 100644 index 00000000..f546b679 --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0_blind_id.h @@ -0,0 +1,91 @@ +/* + * FILE: d0_blind_id.h + * AUTHOR: Rudolf Polzer - divVerent@xonotic.org + * + * Copyright (c) 2010, Rudolf Polzer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Format:commit %H$ + * $Id: bf838f43093aceadcd2d20071684f1e7148a4332 $ + */ + +#ifndef __D0_BLIND_ID_H__ +#define __D0_BLIND_ID_H__ + +#include "d0.h" + +typedef struct d0_blind_id_s d0_blind_id_t; +typedef D0_BOOL (*d0_fastreject_function) (const d0_blind_id_t *ctx, void *pass); + +D0_EXPORT D0_WARN_UNUSED_RESULT d0_blind_id_t *d0_blind_id_new(void); +D0_EXPORT void d0_blind_id_free(d0_blind_id_t *a); +D0_EXPORT void d0_blind_id_clear(d0_blind_id_t *ctx); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_copy(d0_blind_id_t *ctx, const d0_blind_id_t *src); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_key(d0_blind_id_t *ctx, int k); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_key_fastreject(d0_blind_id_t *ctx, int k, d0_fastreject_function reject, void *pass); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_key(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_public_key(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_public_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_fingerprint64_public_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_modulus(d0_blind_id_t *ctx); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id_modulus(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id_modulus(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_start(d0_blind_id_t *ctx); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_request(d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_answer_private_id_request(const d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_finish_private_id_request(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id_request_camouflage(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id_request_camouflage(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_public_id(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_start(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_challenge(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen, D0_BOOL *status); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_response(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_verify(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *msg, size_t *msglen, D0_BOOL *status); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_generate_missing_signature(d0_blind_id_t *ctx); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_sign(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_sign_detached(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_verify(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, char *msg, size_t *msglen, D0_BOOL *status); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_verify_detached(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, const char *msg, size_t msglen, D0_BOOL *status); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_fingerprint64_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_verify_public_id(const d0_blind_id_t *ctx, D0_BOOL *status); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_verify_private_id(const d0_blind_id_t *ctx); +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sessionkey_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); // can only be done after successful key exchange, this performs a modpow; key length is limited by SHA_DIGESTSIZE for now; also ONLY valid after successful d0_blind_id_authenticate_with_private_id_verify/d0_blind_id_fingerprint64_public_id + +D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_INITIALIZE(void); +D0_EXPORT void d0_blind_id_SHUTDOWN(void); + +D0_EXPORT void d0_blind_id_util_sha256(char *out, const char *in, size_t n); + +// for exporting +D0_EXPORT void d0_blind_id_setmallocfuncs(d0_malloc_t *m, d0_free_t *f); +D0_EXPORT void d0_blind_id_setmutexfuncs(d0_createmutex_t *c, d0_destroymutex_t *d, d0_lockmutex_t *l, d0_unlockmutex_t *u); + +#endif diff --git a/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0_rijndael.h b/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0_rijndael.h new file mode 100644 index 00000000..e1c8f71b --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/include/d0_blind_id/d0_rijndael.h @@ -0,0 +1,21 @@ +// from http://www.efgh.com/software/rijndael.htm (public domain) + +#ifndef H__RIJNDAEL +#define H__RIJNDAEL + +#include "d0.h" + +D0_EXPORT int d0_rijndael_setup_encrypt(unsigned long *rk, const unsigned char *key, + int keybits); +D0_EXPORT int d0_rijndael_setup_decrypt(unsigned long *rk, const unsigned char *key, + int keybits); +D0_EXPORT void d0_rijndael_encrypt(const unsigned long *rk, int nrounds, + const unsigned char plaintext[16], unsigned char ciphertext[16]); +D0_EXPORT void d0_rijndael_decrypt(const unsigned long *rk, int nrounds, + const unsigned char ciphertext[16], unsigned char plaintext[16]); + +#define D0_RIJNDAEL_KEYLENGTH(keybits) ((keybits)/8) +#define D0_RIJNDAEL_RKLENGTH(keybits) ((keybits)/8+28) +#define D0_RIJNDAEL_NROUNDS(keybits) ((keybits)/32+6) + +#endif diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.a b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.a new file mode 100644 index 0000000000000000000000000000000000000000..f828b124ad342a23f47e3cfa40be0214760b81bb GIT binary patch literal 209924 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

vk*bH1 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 zuCB69${?p&z^nFet5xPHA3-XBn8Ig?0Qu zCoD3!XKbt=RUPiZtoDgB+v0JL$Td1Xel;2j`4^QaWS<g4 z)QTg+I2~0~ZX77SV!!Fb_%Cdr-?cK0`|@#zSUrThRWKuPTDgI3Cc&O{YCAf@*z*yc z9`}ka(zqw%4swQGsi&dWRljQ?2}xmC$IkcMS`d;%tyBRHh5bi6_Q;j}8FGC<3oiO4 zBsw~%j{;0rOuGUd!!ae_aFYU3Ha%gVd!q z83*mxaDcTUbhX2QBQV&B!><}6`@-e$pX#6`>k#+$FsEgGnB(@pq70gxGOwE zYBMSskzZlKphhNYPuDmvL;#Ew9|M)kcuF$k-9^hJms6ppRy&HbG(vzLic(R;J&4q6 z&mN)j8EZ}tEq97oGj5O^zK8vravfnw!{tBZ;S5$amEjFBXk`z*il9uQ2GCF+6~8S6!G z)Je6+|6%wajyy1oACXOH2v2Nj4?E9w;JQAns)i>{ZXVs(8Xng;v9Yzjy`?qWo7d{$ zv8^r5ZWV}Z8q*jaTi-OHv7t{2xG&Ly$Nh)gC$@BEi(j}Yu3u?EtPyu-xtHf5;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424;3424 z;3424;3424;3424;3424;3424;3424;3424;34q;Lj-nQ+R-6Wsu~(cPaan{p=Hd^ z_!Iz#TpX#I5QfOqq6HuZy9pO0w`M&u#^LaZ&vg;)TzWGyZjF_adQ7E+7A5sWtc=t} z5CT3ZLqdKiWgT)Wkopr2mKsT=<+>1MDCwn2JLzx@O8I#XM_0~nspZH`)}N*Cq1_L= zZM)h)Ha=(JP@GB4R4HgdDs#8?xGmk%WT`Ce%4vQ~3JCcjG7tJxPvs*AIzTF^uu6$! zzVD%K6-ugAsjfvytyd{wCSl6D{G5V=w&}YqJ;5nW?ycn}TdF=`TM=dN^uVDsBz3e( zb<&V6yVj-7iVq0+q2(2RMYH}dNm&{zQ+0)KTkfrt^?M=3?f+!7*>Z2C931#{TQ1nG zEo`~BQZ_hJc8{l9x+gpj-mMO7xwkr`Sif#*?QW&8<=#p;#*wmnOWo3c-%_^RTOBTT zbl5j$4XH|%!Z;LAQ+^$>-P^*Jdn;v%Bc;?qMT?ROs}y{UR3DY< zG^4U**SfuTTlaHE%I-&#TS}dODGnbJD+3`v^j)^xTT2fPs&>2A!7cswbzsZA)#0K& z>fo0C`#P}Y-sDi`{9?CCD&(u!DN=6?bhG!obJSeDRNor`?@NAe?hP*+r#;g!V`p{qy zq@QFkI22@H0LXYFD-X4ebn+0w&enoKMW&?1stra-Fh5q3nt>KVr1>Dtt)1Q*wTm-^ z$iN{&*&3xOMwwC_O!iq-Fd)l6tl;uPyD5Rax*gI@h-_2n1uBDlb4;*eQzmk&zzGSH zRm0FD&nY!on!g*4!?Ve=U_cVjZb;_GxfYga{j#acsNl)LlfbnID&+SA$Kvy6Yl3A$ zl*C03k$RSz((dlLu)7yzgmX21l{xi-y}Aw0RyE6Gm}0%wBOCS%LB)zevi&|i(F_kkze>sR$ub0_s5qu+cYZhZOEYeJ5XuD zycA!4&3^^Htboo%J*)M@cf6V*^fnfpYZ?QR3Q~oBAqy@rjbTXzqlA6~3l^EilB9y; zM1YrlkFxL}(+J_)dLF0gP+ot>cmt%5nrXt?imx%ue%sE`UrD(K$xF;I_b|}kpp?cL))gY< z?=HR6m+~6uNz7kn3G*2wOke6`q^%B|wj-@yY`%l9fX`ZtoI_dl#k3Xp^67t1FTuA+ zui;skA$$dV8G#G%y&i`)#5CA%*0V@ljl%esA;e$wFK3y-Z;I8T;Ctf4fryxEM$lr9D&bewdlK0 zLOVX&$BQw6<+^q}x#ajHIgNF4-yqvEP0QP+h^gd}N+a?Sd)0+Gn}1DKClSX2eUY%q z;ZH;0p73qB8k486u-j2cW-@v5K4?)m8tmv^oLRKddeOf4KAj?p{|NCcDZUlN*(9C^ zv4F&O5cJvNA3-d4b5@ba0MjR2;w=&*ki*_8J{<%>D_#hqFNteFoJQg$5HmoCl238g z-`7f;z`68Xo|fSxQYYfvo#2#8Sfme_(9^dd_54^-tXx$}y$&Ve(pau2Nkt2Nlu`O1 zd0HEAE?~}pgmVpZK2GJpC_5aqIfxxw%0{AOI1AHM_0kS%U-lv0klWK%H~ zr&LxbJCha0P)_LrRw54S#5SUWW|qxhrQ_MrrED%r<{(2qQCX~N%R<>WPCd`MsW0N( zt7H*dq&Q}M!~$yv&dZtoe(FC!?nAVC--uJ9F9%HY?qSqI`Exd%>@e9|y?LYPPvGSG zeK*!UGG15uek`p;d$H}2Y)f8xv^19Pwh(NpnHAdV$ zk-HjattST3Iz`BVl*OA=tqINhQnO`+tMPR(isZ1kRxi2*RqjNdC^r2PmA>G zP@TR#anf=$c7RqT!&;t9h};1v(Tf9G-XV(MIL$j!(NbVOZ^FsjbA;)C2-AA<+3!?n zEMZzNVd{ybgh`enA}W|3rM`tkEJPh)v9>WaG7FUtMV_cW7U!ub!9qc3Z~BUTxESAs zCen?nP#{BABZ=-Px)_8gI~ElJ1LEdO@Q9lzX+V*l?USCNLPQ_l84RP$9ST$?vdYmw z%6XGq^LeLlJqWn65j~xTZtaI~uEv%$Z7V%sKRUNGd@JSdrz1&Qw5`%3UPYdCkdK&@ z9>H-cJ>obL&%%tWL5O~>s9;sq@Lu21NW1!7gtV3_`=|d!iy zL_9-+7y(BK;vg+8@@^7{zeiE=ZBS_@iKjsX)_i@Qk$hDc0u&RAVkR%6rJa&B{k~%60)?vNU>U;l&KPV()hnf zml8F+FI$_SY!Q_`K`HyHtE@^7OouplgELWDaay>d(#^OAUJ7#T|t*cX<4c(wmj^RjzcEPLSRlm;RwEy#>;@y3z-8g0gYH zb06^5CTY4<$3TWurx=8&;l14{39?60cDs@t0xd09=>*yB2?0mCYrDqzMnW+Z93|{$ zLYWa@5g)66rtEUueVIn$KoFObAUM~65GB0M(pM#bQ!2+wNjCHUl^9rLejna5J}g1| zGZCzd&Vcar|5%uZAyTyt8r(}Wu+h}nv z2*rP)L+R10KuP{PUH<2Te;zs^jz9re%aFS-2+@c4i4*xx%m#nfJ`056KhL4`=p~>O z!e}M+UkLs)lKB6b{9AFYK9T%OdJ?x4iFhiHEfyDoU*a||F z^rPB_qc)dy36n_)FNO4-iN2sFpFc3)?qX|SUhrrg(l#f~s)SnFcSsY|^|GQx>djDO zpY@p0Yj}72*aV!~h|`T~bfja@$*`fhI$MDqX;qVH)0U|u2sDxm`j~a!5@j zL9@>XA^LJ@u3emHwn`|oFHSI9(V~X;@Dt6xoMzvt%+AA@mc6ag31;8f+3a|RW46i| z$iYn!((Joo_5kqQ<3L}6+OdH?5w#O~`)-uUk-mWh&3*%fsNtUojsW2f?VD)CI%UL_ zt`RDoV8pu4M#M85BUFYQ+S?#Ps`VgxgAr4zC1)2urv2itaiw1fLX@1xG5LDuG3l%d zd!Py;e@xSL)b!DWrL@HRQK@=@s*fh9DhHFwC?1c8U8*UyaxtY&H{{y7Q}n2*K@C=N z;d!1yH*^-dAtpnM{trW+s!{wLWE?DIET@e3l?=uobxB;qKb`Q8DlYr?$o_eSJ}>R1 zNh+;O`d@O7XXw#CCubNc(mo$k$frVz%8=bL0y1THynyaF5JKYJF&;(5m*n9VtV>)& z;x6Q@1tCiArWpq$M%qq*l|0TG{X2J|sJS2Q6MOG-TKa}I7S(B)h@MJA-iYa~MMtX) z-g7O^#cJUxYEbzC`5$4hU8y|9E{TN2Mdw^BXM9)6Td4>94h;mFi@Rrcbj1Gf)LK7r zTw@!qYy`{_yw7<9>hO-!{Wy3xDG!Cb^;3p}_i!%7!Fw%H9K4mniw52+cmPW9lKUMT zyrhmoHZO6vVxZmKa>ZkDolcYD`OWWWt0q)v52K)|S&6$FzqB4IEhAZ|uPS`_~L;Xgr{%zJBbO z#+tGH8tV5yVDRXg0SD9%syU#4!Am=%#TKCpY&U*F33ejEGEWX+6DdQvI05 z$kdjJE$vNXBCIl@X<|cNQ-c^YzP?q|)zuzCXN$mGNGw?bRDXp z`SdziKY2_$vZpf(rS%iW#hZ}bk-tB#jxy_Nk2$jL@FRX#d*U%8lQWMwOu(c%IAH@? z$N4nWx7SOa6UIQATcxeNzP-_vo1ED$+8diEA$r8Hs%uN2+Xc`YJ$YzW&zTUw{pjh#GkOgnnLO|$_r2@7u{uxo08GIdj0o6sxp#?u=mY${ixugF9&CpJ!T#ZGJ-=V)lH_3stpZvc{*wm zdcaaYI%XzRN1waJlbt@AUN@Qk)Y9DS7S%Vv(Uq-E(P(<}=%)5D6Wik*M{v>Aah&MG ztpa_Z+ERhGCg~~(SuWW;c|u(cuyNC48=B6nJ0mFzRgy~`|CnBC}RUho$Kuh zl866c_{ib4#~{FnuGP?i3@g9T^n{~M9C`S$C;frk61_-;xp=O0gLtN*>XZl8x#3B) zIRh{biW&^@8u1bgoyG(k*fJqWe~QK< zy|J|=A=xr9kzaGmnF(ba6!C^_<0mAf;84viiH?9&U9xL1r;~dihb|Il$~y3rPC4+G zgq)@}=_(01^o}@>c39rpgh_#cMPkUX)QSKwR{4UA8v>(U5iJv-mxP*ueN4+_j4Y>H z(NLB&*H0DAO%p}4I73XTZ>?_@?f9eUR3Sr;`1~@=yYBMV({`n& z@e2tqaI~)TBcJ+>Y46OUs9e?FJSo!L)HWtEdUDf*hK9yTZIQ<2wuaLqlPAHz#`X>wYucn2zj{fyiz*)BVP@v1ZZnW;g#> z)9*J*hM1-`*$f04<0V^%wxT%?8l#y7Lpm_fg>NDCutgc)388VijtQ9<_`mucZ=kDSvuZoHZ4 zuQK&^zm=nBzzWl*aa`XUkHZihHc0DW67u=jgYh)-O@F&__t{mZ<~KHpD!*~-*hSCS-Sy@2f z{(H>K{-)m2|2;En0AQcqKERm%s+synQ=6R7{4zFQ5oZczc~xMnl2WZGW;Z#B&@ z+-Rs->R)IYTaA^QZL2DyeWfp+) z4S``F0`^hH&YA7h@B$s~{g0WiQuFVDrbXv6>7m!*63@7p`kpU=+RvB@oOa9{MW!T8U@^d!3O4sHj4rg8_8mqy}rtSW*%H8Au$!F1RDAN7QRJN4fi`jQm zx=}Y<$}cm*kpHxjf3MD-Qo}9#n{&oBn3?@d{fvGe`i;kD-Y;Fl)k?B^jO-qf>_)om z_5-_z6uZX~+3heht4+PN+Hb6z37>?8Pw8Q0q2x6T*RsYllGo8LuL0n7m*VwYA}_Pd zf4>Qc&vAG{zuRUmBhO7q`aMgY?@FHcob58*Ai(t+#dWg|uUbBHtlxMgsbLx}oPVVu zI(WH~xh1LTvA^EbmHDRIFhI{(#D*V2S<}Ce1K7CbY&Dk35W=AH5~cDdbgj#k5>w@Egn0!|-mnu|MKB-aliRSs**GXNo zKW-No-$};HV~pP;;|riuz;FChUkH|r;$S-;o`MMV1M*TZs^`tDGQ0bYo%&c54>8Uo z*gxt+{KmP;hM$sbxP_w5G3cO|#zbwWsGnxYAu`8+`Tv?BopG+=3=!!-U$g0a+4Q1V z)34d|pQ`BvZ2Aw?^una3`{TZc@mJaOyjas8*z_yabP=0=shVEmHubaDrn2c}XlfyT zelnv9f!DZ9#}N9)Z+wE0Y$Eg+Lrnk4rf;$-{KkhfUM0ZS8|{AM?HP>K#?@s0fnpxZ zN8pGWVYYZbR+2D~zoOW^!O3sjWQMj?xmpHAP9Z25ttg7MsJ<*HKY5B1|0F08FESTk^#@WdB!rt0_Lt(u)k)gA%?Ez zT`uDdFt<|T1R!39`y2e8&Y9SeQkdTTzCjl#EI_HM2UwNL=dUwLiitIUb5gzMs$ zh&jt!Ll0nU3k|;)9v^j7~#`GsVK)qoufamA$)5OK{hHWTxQ; zbw~r}*v&2-&(4K(KAsiwX}Z7am?|vo4UwklmZGch7c&%^@r)XiT>K&wi0Ae9i&0w0 zj|FLCYpV!Z;{U4U%EPOumVBK)eebQheYBxJiJ1Qq0gAP)h-2gp+veGZP( zdSu@F!x`su`M!Dc%^v{*0}Rdw}s>3(JF06YV35M1ldAm9Gad&3Ye@u>czVI<&&z-*~!;jSm!5Gyht zirz==dB&~{t|QzqSG_urd;I#}@63w%u!ipP-wD;2k0dhmdq0{-dnfFLP+Dq&8wS?} zHv(oWy+n-yEq7fpH_D0qV79jJE70*8^U>7%z=OWG%afZ3ZW5Sn8nt@R|2F^7XwY|V zleUeJ1_#h=*GR8+#NA{tA8T|oHFC$@6mV0)O#`!iBdzxw@Vl2?ZSAWMr zcQe3zyiqS2+;le+%#MvZqGLej9~%MMdpA2Z0<;6~HUaaAMwoWv&CZPg?a8}M!Oa4* zOCwl&?`GFVfOg)^CmR9UcXzWnq1(Mbj=O;XHwWBi;O2taJ#xSDpFsihsRzIY(SLdX z)Z)z^4}dy4;O2qZ^8sAP2;6)ydo{xU87XiJzV?F1fRl`H1-~Q1bBa zp+|lXwfa5O8iduL`OXevqx&6w00!R}$UD2F%b&YG={qMR3GjzSAVUTUrEFz_znvkw z@CPit{owB>#ft&)3W~pRLIIg?@q_JuEVESbVLMFN<|tj5C>)qB!u-y~F_#M$%r%1F zMOKNZStEESZqrx0MHEho82l^}&5=eD$SDTD|Cz-;Z-tR+t~Ap4F`|(gBgNd#9vz%8 z(#^95pEQ^C)lDNqmP+o^2$>1~u~G(RN+}n~Cg5Mjh3|D?kCbprHkI%2w-x@;Os1Qb z{MclsN|Q&j(v;>plVxo*bIcl(`@PLoc0#erMnq2`FcpxCnvjJwf5h#|^kcTrHC47RG{2ckF+>b2u zFs94Xd<7$@g`7gnI)_;3$0P&GNy^Q{T(u-&7g>R03|`>!;9wzq9DE4A4aVVe@L?Ea zJro#YNtj|iB3D?=GqdL+U?~on`Io}i{rK> zuj=aCHp>|7NOP3V9GmDoE@wIn&vTe-p(EvXhdK5-5{@{Qyripsa+u>E%rPR&9FxP3 z%lE?!SA>~kaah8d@E_%&FmoN_i*sQMZika4q^2j7|6x%t&}rRwZ!7 z<^%~_6D&BA&|a3s7#JCoFd=5aN3nLYS_4}c*u%i-*wb=EA_HR+dHxeESdsW=s7ZVV zen@;)4o>2V;Ykw8IfvuJr1r2p=~=m5gL@e~!r;}Uc2Ji5to$IE!HQ%FOOh?vko+|4 zWbldx>lqxBV!@=8=U_p~Uto30zsQ{_T(Lhz!ZEHGocbcn;NODOe}(m_{{~C-J5=}1 zVQ~MSBLa`1X>e*U|9bInBBui4Qjra~P2>Y!&}5XsWWG_v-~DJZSTb2GO91!FmVm=d zCUZ4eZ?*!wtx1KiE#Og2#`rt%rxco8^LJ#n0F(WJPJs2AEJY@D*cosNG1*96m`#%z zK_=C~uB^>sve@bdcuJFrq3(cNG`SV(0l3^|a@g((IL%?Q+3CfZpJ65o!@U7dYBJvK z16Zla8BHcf`ZAj)7c`j`?FYD8lPj9cO6U)`SCg{X0Kj!jV7dOUjmU52O@G}*+a&p4 z1_~*ls5$|Z^eRxAx(<}{3iw*OK%LY?LEY6<;d?FuzSk4LH(VrvZ;nUr zN6;BV)d;#}sI!6wNp(ojD5=&PG+nBh2F;ObsX-M|jWeiHs*%$7xeNkr;z~)iQk6^E zDb-j>N2K~h`p(M&ph2dplr-E_>!fcYACvTfskTe{#8lN1EBVP{uQerAnW~Pc)>Neq z?J-rEL&r?DPtrM4os#$~-&gdmPhBCJ>Qf^en(Om`Dtv0RL(6<#HP9-bDtB^Bw(eBW=3xbZ=4di z#&1kAaD(62ZeXq7IBw8(zd9r7SHBu+Qe{AmGHHE4O)+UpK+QJka6m0J>0Cfu=o}#@$^|3>zf@+pSSA*U-K{tb{(!n8C7TA1D z<2);iXrZMR_-KWt*7|V0l@0cHmZa^LS`@@XR(3j_w!FmxZ(7*}SQ^T1MZ-es3m;7k zsTv=C5Xu94QApyZP#)p8p?sjdAypNmVg2ep>0Md4Ag9 z@QTwmM=kf$K1Y4&rxT9)+K*S9BA|abYIl%EhP}fEjS1^6ObvVU44N6%U04w2F5sGQ z5pSW*VeeN1cZQ3;~*fB zYS)`DahF??i3i-4K&M=FHc0iZRxl*u@p8Wt(Tc}Myul_-j;Qqx&53xsC4Cgp>X%1a z7UCC?mY4YqiL_iNs5YXm_;E+171(tVNyj2;v_%&q-a3=6MjB==s^v|JHb{zU8B3zA zELs=!>P@VTwucq}ZBhq|s*}8pe%zhZ zA&x&Jb=U`VB1wG`ph3y%vj7fH?g;jTWJyz!)!-1#P4+JNsUlg6_$*nA_$IldMZ1%| z`2jqh+%b;llRMS{-bn5^SkUccwJAVjQ`C+C%}CKa6)Bo$MM@{It5PIwN>S58^nHrA zn+K~K;0dmxD=FT!01i#&F0ostNt_H9swKLeeQYHP6 z>g`9ok=mJOD9xKlSf19IXDF?6JDi=?1?&ZBk}A{G{1APf=2a0@rD;{$xQY&?d3A)B z(z;mmOPV(&h@;ZG#Box3mv%Tky(`%B(j_fOSF1y`D&5-{q_ydK7`5qo`46UdjnV0J z@7EySOz-*#mS%Ka4>T-8)dz5DMmMnMX7E{?p*DwTMTR%uqR%okb4`Y3-k;IUq8~H7 z;}%}e=++X4Wp<0>*vxM00Vid42YYrV-_)6EXNZ<$dgE9^rsmz8sqdjZnR*s~%s@bgGGWBZMQG z_TU?$saI*^+@?L^xTtB5_PDHRPu_=3c^@|Q4%&FSX-|u8H1#GsSeDf@j-#`Bw#Nxs zy}+K8C8;9ITkqgES-p7qv%K359?$B<%b(S&JzdRG^AO+7?hW?jY)R9z)zJ_w%vL)c zTAl4xgz58awcVlbvh`rKAVH}auJ0HjA^yXbRJ*W3xwn}n(p9h+s zqn03joujIde#lWS~C#HuJ`~w4<{+kLP<9Y)h9L$j(gJ*Xjoi}d@rswSH!i*&*EC-H}U?w(s6HR0v?a|=ar84 zf1Iwy)iA(BDLGWuZv!==({2{oA7wi0I)A|t7}E-2b)TZz0w$!73;Q>idCIM^NQ6$ zhgKD99o5Bpe)bj*u;@gwwB6gI#!kjEpx$^`3%vSi?an= z<#R;LO%NL5StfEq|UA|m&;|;f3uwnkW=zbHhO0Z?VQS{)=SS{EzuN6JHxJ|Ha zzEkw#;$FeV`9ab9IvenU4fEro&sH|_1smn(L|-mm5^RuP6aBbYFW4f#E&6X_>)v>t z`)fS!;Beyw?VG$1!f^)M>JyCtx45^)OWa%IB?qc?Z05ISyH3Ig<>D=Vy^LeD*R#hL z5O|Saz~XX$mcSZ+w!jgAJb^O;JjYeY^LvDNZhs=4*mA3t#A>UxU^|Rwv)*bWaBQfp z#JW%i-q3bOHhJw%5?48$B^y3nBrXVdm3S`PjqNeFJKN2X9um(+da|Jx?IrO@w6|bi zqmRV#vAz;(WBnu!OYAT4tHkHIBJl<8TH*k%NP3C0VjCh&oD=ox+ln(c4b(}TZ@>K4 zfkJk9_+bcfjT-pon*(2M@yg$YuOY?rx&Nos&V{8svEjE~enY2R{X0j--+qI$af`wn d>wWo^*9Nxu>ua32_1c?7s53EJaJE+P{{XmxVHyAc literal 0 HcmV?d00001 diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.la b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.la new file mode 100755 index 00000000..1854cabc --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.la @@ -0,0 +1,41 @@ +# libd0_blind_id.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-15build2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libd0_blind_id.so.0' + +# Names of this library. +library_names='libd0_blind_id.so.0.7.1 libd0_blind_id.so.0 libd0_blind_id.so' + +# The name of the static archive. +old_library='libd0_blind_id.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libd0_blind_id. +current=7 +age=7 +revision=1 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so new file mode 120000 index 00000000..fd8cd95a --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so @@ -0,0 +1 @@ +libd0_blind_id.so.0.7.1 \ No newline at end of file diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so.0 b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so.0 new file mode 120000 index 00000000..fd8cd95a --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so.0 @@ -0,0 +1 @@ +libd0_blind_id.so.0.7.1 \ No newline at end of file diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so.0.7.1 b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.so.0.7.1 new file mode 100755 index 0000000000000000000000000000000000000000..1450691f0fcbdd062da06ab827f06c31baf88e69 GIT binary patch literal 624149 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%0A)?0}Vg6b!Dk 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

MO5K14K-@! zHqKyGajIyW;e$nvRiOhA*;Hxu<~|slAVB8aon{A0SqB2yrW2#NIDRN< z6LS>4Q@UWM3JEx{oyl9h=?0 z%DfO!3}U(vfk+B!hyS49(pj^9I5lNC0``2>iB8K=_k*k(Z42Y4W4e*pQH$l!F_P3Q z3OtOcBbKxB=eF`0v+W6r6CLJkQMkI_RT*R34IS&BD9XUV%9s|;T@EaeT8em;W+qu{ z9Pk0*#a%GAb^!FwbPg1mcHmqCe{(n1FiHX1!TLgWQTZ|u+oA;s!75&B5C##sNq>?}o6 zplQe?w_GDdL}G+!!uF~V4Hs2|st}<{QE!NW!ha&?s{l91)^OoW4BvnN4iU_Br(9?t z9%>98EV^ce?*TiXR`+u+jB!R|me|tKyEQo67Fw_}8<8n=vL)8L;mgSJkvoV<-~5M-9F(Hr=w7G<_K;AA zeh+pi3J-*1X@XgYu|IC=!64<>+)xAQP8^Mi(^(*SuzN2;GC^!$?+mX%w!7jD?;aM6 zb}Tapz0@BjsUTw*Ho2-1is-?%J`eWq7zk-Pbde&|=?=7GCXxps-{k&me1^QiZR!rW zl!yB!5c%*#%5Xvv55;L>m=ne>1%_)wo=cDPsk~)04qe9{?09>F9$QwaG|QpPnd5iMXim5x%}hpMU1FZ zQKLXNW+PHT6c&nUo>*aU1IZ2r16)#z*?0w&6wO(QKV)%P__JW3&XZ6uh^Pt!USJLw zVB87@F>ai#OXbCM-}uqGWV8m&`^PEyBR;=D=-0Rfg+{QA2f5 zPm(rj;hG>Io)i>n-ZCT4?2?Idm|5Bben7uk=jWNvaZMk+Y~(=}8k}~cGWt+6o?r^i zz|}eFxPgiDd_I)x9IkBi3B?8!?)%p{*kl)G%F@YP;1V+WR*2S6pfx~WM8t6XIx#3n zkxUeJ)kGIUz@V3r;QT4Y-s-p@Mz9N^6A4J^<`x>=xa}y|6UYAjtABnA)mA|O0GJT`#uPJdTyY;de2Hr5ZYkcLov3kn2=$GT&Y zkKAs4gc*e3&}fdKvRi@4u5?dL97Ty#VUEfU0^kr$;X#_i>GF&B4~PfEk^o9K&>f2D zgvysV`vvn3T4)XXt&Kwqt!}?yxkP9+`-L^c+AmTFl!G(+_=~*|F@RwZ_yhBfyts{h z#GXs+o-WoG6Ca+i%f`?bMkWfu1|<{wO;B*h#om|()WM^d6~LVXOH^G}IhI)jctw35=K>@Yd`&V<5S|qh{2c=B){W0YUo!srV77*J%dJm#qr(_+oD3qv{e` zgS^+{JpfZpbmCFf2{+Ep#({+0ioFfJMP#9>G=p&&ig zZKGyi?4|Pc8;XGV!C>B9hPI7R-Z#pBa&+N^K>KfIy#4@tfW6}+P$bXbg5T;Qu4Bk0 z)}s*zo(qczl_iET)C{a2H==RHhbI)O*?^SOaA(nDtdGnTNZpN#w*`Lf5k<$7xPyQw z4~W7=R-PCsO+~6Mw~A0krW^+qp+75KivV1>#~1g10WGpxj+^+Y^wbrrF^IgPK`7fW zMC96mF+<7sVX9N$AgfatA9jbcyF?04mR4i18xNzgD@})4O^4yMGn|8o^N<||MvPXC zFr`1CdF?Jx1VMBV0BnoGy;MO#5|9W|3Jt{$TMNe_(nr+S04+yjP|$gXf22%9QLbSb zM-TvQL9VUV67+<-)fC!^5b&!J3fT`3D04u

9ef$S>?ybD;#-8P!{Qj)op?3WKSN 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 RxEi)W#mq((wpcgY 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 literal 0 HcmV?d00001 diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.a b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.a new file mode 100644 index 0000000000000000000000000000000000000000..b0fdc1d44ff8c8003779b4317b13b51f1cbdb748 GIT binary patch literal 39300 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 literal 0 HcmV?d00001 diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.la b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.la new file mode 100755 index 00000000..234213e2 --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.la @@ -0,0 +1,41 @@ +# libd0_rijndael.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-15build2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libd0_rijndael.so.0' + +# Names of this library. +library_names='libd0_rijndael.so.0.0.0 libd0_rijndael.so.0 libd0_rijndael.so' + +# The name of the static archive. +old_library='libd0_rijndael.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libd0_rijndael. +current=0 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so new file mode 120000 index 00000000..01dce017 --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so @@ -0,0 +1 @@ +libd0_rijndael.so.0.0.0 \ No newline at end of file diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so.0 b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so.0 new file mode 120000 index 00000000..01dce017 --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so.0 @@ -0,0 +1 @@ +libd0_rijndael.so.0.0.0 \ No newline at end of file diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so.0.0.0 b/misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.so.0.0.0 new file mode 100755 index 0000000000000000000000000000000000000000..27771a7fff44fc1b419a07b29ba873790d5482f4 GIT binary patch literal 33374 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 literal 0 HcmV?d00001 diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/pkgconfig/d0_blind_id.pc b/misc/builddeps/emscripten/d0_blind_id/lib/pkgconfig/d0_blind_id.pc new file mode 100644 index 00000000..8c9bb32b --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/lib/pkgconfig/d0_blind_id.pc @@ -0,0 +1,11 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: Blind-ID +Description: Library for user identification using RSA blind signatures +Requires: +Version: 0.5 +Libs: -L${libdir} -ld0_blind_id +Cflags: -I${includedir}/d0_blind_id diff --git a/misc/builddeps/emscripten/d0_blind_id/lib/pkgconfig/d0_rijndael.pc b/misc/builddeps/emscripten/d0_blind_id/lib/pkgconfig/d0_rijndael.pc new file mode 100644 index 00000000..1040d658 --- /dev/null +++ b/misc/builddeps/emscripten/d0_blind_id/lib/pkgconfig/d0_rijndael.pc @@ -0,0 +1,11 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: Rijndael +Description: Library for Rijndael encryption +Requires: +Version: 0.5 +Libs: -L${libdir} -ld0_rijndael +Cflags: -I${includedir}/d0_blind_id diff --git a/misc/builddeps/emscripten/gmp/include/gmp.h b/misc/builddeps/emscripten/gmp/include/gmp.h new file mode 100644 index 00000000..419f6cb7 --- /dev/null +++ b/misc/builddeps/emscripten/gmp/include/gmp.h @@ -0,0 +1,2344 @@ +/* Definitions for GNU multiple precision functions. -*- mode: c -*- + +Copyright 1991, 1993-1997, 1999-2016, 2020, 2021 Free Software +Foundation, Inc. + +This file is part of the GNU MP Library. + +The GNU MP Library is free software; you can redistribute it and/or modify +it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + +or + + * the GNU General Public License as published by the Free Software + Foundation; either version 2 of the License, or (at your option) any + later version. + +or both in parallel, as here. + +The GNU MP Library is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received copies of the GNU General Public License and the +GNU Lesser General Public License along with the GNU MP Library. If not, +see https://www.gnu.org/licenses/. */ + +#ifndef __GMP_H__ + +#if defined (__cplusplus) +#include /* for std::istream, std::ostream, std::string */ +#include +#endif + + +/* Instantiated by configure. */ +#if ! defined (__GMP_WITHIN_CONFIGURE) +#define __GMP_HAVE_HOST_CPU_FAMILY_power 0 +#define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0 +#define GMP_LIMB_BITS 32 +#define GMP_NAIL_BITS 0 +#endif +#define GMP_NUMB_BITS (GMP_LIMB_BITS - GMP_NAIL_BITS) +#define GMP_NUMB_MASK ((~ __GMP_CAST (mp_limb_t, 0)) >> GMP_NAIL_BITS) +#define GMP_NUMB_MAX GMP_NUMB_MASK +#define GMP_NAIL_MASK (~ GMP_NUMB_MASK) + + +#ifndef __GNU_MP__ +#define __GNU_MP__ 6 + +#include /* for size_t */ +#include + +/* Instantiated by configure. */ +#if ! defined (__GMP_WITHIN_CONFIGURE) +/* #undef _LONG_LONG_LIMB */ +#define __GMP_LIBGMP_DLL 0 +#endif + + +/* __GMP_DECLSPEC supports Windows DLL versions of libgmp, and is empty in + all other circumstances. + + When compiling objects for libgmp, __GMP_DECLSPEC is an export directive, + or when compiling for an application it's an import directive. The two + cases are differentiated by __GMP_WITHIN_GMP defined by the GMP Makefiles + (and not defined from an application). + + __GMP_DECLSPEC_XX is similarly used for libgmpxx. __GMP_WITHIN_GMPXX + indicates when building libgmpxx, and in that case libgmpxx functions are + exports, but libgmp functions which might get called are imports. + + Libtool DLL_EXPORT define is not used. + + There's no attempt to support GMP built both static and DLL. Doing so + would mean applications would have to tell us which of the two is going + to be used when linking, and that seems very tedious and error prone if + using GMP by hand, and equally tedious from a package since autoconf and + automake don't give much help. + + __GMP_DECLSPEC is required on all documented global functions and + variables, the various internals in gmp-impl.h etc can be left unadorned. + But internals used by the test programs or speed measuring programs + should have __GMP_DECLSPEC, and certainly constants or variables must + have it or the wrong address will be resolved. + + In gcc __declspec can go at either the start or end of a prototype. + + In Microsoft C __declspec must go at the start, or after the type like + void __declspec(...) *foo()". There's no __dllexport or anything to + guard against someone foolish #defining dllexport. _export used to be + available, but no longer. + + In Borland C _export still exists, but needs to go after the type, like + "void _export foo();". Would have to change the __GMP_DECLSPEC syntax to + make use of that. Probably more trouble than it's worth. */ + +#if defined (__GNUC__) +#define __GMP_DECLSPEC_EXPORT __declspec(__dllexport__) +#define __GMP_DECLSPEC_IMPORT __declspec(__dllimport__) +#endif +#if defined (_MSC_VER) || defined (__BORLANDC__) +#define __GMP_DECLSPEC_EXPORT __declspec(dllexport) +#define __GMP_DECLSPEC_IMPORT __declspec(dllimport) +#endif +#ifdef __WATCOMC__ +#define __GMP_DECLSPEC_EXPORT __export +#define __GMP_DECLSPEC_IMPORT __import +#endif +#ifdef __IBMC__ +#define __GMP_DECLSPEC_EXPORT _Export +#define __GMP_DECLSPEC_IMPORT _Import +#endif + +#if __GMP_LIBGMP_DLL +#ifdef __GMP_WITHIN_GMP +/* compiling to go into a DLL libgmp */ +#define __GMP_DECLSPEC __GMP_DECLSPEC_EXPORT +#else +/* compiling to go into an application which will link to a DLL libgmp */ +#define __GMP_DECLSPEC __GMP_DECLSPEC_IMPORT +#endif +#else +/* all other cases */ +#define __GMP_DECLSPEC +#endif + + +#ifdef __GMP_SHORT_LIMB +typedef unsigned int mp_limb_t; +typedef int mp_limb_signed_t; +#else +#ifdef _LONG_LONG_LIMB +typedef unsigned long long int mp_limb_t; +typedef long long int mp_limb_signed_t; +#else +typedef unsigned long int mp_limb_t; +typedef long int mp_limb_signed_t; +#endif +#endif +typedef unsigned long int mp_bitcnt_t; + +/* For reference, note that the name __mpz_struct gets into C++ mangled + function names, which means although the "__" suggests an internal, we + must leave this name for binary compatibility. */ +typedef struct +{ + int _mp_alloc; /* Number of *limbs* allocated and pointed + to by the _mp_d field. */ + int _mp_size; /* abs(_mp_size) is the number of limbs the + last field points to. If _mp_size is + negative this is a negative number. */ + mp_limb_t *_mp_d; /* Pointer to the limbs. */ +} __mpz_struct; + +#endif /* __GNU_MP__ */ + + +typedef __mpz_struct MP_INT; /* gmp 1 source compatibility */ +typedef __mpz_struct mpz_t[1]; + +typedef mp_limb_t * mp_ptr; +typedef const mp_limb_t * mp_srcptr; +#if defined (_CRAY) && ! defined (_CRAYMPP) +/* plain `int' is much faster (48 bits) */ +#define __GMP_MP_SIZE_T_INT 1 +typedef int mp_size_t; +typedef int mp_exp_t; +#else +#define __GMP_MP_SIZE_T_INT 0 +typedef long int mp_size_t; +typedef long int mp_exp_t; +#endif + +typedef struct +{ + __mpz_struct _mp_num; + __mpz_struct _mp_den; +} __mpq_struct; + +typedef __mpq_struct MP_RAT; /* gmp 1 source compatibility */ +typedef __mpq_struct mpq_t[1]; + +typedef struct +{ + int _mp_prec; /* Max precision, in number of `mp_limb_t's. + Set by mpf_init and modified by + mpf_set_prec. The area pointed to by the + _mp_d field contains `prec' + 1 limbs. */ + int _mp_size; /* abs(_mp_size) is the number of limbs the + last field points to. If _mp_size is + negative this is a negative number. */ + mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */ + mp_limb_t *_mp_d; /* Pointer to the limbs. */ +} __mpf_struct; + +/* typedef __mpf_struct MP_FLOAT; */ +typedef __mpf_struct mpf_t[1]; + +/* Available random number generation algorithms. */ +typedef enum +{ + GMP_RAND_ALG_DEFAULT = 0, + GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT /* Linear congruential. */ +} gmp_randalg_t; + +/* Random state struct. */ +typedef struct +{ + mpz_t _mp_seed; /* _mp_d member points to state of the generator. */ + gmp_randalg_t _mp_alg; /* Currently unused. */ + union { + void *_mp_lc; /* Pointer to function pointers structure. */ + } _mp_algdata; +} __gmp_randstate_struct; +typedef __gmp_randstate_struct gmp_randstate_t[1]; + +/* Types for function declarations in gmp files. */ +/* ??? Should not pollute user name space with these ??? */ +typedef const __mpz_struct *mpz_srcptr; +typedef __mpz_struct *mpz_ptr; +typedef const __mpf_struct *mpf_srcptr; +typedef __mpf_struct *mpf_ptr; +typedef const __mpq_struct *mpq_srcptr; +typedef __mpq_struct *mpq_ptr; +typedef __gmp_randstate_struct *gmp_randstate_ptr; +typedef const __gmp_randstate_struct *gmp_randstate_srcptr; + + +#if __GMP_LIBGMP_DLL +#ifdef __GMP_WITHIN_GMPXX +/* compiling to go into a DLL libgmpxx */ +#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_EXPORT +#else +/* compiling to go into a application which will link to a DLL libgmpxx */ +#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_IMPORT +#endif +#else +/* all other cases */ +#define __GMP_DECLSPEC_XX +#endif + + +#ifndef __MPN +#define __MPN(x) __gmpn_##x +#endif + +/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, + defines EOF but not FILE. */ +#if defined (FILE) \ + || defined (H_STDIO) \ + || defined (_H_STDIO) /* AIX */ \ + || defined (_STDIO_H) /* glibc, Sun, SCO */ \ + || defined (_STDIO_H_) /* BSD, OSF */ \ + || defined (__STDIO_H) /* Borland */ \ + || defined (__STDIO_H__) /* IRIX */ \ + || defined (_STDIO_INCLUDED) /* HPUX */ \ + || defined (__dj_include_stdio_h_) /* DJGPP */ \ + || defined (_FILE_DEFINED) /* Microsoft */ \ + || defined (__STDIO__) /* Apple MPW MrC */ \ + || defined (_MSL_STDIO_H) /* Metrowerks */ \ + || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ + || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ \ + || defined (__STDIO_LOADED) /* VMS */ \ + || defined (_STDIO) /* HPE NonStop */ \ + || defined (__DEFINED_FILE) /* musl */ +#define _GMP_H_HAVE_FILE 1 +#endif + +/* In ISO C, if a prototype involving "struct obstack *" is given without + that structure defined, then the struct is scoped down to just the + prototype, causing a conflict if it's subsequently defined for real. So + only give prototypes if we've got obstack.h. */ +#if defined (_OBSTACK_H) /* glibc */ +#define _GMP_H_HAVE_OBSTACK 1 +#endif + +/* The prototypes for gmp_vprintf etc are provided only if va_list is defined, + via an application having included . Usually va_list is a typedef + so can't be tested directly, but C99 specifies that va_start is a macro. + + will define some sort of va_list for vprintf and vfprintf, but + let's not bother trying to use that since it's not standard and since + application uses for gmp_vprintf etc will almost certainly require the + whole anyway. */ + +#ifdef va_start +#define _GMP_H_HAVE_VA_LIST 1 +#endif + +/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ +#if defined (__GNUC__) && defined (__GNUC_MINOR__) +#define __GMP_GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +#else +#define __GMP_GNUC_PREREQ(maj, min) 0 +#endif + +/* "pure" is in gcc 2.96 and up, see "(gcc)Function Attributes". Basically + it means a function does nothing but examine its arguments and memory + (global or via arguments) to generate a return value, but changes nothing + and has no side-effects. __GMP_NO_ATTRIBUTE_CONST_PURE lets + tune/common.c etc turn this off when trying to write timing loops. */ +#if __GMP_GNUC_PREREQ (2,96) && ! defined (__GMP_NO_ATTRIBUTE_CONST_PURE) +#define __GMP_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +#define __GMP_ATTRIBUTE_PURE +#endif + + +/* __GMP_CAST allows us to use static_cast in C++, so our macros are clean + to "g++ -Wold-style-cast". + + Casts in "extern inline" code within an extern "C" block don't induce + these warnings, so __GMP_CAST only needs to be used on documented + macros. */ + +#ifdef __cplusplus +#define __GMP_CAST(type, expr) (static_cast (expr)) +#else +#define __GMP_CAST(type, expr) ((type) (expr)) +#endif + + +/* An empty "throw ()" means the function doesn't throw any C++ exceptions, + this can save some stack frame info in applications. + + Currently it's given only on functions which never divide-by-zero etc, + don't allocate memory, and are expected to never need to allocate memory. + This leaves open the possibility of a C++ throw from a future GMP + exceptions scheme. + + mpz_set_ui etc are omitted to leave open the lazy allocation scheme + described in doc/tasks.html. mpz_get_d etc are omitted to leave open + exceptions for float overflows. + + Note that __GMP_NOTHROW must be given on any inlines the same as on their + prototypes (for g++ at least, where they're used together). Note also + that g++ 3.0 demands that __GMP_NOTHROW is before other attributes like + __GMP_ATTRIBUTE_PURE. */ + +#if defined (__cplusplus) +#if __cplusplus >= 201103L +#define __GMP_NOTHROW noexcept +#else +#define __GMP_NOTHROW throw () +#endif +#else +#define __GMP_NOTHROW +#endif + + +/* PORTME: What other compilers have a useful "extern inline"? "static + inline" would be an acceptable substitute if the compiler (or linker) + discards unused statics. */ + + /* gcc has __inline__ in all modes, including strict ansi. Give a prototype + for an inline too, so as to correctly specify "dllimport" on windows, in + case the function is called rather than inlined. + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. */ +#ifdef __GNUC__ +#if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2) \ + || (defined __GNUC_GNU_INLINE__ && defined __cplusplus) +#define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__gnu_inline__)) +#else +#define __GMP_EXTERN_INLINE extern __inline__ +#endif +#define __GMP_INLINE_PROTOTYPES 1 +#endif + +/* DEC C (eg. version 5.9) supports "static __inline foo()", even in -std1 + strict ANSI mode. Inlining is done even when not optimizing (ie. -O0 + mode, which is the default), but an unnecessary local copy of foo is + emitted unless -O is used. "extern __inline" is accepted, but the + "extern" appears to be ignored, ie. it becomes a plain global function + but which is inlined within its file. Don't know if all old versions of + DEC C supported __inline, but as a start let's do the right thing for + current versions. */ +#ifdef __DECC +#define __GMP_EXTERN_INLINE static __inline +#endif + +/* SCO OpenUNIX 8 cc supports "static inline foo()" but not in -Xc strict + ANSI mode (__STDC__ is 1 in that mode). Inlining only actually takes + place under -O. Without -O "foo" seems to be emitted whether it's used + or not, which is wasteful. "extern inline foo()" isn't useful, the + "extern" is apparently ignored, so foo is inlined if possible but also + emitted as a global, which causes multiple definition errors when + building a shared libgmp. */ +#ifdef __SCO_VERSION__ +#if __SCO_VERSION__ > 400000000 && __STDC__ != 1 \ + && ! defined (__GMP_EXTERN_INLINE) +#define __GMP_EXTERN_INLINE static inline +#endif +#endif + +/* Microsoft's C compiler accepts __inline */ +#ifdef _MSC_VER +#define __GMP_EXTERN_INLINE __inline +#endif + +/* Recent enough Sun C compilers want "inline" */ +#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x560 \ + && ! defined (__GMP_EXTERN_INLINE) +#define __GMP_EXTERN_INLINE inline +#endif + +/* Somewhat older Sun C compilers want "static inline" */ +#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x540 \ + && ! defined (__GMP_EXTERN_INLINE) +#define __GMP_EXTERN_INLINE static inline +#endif + + +/* C++ always has "inline" and since it's a normal feature the linker should + discard duplicate non-inlined copies, or if it doesn't then that's a + problem for everyone, not just GMP. */ +#if defined (__cplusplus) && ! defined (__GMP_EXTERN_INLINE) +#define __GMP_EXTERN_INLINE inline +#endif + +/* Don't do any inlining within a configure run, since if the compiler ends + up emitting copies of the code into the object file it can end up + demanding the various support routines (like mpn_popcount) for linking, + making the "alloca" test and perhaps others fail. And on hppa ia64 a + pre-release gcc 3.2 was seen not respecting the "extern" in "extern + __inline__", triggering this problem too. */ +#if defined (__GMP_WITHIN_CONFIGURE) && ! __GMP_WITHIN_CONFIGURE_INLINE +#undef __GMP_EXTERN_INLINE +#endif + +/* By default, don't give a prototype when there's going to be an inline + version. Note in particular that Cray C++ objects to the combination of + prototype and inline. */ +#ifdef __GMP_EXTERN_INLINE +#ifndef __GMP_INLINE_PROTOTYPES +#define __GMP_INLINE_PROTOTYPES 0 +#endif +#else +#define __GMP_INLINE_PROTOTYPES 1 +#endif + + +#define __GMP_ABS(x) ((x) >= 0 ? (x) : -(x)) +#define __GMP_MAX(h,i) ((h) > (i) ? (h) : (i)) + + +/* __builtin_expect is in gcc 3.0, and not in 2.95. */ +#if __GMP_GNUC_PREREQ (3,0) +#define __GMP_LIKELY(cond) __builtin_expect ((cond) != 0, 1) +#define __GMP_UNLIKELY(cond) __builtin_expect ((cond) != 0, 0) +#else +#define __GMP_LIKELY(cond) (cond) +#define __GMP_UNLIKELY(cond) (cond) +#endif + +#ifdef _CRAY +#define __GMP_CRAY_Pragma(str) _Pragma (str) +#else +#define __GMP_CRAY_Pragma(str) +#endif + + +/* Allow direct user access to numerator and denominator of an mpq_t object. */ +#define mpq_numref(Q) (&((Q)->_mp_num)) +#define mpq_denref(Q) (&((Q)->_mp_den)) + + +#if defined (__cplusplus) +extern "C" { +using std::FILE; +#endif + +#define mp_set_memory_functions __gmp_set_memory_functions +__GMP_DECLSPEC void mp_set_memory_functions (void *(*) (size_t), + void *(*) (void *, size_t, size_t), + void (*) (void *, size_t)) __GMP_NOTHROW; + +#define mp_get_memory_functions __gmp_get_memory_functions +__GMP_DECLSPEC void mp_get_memory_functions (void *(**) (size_t), + void *(**) (void *, size_t, size_t), + void (**) (void *, size_t)) __GMP_NOTHROW; + +#define mp_bits_per_limb __gmp_bits_per_limb +__GMP_DECLSPEC extern const int mp_bits_per_limb; + +#define gmp_errno __gmp_errno +__GMP_DECLSPEC extern int gmp_errno; + +#define gmp_version __gmp_version +__GMP_DECLSPEC extern const char * const gmp_version; + + +/**************** Random number routines. ****************/ + +/* obsolete */ +#define gmp_randinit __gmp_randinit +__GMP_DECLSPEC void gmp_randinit (gmp_randstate_ptr, gmp_randalg_t, ...); + +#define gmp_randinit_default __gmp_randinit_default +__GMP_DECLSPEC void gmp_randinit_default (gmp_randstate_ptr); + +#define gmp_randinit_lc_2exp __gmp_randinit_lc_2exp +__GMP_DECLSPEC void gmp_randinit_lc_2exp (gmp_randstate_ptr, mpz_srcptr, unsigned long int, mp_bitcnt_t); + +#define gmp_randinit_lc_2exp_size __gmp_randinit_lc_2exp_size +__GMP_DECLSPEC int gmp_randinit_lc_2exp_size (gmp_randstate_ptr, mp_bitcnt_t); + +#define gmp_randinit_mt __gmp_randinit_mt +__GMP_DECLSPEC void gmp_randinit_mt (gmp_randstate_ptr); + +#define gmp_randinit_set __gmp_randinit_set +__GMP_DECLSPEC void gmp_randinit_set (gmp_randstate_ptr, gmp_randstate_srcptr); + +#define gmp_randseed __gmp_randseed +__GMP_DECLSPEC void gmp_randseed (gmp_randstate_ptr, mpz_srcptr); + +#define gmp_randseed_ui __gmp_randseed_ui +__GMP_DECLSPEC void gmp_randseed_ui (gmp_randstate_ptr, unsigned long int); + +#define gmp_randclear __gmp_randclear +__GMP_DECLSPEC void gmp_randclear (gmp_randstate_ptr); + +#define gmp_urandomb_ui __gmp_urandomb_ui +__GMP_DECLSPEC unsigned long gmp_urandomb_ui (gmp_randstate_ptr, unsigned long); + +#define gmp_urandomm_ui __gmp_urandomm_ui +__GMP_DECLSPEC unsigned long gmp_urandomm_ui (gmp_randstate_ptr, unsigned long); + + +/**************** Formatted output routines. ****************/ + +#define gmp_asprintf __gmp_asprintf +__GMP_DECLSPEC int gmp_asprintf (char **, const char *, ...); + +#define gmp_fprintf __gmp_fprintf +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC int gmp_fprintf (FILE *, const char *, ...); +#endif + +#define gmp_obstack_printf __gmp_obstack_printf +#if defined (_GMP_H_HAVE_OBSTACK) +__GMP_DECLSPEC int gmp_obstack_printf (struct obstack *, const char *, ...); +#endif + +#define gmp_obstack_vprintf __gmp_obstack_vprintf +#if defined (_GMP_H_HAVE_OBSTACK) && defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_obstack_vprintf (struct obstack *, const char *, va_list); +#endif + +#define gmp_printf __gmp_printf +__GMP_DECLSPEC int gmp_printf (const char *, ...); + +#define gmp_snprintf __gmp_snprintf +__GMP_DECLSPEC int gmp_snprintf (char *, size_t, const char *, ...); + +#define gmp_sprintf __gmp_sprintf +__GMP_DECLSPEC int gmp_sprintf (char *, const char *, ...); + +#define gmp_vasprintf __gmp_vasprintf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vasprintf (char **, const char *, va_list); +#endif + +#define gmp_vfprintf __gmp_vfprintf +#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vfprintf (FILE *, const char *, va_list); +#endif + +#define gmp_vprintf __gmp_vprintf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vprintf (const char *, va_list); +#endif + +#define gmp_vsnprintf __gmp_vsnprintf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vsnprintf (char *, size_t, const char *, va_list); +#endif + +#define gmp_vsprintf __gmp_vsprintf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vsprintf (char *, const char *, va_list); +#endif + + +/**************** Formatted input routines. ****************/ + +#define gmp_fscanf __gmp_fscanf +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC int gmp_fscanf (FILE *, const char *, ...); +#endif + +#define gmp_scanf __gmp_scanf +__GMP_DECLSPEC int gmp_scanf (const char *, ...); + +#define gmp_sscanf __gmp_sscanf +__GMP_DECLSPEC int gmp_sscanf (const char *, const char *, ...); + +#define gmp_vfscanf __gmp_vfscanf +#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vfscanf (FILE *, const char *, va_list); +#endif + +#define gmp_vscanf __gmp_vscanf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vscanf (const char *, va_list); +#endif + +#define gmp_vsscanf __gmp_vsscanf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vsscanf (const char *, const char *, va_list); +#endif + + +/**************** Integer (i.e. Z) routines. ****************/ + +#define _mpz_realloc __gmpz_realloc +#define mpz_realloc __gmpz_realloc +__GMP_DECLSPEC void *_mpz_realloc (mpz_ptr, mp_size_t); + +#define mpz_abs __gmpz_abs +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_abs) +__GMP_DECLSPEC void mpz_abs (mpz_ptr, mpz_srcptr); +#endif + +#define mpz_add __gmpz_add +__GMP_DECLSPEC void mpz_add (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_add_ui __gmpz_add_ui +__GMP_DECLSPEC void mpz_add_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_addmul __gmpz_addmul +__GMP_DECLSPEC void mpz_addmul (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_addmul_ui __gmpz_addmul_ui +__GMP_DECLSPEC void mpz_addmul_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_and __gmpz_and +__GMP_DECLSPEC void mpz_and (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_array_init __gmpz_array_init +__GMP_DECLSPEC void mpz_array_init (mpz_ptr, mp_size_t, mp_size_t); + +#define mpz_bin_ui __gmpz_bin_ui +__GMP_DECLSPEC void mpz_bin_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_bin_uiui __gmpz_bin_uiui +__GMP_DECLSPEC void mpz_bin_uiui (mpz_ptr, unsigned long int, unsigned long int); + +#define mpz_cdiv_q __gmpz_cdiv_q +__GMP_DECLSPEC void mpz_cdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_cdiv_q_2exp __gmpz_cdiv_q_2exp +__GMP_DECLSPEC void mpz_cdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); + +#define mpz_cdiv_q_ui __gmpz_cdiv_q_ui +__GMP_DECLSPEC unsigned long int mpz_cdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_cdiv_qr __gmpz_cdiv_qr +__GMP_DECLSPEC void mpz_cdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_cdiv_qr_ui __gmpz_cdiv_qr_ui +__GMP_DECLSPEC unsigned long int mpz_cdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_cdiv_r __gmpz_cdiv_r +__GMP_DECLSPEC void mpz_cdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_cdiv_r_2exp __gmpz_cdiv_r_2exp +__GMP_DECLSPEC void mpz_cdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); + +#define mpz_cdiv_r_ui __gmpz_cdiv_r_ui +__GMP_DECLSPEC unsigned long int mpz_cdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_cdiv_ui __gmpz_cdiv_ui +__GMP_DECLSPEC unsigned long int mpz_cdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE; + +#define mpz_clear __gmpz_clear +__GMP_DECLSPEC void mpz_clear (mpz_ptr); + +#define mpz_clears __gmpz_clears +__GMP_DECLSPEC void mpz_clears (mpz_ptr, ...); + +#define mpz_clrbit __gmpz_clrbit +__GMP_DECLSPEC void mpz_clrbit (mpz_ptr, mp_bitcnt_t); + +#define mpz_cmp __gmpz_cmp +__GMP_DECLSPEC int mpz_cmp (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_cmp_d __gmpz_cmp_d +__GMP_DECLSPEC int mpz_cmp_d (mpz_srcptr, double) __GMP_ATTRIBUTE_PURE; + +#define _mpz_cmp_si __gmpz_cmp_si +__GMP_DECLSPEC int _mpz_cmp_si (mpz_srcptr, signed long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define _mpz_cmp_ui __gmpz_cmp_ui +__GMP_DECLSPEC int _mpz_cmp_ui (mpz_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_cmpabs __gmpz_cmpabs +__GMP_DECLSPEC int mpz_cmpabs (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_cmpabs_d __gmpz_cmpabs_d +__GMP_DECLSPEC int mpz_cmpabs_d (mpz_srcptr, double) __GMP_ATTRIBUTE_PURE; + +#define mpz_cmpabs_ui __gmpz_cmpabs_ui +__GMP_DECLSPEC int mpz_cmpabs_ui (mpz_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_com __gmpz_com +__GMP_DECLSPEC void mpz_com (mpz_ptr, mpz_srcptr); + +#define mpz_combit __gmpz_combit +__GMP_DECLSPEC void mpz_combit (mpz_ptr, mp_bitcnt_t); + +#define mpz_congruent_p __gmpz_congruent_p +__GMP_DECLSPEC int mpz_congruent_p (mpz_srcptr, mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpz_congruent_2exp_p __gmpz_congruent_2exp_p +__GMP_DECLSPEC int mpz_congruent_2exp_p (mpz_srcptr, mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_congruent_ui_p __gmpz_congruent_ui_p +__GMP_DECLSPEC int mpz_congruent_ui_p (mpz_srcptr, unsigned long, unsigned long) __GMP_ATTRIBUTE_PURE; + +#define mpz_divexact __gmpz_divexact +__GMP_DECLSPEC void mpz_divexact (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_divexact_ui __gmpz_divexact_ui +__GMP_DECLSPEC void mpz_divexact_ui (mpz_ptr, mpz_srcptr, unsigned long); + +#define mpz_divisible_p __gmpz_divisible_p +__GMP_DECLSPEC int mpz_divisible_p (mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpz_divisible_ui_p __gmpz_divisible_ui_p +__GMP_DECLSPEC int mpz_divisible_ui_p (mpz_srcptr, unsigned long) __GMP_ATTRIBUTE_PURE; + +#define mpz_divisible_2exp_p __gmpz_divisible_2exp_p +__GMP_DECLSPEC int mpz_divisible_2exp_p (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_dump __gmpz_dump +__GMP_DECLSPEC void mpz_dump (mpz_srcptr); + +#define mpz_export __gmpz_export +__GMP_DECLSPEC void *mpz_export (void *, size_t *, int, size_t, int, size_t, mpz_srcptr); + +#define mpz_fac_ui __gmpz_fac_ui +__GMP_DECLSPEC void mpz_fac_ui (mpz_ptr, unsigned long int); + +#define mpz_2fac_ui __gmpz_2fac_ui +__GMP_DECLSPEC void mpz_2fac_ui (mpz_ptr, unsigned long int); + +#define mpz_mfac_uiui __gmpz_mfac_uiui +__GMP_DECLSPEC void mpz_mfac_uiui (mpz_ptr, unsigned long int, unsigned long int); + +#define mpz_primorial_ui __gmpz_primorial_ui +__GMP_DECLSPEC void mpz_primorial_ui (mpz_ptr, unsigned long int); + +#define mpz_fdiv_q __gmpz_fdiv_q +__GMP_DECLSPEC void mpz_fdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_fdiv_q_2exp __gmpz_fdiv_q_2exp +__GMP_DECLSPEC void mpz_fdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); + +#define mpz_fdiv_q_ui __gmpz_fdiv_q_ui +__GMP_DECLSPEC unsigned long int mpz_fdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_fdiv_qr __gmpz_fdiv_qr +__GMP_DECLSPEC void mpz_fdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_fdiv_qr_ui __gmpz_fdiv_qr_ui +__GMP_DECLSPEC unsigned long int mpz_fdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_fdiv_r __gmpz_fdiv_r +__GMP_DECLSPEC void mpz_fdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_fdiv_r_2exp __gmpz_fdiv_r_2exp +__GMP_DECLSPEC void mpz_fdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); + +#define mpz_fdiv_r_ui __gmpz_fdiv_r_ui +__GMP_DECLSPEC unsigned long int mpz_fdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_fdiv_ui __gmpz_fdiv_ui +__GMP_DECLSPEC unsigned long int mpz_fdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE; + +#define mpz_fib_ui __gmpz_fib_ui +__GMP_DECLSPEC void mpz_fib_ui (mpz_ptr, unsigned long int); + +#define mpz_fib2_ui __gmpz_fib2_ui +__GMP_DECLSPEC void mpz_fib2_ui (mpz_ptr, mpz_ptr, unsigned long int); + +#define mpz_fits_sint_p __gmpz_fits_sint_p +__GMP_DECLSPEC int mpz_fits_sint_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_fits_slong_p __gmpz_fits_slong_p +__GMP_DECLSPEC int mpz_fits_slong_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_fits_sshort_p __gmpz_fits_sshort_p +__GMP_DECLSPEC int mpz_fits_sshort_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_fits_uint_p __gmpz_fits_uint_p +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_uint_p) +__GMP_DECLSPEC int mpz_fits_uint_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_fits_ulong_p __gmpz_fits_ulong_p +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ulong_p) +__GMP_DECLSPEC int mpz_fits_ulong_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_fits_ushort_p __gmpz_fits_ushort_p +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ushort_p) +__GMP_DECLSPEC int mpz_fits_ushort_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_gcd __gmpz_gcd +__GMP_DECLSPEC void mpz_gcd (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_gcd_ui __gmpz_gcd_ui +__GMP_DECLSPEC unsigned long int mpz_gcd_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_gcdext __gmpz_gcdext +__GMP_DECLSPEC void mpz_gcdext (mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_get_d __gmpz_get_d +__GMP_DECLSPEC double mpz_get_d (mpz_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpz_get_d_2exp __gmpz_get_d_2exp +__GMP_DECLSPEC double mpz_get_d_2exp (signed long int *, mpz_srcptr); + +#define mpz_get_si __gmpz_get_si +__GMP_DECLSPEC /* signed */ long int mpz_get_si (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_get_str __gmpz_get_str +__GMP_DECLSPEC char *mpz_get_str (char *, int, mpz_srcptr); + +#define mpz_get_ui __gmpz_get_ui +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_get_ui) +__GMP_DECLSPEC unsigned long int mpz_get_ui (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_getlimbn __gmpz_getlimbn +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_getlimbn) +__GMP_DECLSPEC mp_limb_t mpz_getlimbn (mpz_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_hamdist __gmpz_hamdist +__GMP_DECLSPEC mp_bitcnt_t mpz_hamdist (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_import __gmpz_import +__GMP_DECLSPEC void mpz_import (mpz_ptr, size_t, int, size_t, int, size_t, const void *); + +#define mpz_init __gmpz_init +__GMP_DECLSPEC void mpz_init (mpz_ptr) __GMP_NOTHROW; + +#define mpz_init2 __gmpz_init2 +__GMP_DECLSPEC void mpz_init2 (mpz_ptr, mp_bitcnt_t); + +#define mpz_inits __gmpz_inits +__GMP_DECLSPEC void mpz_inits (mpz_ptr, ...) __GMP_NOTHROW; + +#define mpz_init_set __gmpz_init_set +__GMP_DECLSPEC void mpz_init_set (mpz_ptr, mpz_srcptr); + +#define mpz_init_set_d __gmpz_init_set_d +__GMP_DECLSPEC void mpz_init_set_d (mpz_ptr, double); + +#define mpz_init_set_si __gmpz_init_set_si +__GMP_DECLSPEC void mpz_init_set_si (mpz_ptr, signed long int); + +#define mpz_init_set_str __gmpz_init_set_str +__GMP_DECLSPEC int mpz_init_set_str (mpz_ptr, const char *, int); + +#define mpz_init_set_ui __gmpz_init_set_ui +__GMP_DECLSPEC void mpz_init_set_ui (mpz_ptr, unsigned long int); + +#define mpz_inp_raw __gmpz_inp_raw +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpz_inp_raw (mpz_ptr, FILE *); +#endif + +#define mpz_inp_str __gmpz_inp_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpz_inp_str (mpz_ptr, FILE *, int); +#endif + +#define mpz_invert __gmpz_invert +__GMP_DECLSPEC int mpz_invert (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_ior __gmpz_ior +__GMP_DECLSPEC void mpz_ior (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_jacobi __gmpz_jacobi +__GMP_DECLSPEC int mpz_jacobi (mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpz_kronecker mpz_jacobi /* alias */ + +#define mpz_kronecker_si __gmpz_kronecker_si +__GMP_DECLSPEC int mpz_kronecker_si (mpz_srcptr, long) __GMP_ATTRIBUTE_PURE; + +#define mpz_kronecker_ui __gmpz_kronecker_ui +__GMP_DECLSPEC int mpz_kronecker_ui (mpz_srcptr, unsigned long) __GMP_ATTRIBUTE_PURE; + +#define mpz_si_kronecker __gmpz_si_kronecker +__GMP_DECLSPEC int mpz_si_kronecker (long, mpz_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpz_ui_kronecker __gmpz_ui_kronecker +__GMP_DECLSPEC int mpz_ui_kronecker (unsigned long, mpz_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpz_lcm __gmpz_lcm +__GMP_DECLSPEC void mpz_lcm (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_lcm_ui __gmpz_lcm_ui +__GMP_DECLSPEC void mpz_lcm_ui (mpz_ptr, mpz_srcptr, unsigned long); + +#define mpz_legendre mpz_jacobi /* alias */ + +#define mpz_lucnum_ui __gmpz_lucnum_ui +__GMP_DECLSPEC void mpz_lucnum_ui (mpz_ptr, unsigned long int); + +#define mpz_lucnum2_ui __gmpz_lucnum2_ui +__GMP_DECLSPEC void mpz_lucnum2_ui (mpz_ptr, mpz_ptr, unsigned long int); + +#define mpz_millerrabin __gmpz_millerrabin +__GMP_DECLSPEC int mpz_millerrabin (mpz_srcptr, int) __GMP_ATTRIBUTE_PURE; + +#define mpz_mod __gmpz_mod +__GMP_DECLSPEC void mpz_mod (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_mod_ui mpz_fdiv_r_ui /* same as fdiv_r because divisor unsigned */ + +#define mpz_mul __gmpz_mul +__GMP_DECLSPEC void mpz_mul (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_mul_2exp __gmpz_mul_2exp +__GMP_DECLSPEC void mpz_mul_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); + +#define mpz_mul_si __gmpz_mul_si +__GMP_DECLSPEC void mpz_mul_si (mpz_ptr, mpz_srcptr, long int); + +#define mpz_mul_ui __gmpz_mul_ui +__GMP_DECLSPEC void mpz_mul_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_neg __gmpz_neg +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_neg) +__GMP_DECLSPEC void mpz_neg (mpz_ptr, mpz_srcptr); +#endif + +#define mpz_nextprime __gmpz_nextprime +__GMP_DECLSPEC void mpz_nextprime (mpz_ptr, mpz_srcptr); + +#define mpz_prevprime __gmpz_prevprime +__GMP_DECLSPEC int mpz_prevprime (mpz_ptr, mpz_srcptr); + +#define mpz_out_raw __gmpz_out_raw +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpz_out_raw (FILE *, mpz_srcptr); +#endif + +#define mpz_out_str __gmpz_out_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpz_out_str (FILE *, int, mpz_srcptr); +#endif + +#define mpz_perfect_power_p __gmpz_perfect_power_p +__GMP_DECLSPEC int mpz_perfect_power_p (mpz_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpz_perfect_square_p __gmpz_perfect_square_p +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_perfect_square_p) +__GMP_DECLSPEC int mpz_perfect_square_p (mpz_srcptr) __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_popcount __gmpz_popcount +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_popcount) +__GMP_DECLSPEC mp_bitcnt_t mpz_popcount (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_pow_ui __gmpz_pow_ui +__GMP_DECLSPEC void mpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_powm __gmpz_powm +__GMP_DECLSPEC void mpz_powm (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr); + +#define mpz_powm_sec __gmpz_powm_sec +__GMP_DECLSPEC void mpz_powm_sec (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr); + +#define mpz_powm_ui __gmpz_powm_ui +__GMP_DECLSPEC void mpz_powm_ui (mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr); + +#define mpz_probab_prime_p __gmpz_probab_prime_p +__GMP_DECLSPEC int mpz_probab_prime_p (mpz_srcptr, int) __GMP_ATTRIBUTE_PURE; + +#define mpz_random __gmpz_random +__GMP_DECLSPEC void mpz_random (mpz_ptr, mp_size_t); + +#define mpz_random2 __gmpz_random2 +__GMP_DECLSPEC void mpz_random2 (mpz_ptr, mp_size_t); + +#define mpz_realloc2 __gmpz_realloc2 +__GMP_DECLSPEC void mpz_realloc2 (mpz_ptr, mp_bitcnt_t); + +#define mpz_remove __gmpz_remove +__GMP_DECLSPEC mp_bitcnt_t mpz_remove (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_root __gmpz_root +__GMP_DECLSPEC int mpz_root (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_rootrem __gmpz_rootrem +__GMP_DECLSPEC void mpz_rootrem (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_rrandomb __gmpz_rrandomb +__GMP_DECLSPEC void mpz_rrandomb (mpz_ptr, gmp_randstate_ptr, mp_bitcnt_t); + +#define mpz_scan0 __gmpz_scan0 +__GMP_DECLSPEC mp_bitcnt_t mpz_scan0 (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_scan1 __gmpz_scan1 +__GMP_DECLSPEC mp_bitcnt_t mpz_scan1 (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_set __gmpz_set +__GMP_DECLSPEC void mpz_set (mpz_ptr, mpz_srcptr); + +#define mpz_set_d __gmpz_set_d +__GMP_DECLSPEC void mpz_set_d (mpz_ptr, double); + +#define mpz_set_f __gmpz_set_f +__GMP_DECLSPEC void mpz_set_f (mpz_ptr, mpf_srcptr); + +#define mpz_set_q __gmpz_set_q +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_set_q) +__GMP_DECLSPEC void mpz_set_q (mpz_ptr, mpq_srcptr); +#endif + +#define mpz_set_si __gmpz_set_si +__GMP_DECLSPEC void mpz_set_si (mpz_ptr, signed long int); + +#define mpz_set_str __gmpz_set_str +__GMP_DECLSPEC int mpz_set_str (mpz_ptr, const char *, int); + +#define mpz_set_ui __gmpz_set_ui +__GMP_DECLSPEC void mpz_set_ui (mpz_ptr, unsigned long int); + +#define mpz_setbit __gmpz_setbit +__GMP_DECLSPEC void mpz_setbit (mpz_ptr, mp_bitcnt_t); + +#define mpz_size __gmpz_size +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_size) +__GMP_DECLSPEC size_t mpz_size (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_sizeinbase __gmpz_sizeinbase +__GMP_DECLSPEC size_t mpz_sizeinbase (mpz_srcptr, int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_sqrt __gmpz_sqrt +__GMP_DECLSPEC void mpz_sqrt (mpz_ptr, mpz_srcptr); + +#define mpz_sqrtrem __gmpz_sqrtrem +__GMP_DECLSPEC void mpz_sqrtrem (mpz_ptr, mpz_ptr, mpz_srcptr); + +#define mpz_sub __gmpz_sub +__GMP_DECLSPEC void mpz_sub (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_sub_ui __gmpz_sub_ui +__GMP_DECLSPEC void mpz_sub_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_ui_sub __gmpz_ui_sub +__GMP_DECLSPEC void mpz_ui_sub (mpz_ptr, unsigned long int, mpz_srcptr); + +#define mpz_submul __gmpz_submul +__GMP_DECLSPEC void mpz_submul (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_submul_ui __gmpz_submul_ui +__GMP_DECLSPEC void mpz_submul_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_swap __gmpz_swap +__GMP_DECLSPEC void mpz_swap (mpz_ptr, mpz_ptr) __GMP_NOTHROW; + +#define mpz_tdiv_ui __gmpz_tdiv_ui +__GMP_DECLSPEC unsigned long int mpz_tdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE; + +#define mpz_tdiv_q __gmpz_tdiv_q +__GMP_DECLSPEC void mpz_tdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_tdiv_q_2exp __gmpz_tdiv_q_2exp +__GMP_DECLSPEC void mpz_tdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); + +#define mpz_tdiv_q_ui __gmpz_tdiv_q_ui +__GMP_DECLSPEC unsigned long int mpz_tdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_tdiv_qr __gmpz_tdiv_qr +__GMP_DECLSPEC void mpz_tdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_tdiv_qr_ui __gmpz_tdiv_qr_ui +__GMP_DECLSPEC unsigned long int mpz_tdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_tdiv_r __gmpz_tdiv_r +__GMP_DECLSPEC void mpz_tdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_tdiv_r_2exp __gmpz_tdiv_r_2exp +__GMP_DECLSPEC void mpz_tdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); + +#define mpz_tdiv_r_ui __gmpz_tdiv_r_ui +__GMP_DECLSPEC unsigned long int mpz_tdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); + +#define mpz_tstbit __gmpz_tstbit +__GMP_DECLSPEC int mpz_tstbit (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_ui_pow_ui __gmpz_ui_pow_ui +__GMP_DECLSPEC void mpz_ui_pow_ui (mpz_ptr, unsigned long int, unsigned long int); + +#define mpz_urandomb __gmpz_urandomb +__GMP_DECLSPEC void mpz_urandomb (mpz_ptr, gmp_randstate_ptr, mp_bitcnt_t); + +#define mpz_urandomm __gmpz_urandomm +__GMP_DECLSPEC void mpz_urandomm (mpz_ptr, gmp_randstate_ptr, mpz_srcptr); + +#define mpz_xor __gmpz_xor +#define mpz_eor __gmpz_xor +__GMP_DECLSPEC void mpz_xor (mpz_ptr, mpz_srcptr, mpz_srcptr); + +#define mpz_limbs_read __gmpz_limbs_read +__GMP_DECLSPEC mp_srcptr mpz_limbs_read (mpz_srcptr); + +#define mpz_limbs_write __gmpz_limbs_write +__GMP_DECLSPEC mp_ptr mpz_limbs_write (mpz_ptr, mp_size_t); + +#define mpz_limbs_modify __gmpz_limbs_modify +__GMP_DECLSPEC mp_ptr mpz_limbs_modify (mpz_ptr, mp_size_t); + +#define mpz_limbs_finish __gmpz_limbs_finish +__GMP_DECLSPEC void mpz_limbs_finish (mpz_ptr, mp_size_t); + +#define mpz_roinit_n __gmpz_roinit_n +__GMP_DECLSPEC mpz_srcptr mpz_roinit_n (mpz_ptr, mp_srcptr, mp_size_t); + +#define MPZ_ROINIT_N(xp, xs) {{0, (xs),(xp) }} + +/**************** Rational (i.e. Q) routines. ****************/ + +#define mpq_abs __gmpq_abs +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_abs) +__GMP_DECLSPEC void mpq_abs (mpq_ptr, mpq_srcptr); +#endif + +#define mpq_add __gmpq_add +__GMP_DECLSPEC void mpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr); + +#define mpq_canonicalize __gmpq_canonicalize +__GMP_DECLSPEC void mpq_canonicalize (mpq_ptr); + +#define mpq_clear __gmpq_clear +__GMP_DECLSPEC void mpq_clear (mpq_ptr); + +#define mpq_clears __gmpq_clears +__GMP_DECLSPEC void mpq_clears (mpq_ptr, ...); + +#define mpq_cmp __gmpq_cmp +__GMP_DECLSPEC int mpq_cmp (mpq_srcptr, mpq_srcptr) __GMP_ATTRIBUTE_PURE; + +#define _mpq_cmp_si __gmpq_cmp_si +__GMP_DECLSPEC int _mpq_cmp_si (mpq_srcptr, long, unsigned long) __GMP_ATTRIBUTE_PURE; + +#define _mpq_cmp_ui __gmpq_cmp_ui +__GMP_DECLSPEC int _mpq_cmp_ui (mpq_srcptr, unsigned long int, unsigned long int) __GMP_ATTRIBUTE_PURE; + +#define mpq_cmp_z __gmpq_cmp_z +__GMP_DECLSPEC int mpq_cmp_z (mpq_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpq_div __gmpq_div +__GMP_DECLSPEC void mpq_div (mpq_ptr, mpq_srcptr, mpq_srcptr); + +#define mpq_div_2exp __gmpq_div_2exp +__GMP_DECLSPEC void mpq_div_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t); + +#define mpq_equal __gmpq_equal +__GMP_DECLSPEC int mpq_equal (mpq_srcptr, mpq_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpq_get_num __gmpq_get_num +__GMP_DECLSPEC void mpq_get_num (mpz_ptr, mpq_srcptr); + +#define mpq_get_den __gmpq_get_den +__GMP_DECLSPEC void mpq_get_den (mpz_ptr, mpq_srcptr); + +#define mpq_get_d __gmpq_get_d +__GMP_DECLSPEC double mpq_get_d (mpq_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpq_get_str __gmpq_get_str +__GMP_DECLSPEC char *mpq_get_str (char *, int, mpq_srcptr); + +#define mpq_init __gmpq_init +__GMP_DECLSPEC void mpq_init (mpq_ptr); + +#define mpq_inits __gmpq_inits +__GMP_DECLSPEC void mpq_inits (mpq_ptr, ...); + +#define mpq_inp_str __gmpq_inp_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpq_inp_str (mpq_ptr, FILE *, int); +#endif + +#define mpq_inv __gmpq_inv +__GMP_DECLSPEC void mpq_inv (mpq_ptr, mpq_srcptr); + +#define mpq_mul __gmpq_mul +__GMP_DECLSPEC void mpq_mul (mpq_ptr, mpq_srcptr, mpq_srcptr); + +#define mpq_mul_2exp __gmpq_mul_2exp +__GMP_DECLSPEC void mpq_mul_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t); + +#define mpq_neg __gmpq_neg +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_neg) +__GMP_DECLSPEC void mpq_neg (mpq_ptr, mpq_srcptr); +#endif + +#define mpq_out_str __gmpq_out_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpq_out_str (FILE *, int, mpq_srcptr); +#endif + +#define mpq_set __gmpq_set +__GMP_DECLSPEC void mpq_set (mpq_ptr, mpq_srcptr); + +#define mpq_set_d __gmpq_set_d +__GMP_DECLSPEC void mpq_set_d (mpq_ptr, double); + +#define mpq_set_den __gmpq_set_den +__GMP_DECLSPEC void mpq_set_den (mpq_ptr, mpz_srcptr); + +#define mpq_set_f __gmpq_set_f +__GMP_DECLSPEC void mpq_set_f (mpq_ptr, mpf_srcptr); + +#define mpq_set_num __gmpq_set_num +__GMP_DECLSPEC void mpq_set_num (mpq_ptr, mpz_srcptr); + +#define mpq_set_si __gmpq_set_si +__GMP_DECLSPEC void mpq_set_si (mpq_ptr, signed long int, unsigned long int); + +#define mpq_set_str __gmpq_set_str +__GMP_DECLSPEC int mpq_set_str (mpq_ptr, const char *, int); + +#define mpq_set_ui __gmpq_set_ui +__GMP_DECLSPEC void mpq_set_ui (mpq_ptr, unsigned long int, unsigned long int); + +#define mpq_set_z __gmpq_set_z +__GMP_DECLSPEC void mpq_set_z (mpq_ptr, mpz_srcptr); + +#define mpq_sub __gmpq_sub +__GMP_DECLSPEC void mpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr); + +#define mpq_swap __gmpq_swap +__GMP_DECLSPEC void mpq_swap (mpq_ptr, mpq_ptr) __GMP_NOTHROW; + + +/**************** Float (i.e. F) routines. ****************/ + +#define mpf_abs __gmpf_abs +__GMP_DECLSPEC void mpf_abs (mpf_ptr, mpf_srcptr); + +#define mpf_add __gmpf_add +__GMP_DECLSPEC void mpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr); + +#define mpf_add_ui __gmpf_add_ui +__GMP_DECLSPEC void mpf_add_ui (mpf_ptr, mpf_srcptr, unsigned long int); +#define mpf_ceil __gmpf_ceil +__GMP_DECLSPEC void mpf_ceil (mpf_ptr, mpf_srcptr); + +#define mpf_clear __gmpf_clear +__GMP_DECLSPEC void mpf_clear (mpf_ptr); + +#define mpf_clears __gmpf_clears +__GMP_DECLSPEC void mpf_clears (mpf_ptr, ...); + +#define mpf_cmp __gmpf_cmp +__GMP_DECLSPEC int mpf_cmp (mpf_srcptr, mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_cmp_z __gmpf_cmp_z +__GMP_DECLSPEC int mpf_cmp_z (mpf_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_cmp_d __gmpf_cmp_d +__GMP_DECLSPEC int mpf_cmp_d (mpf_srcptr, double) __GMP_ATTRIBUTE_PURE; + +#define mpf_cmp_si __gmpf_cmp_si +__GMP_DECLSPEC int mpf_cmp_si (mpf_srcptr, signed long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_cmp_ui __gmpf_cmp_ui +__GMP_DECLSPEC int mpf_cmp_ui (mpf_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_div __gmpf_div +__GMP_DECLSPEC void mpf_div (mpf_ptr, mpf_srcptr, mpf_srcptr); + +#define mpf_div_2exp __gmpf_div_2exp +__GMP_DECLSPEC void mpf_div_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t); + +#define mpf_div_ui __gmpf_div_ui +__GMP_DECLSPEC void mpf_div_ui (mpf_ptr, mpf_srcptr, unsigned long int); + +#define mpf_dump __gmpf_dump +__GMP_DECLSPEC void mpf_dump (mpf_srcptr); + +#define mpf_eq __gmpf_eq +__GMP_DECLSPEC int mpf_eq (mpf_srcptr, mpf_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_sint_p __gmpf_fits_sint_p +__GMP_DECLSPEC int mpf_fits_sint_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_slong_p __gmpf_fits_slong_p +__GMP_DECLSPEC int mpf_fits_slong_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_sshort_p __gmpf_fits_sshort_p +__GMP_DECLSPEC int mpf_fits_sshort_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_uint_p __gmpf_fits_uint_p +__GMP_DECLSPEC int mpf_fits_uint_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_ulong_p __gmpf_fits_ulong_p +__GMP_DECLSPEC int mpf_fits_ulong_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_ushort_p __gmpf_fits_ushort_p +__GMP_DECLSPEC int mpf_fits_ushort_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_floor __gmpf_floor +__GMP_DECLSPEC void mpf_floor (mpf_ptr, mpf_srcptr); + +#define mpf_get_d __gmpf_get_d +__GMP_DECLSPEC double mpf_get_d (mpf_srcptr) __GMP_ATTRIBUTE_PURE; + +#define mpf_get_d_2exp __gmpf_get_d_2exp +__GMP_DECLSPEC double mpf_get_d_2exp (signed long int *, mpf_srcptr); + +#define mpf_get_default_prec __gmpf_get_default_prec +__GMP_DECLSPEC mp_bitcnt_t mpf_get_default_prec (void) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_get_prec __gmpf_get_prec +__GMP_DECLSPEC mp_bitcnt_t mpf_get_prec (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_get_si __gmpf_get_si +__GMP_DECLSPEC long mpf_get_si (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_get_str __gmpf_get_str +__GMP_DECLSPEC char *mpf_get_str (char *, mp_exp_t *, int, size_t, mpf_srcptr); + +#define mpf_get_ui __gmpf_get_ui +__GMP_DECLSPEC unsigned long mpf_get_ui (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_init __gmpf_init +__GMP_DECLSPEC void mpf_init (mpf_ptr); + +#define mpf_init2 __gmpf_init2 +__GMP_DECLSPEC void mpf_init2 (mpf_ptr, mp_bitcnt_t); + +#define mpf_inits __gmpf_inits +__GMP_DECLSPEC void mpf_inits (mpf_ptr, ...); + +#define mpf_init_set __gmpf_init_set +__GMP_DECLSPEC void mpf_init_set (mpf_ptr, mpf_srcptr); + +#define mpf_init_set_d __gmpf_init_set_d +__GMP_DECLSPEC void mpf_init_set_d (mpf_ptr, double); + +#define mpf_init_set_si __gmpf_init_set_si +__GMP_DECLSPEC void mpf_init_set_si (mpf_ptr, signed long int); + +#define mpf_init_set_str __gmpf_init_set_str +__GMP_DECLSPEC int mpf_init_set_str (mpf_ptr, const char *, int); + +#define mpf_init_set_ui __gmpf_init_set_ui +__GMP_DECLSPEC void mpf_init_set_ui (mpf_ptr, unsigned long int); + +#define mpf_inp_str __gmpf_inp_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpf_inp_str (mpf_ptr, FILE *, int); +#endif + +#define mpf_integer_p __gmpf_integer_p +__GMP_DECLSPEC int mpf_integer_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_mul __gmpf_mul +__GMP_DECLSPEC void mpf_mul (mpf_ptr, mpf_srcptr, mpf_srcptr); + +#define mpf_mul_2exp __gmpf_mul_2exp +__GMP_DECLSPEC void mpf_mul_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t); + +#define mpf_mul_ui __gmpf_mul_ui +__GMP_DECLSPEC void mpf_mul_ui (mpf_ptr, mpf_srcptr, unsigned long int); + +#define mpf_neg __gmpf_neg +__GMP_DECLSPEC void mpf_neg (mpf_ptr, mpf_srcptr); + +#define mpf_out_str __gmpf_out_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpf_out_str (FILE *, int, size_t, mpf_srcptr); +#endif + +#define mpf_pow_ui __gmpf_pow_ui +__GMP_DECLSPEC void mpf_pow_ui (mpf_ptr, mpf_srcptr, unsigned long int); + +#define mpf_random2 __gmpf_random2 +__GMP_DECLSPEC void mpf_random2 (mpf_ptr, mp_size_t, mp_exp_t); + +#define mpf_reldiff __gmpf_reldiff +__GMP_DECLSPEC void mpf_reldiff (mpf_ptr, mpf_srcptr, mpf_srcptr); + +#define mpf_set __gmpf_set +__GMP_DECLSPEC void mpf_set (mpf_ptr, mpf_srcptr); + +#define mpf_set_d __gmpf_set_d +__GMP_DECLSPEC void mpf_set_d (mpf_ptr, double); + +#define mpf_set_default_prec __gmpf_set_default_prec +__GMP_DECLSPEC void mpf_set_default_prec (mp_bitcnt_t) __GMP_NOTHROW; + +#define mpf_set_prec __gmpf_set_prec +__GMP_DECLSPEC void mpf_set_prec (mpf_ptr, mp_bitcnt_t); + +#define mpf_set_prec_raw __gmpf_set_prec_raw +__GMP_DECLSPEC void mpf_set_prec_raw (mpf_ptr, mp_bitcnt_t) __GMP_NOTHROW; + +#define mpf_set_q __gmpf_set_q +__GMP_DECLSPEC void mpf_set_q (mpf_ptr, mpq_srcptr); + +#define mpf_set_si __gmpf_set_si +__GMP_DECLSPEC void mpf_set_si (mpf_ptr, signed long int); + +#define mpf_set_str __gmpf_set_str +__GMP_DECLSPEC int mpf_set_str (mpf_ptr, const char *, int); + +#define mpf_set_ui __gmpf_set_ui +__GMP_DECLSPEC void mpf_set_ui (mpf_ptr, unsigned long int); + +#define mpf_set_z __gmpf_set_z +__GMP_DECLSPEC void mpf_set_z (mpf_ptr, mpz_srcptr); + +#define mpf_size __gmpf_size +__GMP_DECLSPEC size_t mpf_size (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_sqrt __gmpf_sqrt +__GMP_DECLSPEC void mpf_sqrt (mpf_ptr, mpf_srcptr); + +#define mpf_sqrt_ui __gmpf_sqrt_ui +__GMP_DECLSPEC void mpf_sqrt_ui (mpf_ptr, unsigned long int); + +#define mpf_sub __gmpf_sub +__GMP_DECLSPEC void mpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr); + +#define mpf_sub_ui __gmpf_sub_ui +__GMP_DECLSPEC void mpf_sub_ui (mpf_ptr, mpf_srcptr, unsigned long int); + +#define mpf_swap __gmpf_swap +__GMP_DECLSPEC void mpf_swap (mpf_ptr, mpf_ptr) __GMP_NOTHROW; + +#define mpf_trunc __gmpf_trunc +__GMP_DECLSPEC void mpf_trunc (mpf_ptr, mpf_srcptr); + +#define mpf_ui_div __gmpf_ui_div +__GMP_DECLSPEC void mpf_ui_div (mpf_ptr, unsigned long int, mpf_srcptr); + +#define mpf_ui_sub __gmpf_ui_sub +__GMP_DECLSPEC void mpf_ui_sub (mpf_ptr, unsigned long int, mpf_srcptr); + +#define mpf_urandomb __gmpf_urandomb +__GMP_DECLSPEC void mpf_urandomb (mpf_ptr, gmp_randstate_ptr, mp_bitcnt_t); + + +/************ Low level positive-integer (i.e. N) routines. ************/ + +/* This is ugly, but we need to make user calls reach the prefixed function. */ + +#define mpn_add __MPN(add) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add) +__GMP_DECLSPEC mp_limb_t mpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); +#endif + +#define mpn_add_1 __MPN(add_1) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add_1) +__GMP_DECLSPEC mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) __GMP_NOTHROW; +#endif + +#define mpn_add_n __MPN(add_n) +__GMP_DECLSPEC mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); + +#define mpn_addmul_1 __MPN(addmul_1) +__GMP_DECLSPEC mp_limb_t mpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); + +#define mpn_cmp __MPN(cmp) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_cmp) +__GMP_DECLSPEC int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpn_zero_p __MPN(zero_p) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_zero_p) +__GMP_DECLSPEC int mpn_zero_p (mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpn_divexact_1 __MPN(divexact_1) +__GMP_DECLSPEC void mpn_divexact_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); + +#define mpn_divexact_by3(dst,src,size) \ + mpn_divexact_by3c (dst, src, size, __GMP_CAST (mp_limb_t, 0)) + +#define mpn_divexact_by3c __MPN(divexact_by3c) +__GMP_DECLSPEC mp_limb_t mpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); + +#define mpn_divmod_1(qp,np,nsize,dlimb) \ + mpn_divrem_1 (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dlimb) + +#define mpn_divrem __MPN(divrem) +__GMP_DECLSPEC mp_limb_t mpn_divrem (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); + +#define mpn_divrem_1 __MPN(divrem_1) +__GMP_DECLSPEC mp_limb_t mpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); + +#define mpn_divrem_2 __MPN(divrem_2) +__GMP_DECLSPEC mp_limb_t mpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr); + +#define mpn_div_qr_1 __MPN(div_qr_1) +__GMP_DECLSPEC mp_limb_t mpn_div_qr_1 (mp_ptr, mp_limb_t *, mp_srcptr, mp_size_t, mp_limb_t); + +#define mpn_div_qr_2 __MPN(div_qr_2) +__GMP_DECLSPEC mp_limb_t mpn_div_qr_2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); + +#define mpn_gcd __MPN(gcd) +__GMP_DECLSPEC mp_size_t mpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t); + +#define mpn_gcd_11 __MPN(gcd_11) +__GMP_DECLSPEC mp_limb_t mpn_gcd_11 (mp_limb_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_gcd_1 __MPN(gcd_1) +__GMP_DECLSPEC mp_limb_t mpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_gcdext_1 __MPN(gcdext_1) +__GMP_DECLSPEC mp_limb_t mpn_gcdext_1 (mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t); + +#define mpn_gcdext __MPN(gcdext) +__GMP_DECLSPEC mp_size_t mpn_gcdext (mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t); + +#define mpn_get_str __MPN(get_str) +__GMP_DECLSPEC size_t mpn_get_str (unsigned char *, int, mp_ptr, mp_size_t); + +#define mpn_hamdist __MPN(hamdist) +__GMP_DECLSPEC mp_bitcnt_t mpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpn_lshift __MPN(lshift) +__GMP_DECLSPEC mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); + +#define mpn_mod_1 __MPN(mod_1) +__GMP_DECLSPEC mp_limb_t mpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_mul __MPN(mul) +__GMP_DECLSPEC mp_limb_t mpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); + +#define mpn_mul_1 __MPN(mul_1) +__GMP_DECLSPEC mp_limb_t mpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); + +#define mpn_mul_n __MPN(mul_n) +__GMP_DECLSPEC void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); + +#define mpn_sqr __MPN(sqr) +__GMP_DECLSPEC void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t); + +#define mpn_neg __MPN(neg) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_neg) +__GMP_DECLSPEC mp_limb_t mpn_neg (mp_ptr, mp_srcptr, mp_size_t); +#endif + +#define mpn_com __MPN(com) +__GMP_DECLSPEC void mpn_com (mp_ptr, mp_srcptr, mp_size_t); + +#define mpn_perfect_square_p __MPN(perfect_square_p) +__GMP_DECLSPEC int mpn_perfect_square_p (mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_perfect_power_p __MPN(perfect_power_p) +__GMP_DECLSPEC int mpn_perfect_power_p (mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_popcount __MPN(popcount) +__GMP_DECLSPEC mp_bitcnt_t mpn_popcount (mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpn_pow_1 __MPN(pow_1) +__GMP_DECLSPEC mp_size_t mpn_pow_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); + +/* undocumented now, but retained here for upward compatibility */ +#define mpn_preinv_mod_1 __MPN(preinv_mod_1) +__GMP_DECLSPEC mp_limb_t mpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_random __MPN(random) +__GMP_DECLSPEC void mpn_random (mp_ptr, mp_size_t); + +#define mpn_random2 __MPN(random2) +__GMP_DECLSPEC void mpn_random2 (mp_ptr, mp_size_t); + +#define mpn_rshift __MPN(rshift) +__GMP_DECLSPEC mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); + +#define mpn_scan0 __MPN(scan0) +__GMP_DECLSPEC mp_bitcnt_t mpn_scan0 (mp_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_scan1 __MPN(scan1) +__GMP_DECLSPEC mp_bitcnt_t mpn_scan1 (mp_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_set_str __MPN(set_str) +__GMP_DECLSPEC mp_size_t mpn_set_str (mp_ptr, const unsigned char *, size_t, int); + +#define mpn_sizeinbase __MPN(sizeinbase) +__GMP_DECLSPEC size_t mpn_sizeinbase (mp_srcptr, mp_size_t, int); + +#define mpn_sqrtrem __MPN(sqrtrem) +__GMP_DECLSPEC mp_size_t mpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t); + +#define mpn_sub __MPN(sub) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub) +__GMP_DECLSPEC mp_limb_t mpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); +#endif + +#define mpn_sub_1 __MPN(sub_1) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub_1) +__GMP_DECLSPEC mp_limb_t mpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) __GMP_NOTHROW; +#endif + +#define mpn_sub_n __MPN(sub_n) +__GMP_DECLSPEC mp_limb_t mpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); + +#define mpn_submul_1 __MPN(submul_1) +__GMP_DECLSPEC mp_limb_t mpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); + +#define mpn_tdiv_qr __MPN(tdiv_qr) +__GMP_DECLSPEC void mpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); + +#define mpn_and_n __MPN(and_n) +__GMP_DECLSPEC void mpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +#define mpn_andn_n __MPN(andn_n) +__GMP_DECLSPEC void mpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +#define mpn_nand_n __MPN(nand_n) +__GMP_DECLSPEC void mpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +#define mpn_ior_n __MPN(ior_n) +__GMP_DECLSPEC void mpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +#define mpn_iorn_n __MPN(iorn_n) +__GMP_DECLSPEC void mpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +#define mpn_nior_n __MPN(nior_n) +__GMP_DECLSPEC void mpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +#define mpn_xor_n __MPN(xor_n) +__GMP_DECLSPEC void mpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +#define mpn_xnor_n __MPN(xnor_n) +__GMP_DECLSPEC void mpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); + +#define mpn_copyi __MPN(copyi) +__GMP_DECLSPEC void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t); +#define mpn_copyd __MPN(copyd) +__GMP_DECLSPEC void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t); +#define mpn_zero __MPN(zero) +__GMP_DECLSPEC void mpn_zero (mp_ptr, mp_size_t); + +#define mpn_cnd_add_n __MPN(cnd_add_n) +__GMP_DECLSPEC mp_limb_t mpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); +#define mpn_cnd_sub_n __MPN(cnd_sub_n) +__GMP_DECLSPEC mp_limb_t mpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); + +#define mpn_sec_add_1 __MPN(sec_add_1) +__GMP_DECLSPEC mp_limb_t mpn_sec_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); +#define mpn_sec_add_1_itch __MPN(sec_add_1_itch) +__GMP_DECLSPEC mp_size_t mpn_sec_add_1_itch (mp_size_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_sec_sub_1 __MPN(sec_sub_1) +__GMP_DECLSPEC mp_limb_t mpn_sec_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); +#define mpn_sec_sub_1_itch __MPN(sec_sub_1_itch) +__GMP_DECLSPEC mp_size_t mpn_sec_sub_1_itch (mp_size_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_cnd_swap __MPN(cnd_swap) +__GMP_DECLSPEC void mpn_cnd_swap (mp_limb_t, volatile mp_limb_t *, volatile mp_limb_t *, mp_size_t); + +#define mpn_sec_mul __MPN(sec_mul) +__GMP_DECLSPEC void mpn_sec_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); +#define mpn_sec_mul_itch __MPN(sec_mul_itch) +__GMP_DECLSPEC mp_size_t mpn_sec_mul_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_sec_sqr __MPN(sec_sqr) +__GMP_DECLSPEC void mpn_sec_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); +#define mpn_sec_sqr_itch __MPN(sec_sqr_itch) +__GMP_DECLSPEC mp_size_t mpn_sec_sqr_itch (mp_size_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_sec_powm __MPN(sec_powm) +__GMP_DECLSPEC void mpn_sec_powm (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_bitcnt_t, mp_srcptr, mp_size_t, mp_ptr); +#define mpn_sec_powm_itch __MPN(sec_powm_itch) +__GMP_DECLSPEC mp_size_t mpn_sec_powm_itch (mp_size_t, mp_bitcnt_t, mp_size_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_sec_tabselect __MPN(sec_tabselect) +__GMP_DECLSPEC void mpn_sec_tabselect (volatile mp_limb_t *, volatile const mp_limb_t *, mp_size_t, mp_size_t, mp_size_t); + +#define mpn_sec_div_qr __MPN(sec_div_qr) +__GMP_DECLSPEC mp_limb_t mpn_sec_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); +#define mpn_sec_div_qr_itch __MPN(sec_div_qr_itch) +__GMP_DECLSPEC mp_size_t mpn_sec_div_qr_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE; +#define mpn_sec_div_r __MPN(sec_div_r) +__GMP_DECLSPEC void mpn_sec_div_r (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); +#define mpn_sec_div_r_itch __MPN(sec_div_r_itch) +__GMP_DECLSPEC mp_size_t mpn_sec_div_r_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE; + +#define mpn_sec_invert __MPN(sec_invert) +__GMP_DECLSPEC int mpn_sec_invert (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_bitcnt_t, mp_ptr); +#define mpn_sec_invert_itch __MPN(sec_invert_itch) +__GMP_DECLSPEC mp_size_t mpn_sec_invert_itch (mp_size_t) __GMP_ATTRIBUTE_PURE; + + +/**************** mpz inlines ****************/ + +/* The following are provided as inlines where possible, but always exist as + library functions too, for binary compatibility. + + Within gmp itself this inlining generally isn't relied on, since it + doesn't get done for all compilers, whereas if something is worth + inlining then it's worth arranging always. + + There are two styles of inlining here. When the same bit of code is + wanted for the inline as for the library version, then __GMP_FORCE_foo + arranges for that code to be emitted and the __GMP_EXTERN_INLINE + directive suppressed, eg. mpz_fits_uint_p. When a different bit of code + is wanted for the inline than for the library version, then + __GMP_FORCE_foo arranges the inline to be suppressed, eg. mpz_abs. */ + +#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_abs) +__GMP_EXTERN_INLINE void +mpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) +{ + if (__gmp_w != __gmp_u) + mpz_set (__gmp_w, __gmp_u); + __gmp_w->_mp_size = __GMP_ABS (__gmp_w->_mp_size); +} +#endif + +#if GMP_NAIL_BITS == 0 +#define __GMPZ_FITS_UTYPE_P(z,maxval) \ + mp_size_t __gmp_n = z->_mp_size; \ + mp_ptr __gmp_p = z->_mp_d; \ + return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval)); +#else +#define __GMPZ_FITS_UTYPE_P(z,maxval) \ + mp_size_t __gmp_n = z->_mp_size; \ + mp_ptr __gmp_p = z->_mp_d; \ + return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval) \ + || (__gmp_n == 2 && __gmp_p[1] <= ((mp_limb_t) maxval >> GMP_NUMB_BITS))); +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_uint_p) +#if ! defined (__GMP_FORCE_mpz_fits_uint_p) +__GMP_EXTERN_INLINE +#endif +int +mpz_fits_uint_p (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + __GMPZ_FITS_UTYPE_P (__gmp_z, UINT_MAX); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ulong_p) +#if ! defined (__GMP_FORCE_mpz_fits_ulong_p) +__GMP_EXTERN_INLINE +#endif +int +mpz_fits_ulong_p (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + __GMPZ_FITS_UTYPE_P (__gmp_z, ULONG_MAX); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ushort_p) +#if ! defined (__GMP_FORCE_mpz_fits_ushort_p) +__GMP_EXTERN_INLINE +#endif +int +mpz_fits_ushort_p (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + __GMPZ_FITS_UTYPE_P (__gmp_z, USHRT_MAX); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_get_ui) +#if ! defined (__GMP_FORCE_mpz_get_ui) +__GMP_EXTERN_INLINE +#endif +unsigned long +mpz_get_ui (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + mp_ptr __gmp_p = __gmp_z->_mp_d; + mp_size_t __gmp_n = __gmp_z->_mp_size; + mp_limb_t __gmp_l = __gmp_p[0]; + /* This is a "#if" rather than a plain "if" so as to avoid gcc warnings + about "<< GMP_NUMB_BITS" exceeding the type size, and to avoid Borland + C++ 6.0 warnings about condition always true for something like + "ULONG_MAX < GMP_NUMB_MASK". */ +#if GMP_NAIL_BITS == 0 || defined (_LONG_LONG_LIMB) + /* limb==long and no nails, or limb==longlong, one limb is enough */ + return (__gmp_n != 0 ? __gmp_l : 0); +#else + /* limb==long and nails, need two limbs when available */ + __gmp_n = __GMP_ABS (__gmp_n); + if (__gmp_n <= 1) + return (__gmp_n != 0 ? __gmp_l : 0); + else + return __gmp_l + (__gmp_p[1] << GMP_NUMB_BITS); +#endif +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_getlimbn) +#if ! defined (__GMP_FORCE_mpz_getlimbn) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) __GMP_NOTHROW +{ + mp_limb_t __gmp_result = 0; + if (__GMP_LIKELY (__gmp_n >= 0 && __gmp_n < __GMP_ABS (__gmp_z->_mp_size))) + __gmp_result = __gmp_z->_mp_d[__gmp_n]; + return __gmp_result; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_neg) +__GMP_EXTERN_INLINE void +mpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) +{ + if (__gmp_w != __gmp_u) + mpz_set (__gmp_w, __gmp_u); + __gmp_w->_mp_size = - __gmp_w->_mp_size; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_perfect_square_p) +#if ! defined (__GMP_FORCE_mpz_perfect_square_p) +__GMP_EXTERN_INLINE +#endif +int +mpz_perfect_square_p (mpz_srcptr __gmp_a) +{ + mp_size_t __gmp_asize; + int __gmp_result; + + __gmp_asize = __gmp_a->_mp_size; + __gmp_result = (__gmp_asize >= 0); /* zero is a square, negatives are not */ + if (__GMP_LIKELY (__gmp_asize > 0)) + __gmp_result = mpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize); + return __gmp_result; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_popcount) +#if ! defined (__GMP_FORCE_mpz_popcount) +__GMP_EXTERN_INLINE +#endif +mp_bitcnt_t +mpz_popcount (mpz_srcptr __gmp_u) __GMP_NOTHROW +{ + mp_size_t __gmp_usize; + mp_bitcnt_t __gmp_result; + + __gmp_usize = __gmp_u->_mp_size; + __gmp_result = (__gmp_usize < 0 ? ~ __GMP_CAST (mp_bitcnt_t, 0) : __GMP_CAST (mp_bitcnt_t, 0)); + if (__GMP_LIKELY (__gmp_usize > 0)) + __gmp_result = mpn_popcount (__gmp_u->_mp_d, __gmp_usize); + return __gmp_result; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_set_q) +#if ! defined (__GMP_FORCE_mpz_set_q) +__GMP_EXTERN_INLINE +#endif +void +mpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u) +{ + mpz_tdiv_q (__gmp_w, mpq_numref (__gmp_u), mpq_denref (__gmp_u)); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_size) +#if ! defined (__GMP_FORCE_mpz_size) +__GMP_EXTERN_INLINE +#endif +size_t +mpz_size (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + return __GMP_ABS (__gmp_z->_mp_size); +} +#endif + + +/**************** mpq inlines ****************/ + +#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_abs) +__GMP_EXTERN_INLINE void +mpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) +{ + if (__gmp_w != __gmp_u) + mpq_set (__gmp_w, __gmp_u); + __gmp_w->_mp_num._mp_size = __GMP_ABS (__gmp_w->_mp_num._mp_size); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_neg) +__GMP_EXTERN_INLINE void +mpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) +{ + if (__gmp_w != __gmp_u) + mpq_set (__gmp_w, __gmp_u); + __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size; +} +#endif + + +/**************** mpn inlines ****************/ + +/* The comments with __GMPN_ADD_1 below apply here too. + + The test for FUNCTION returning 0 should predict well. If it's assumed + {yp,ysize} will usually have a random number of bits then the high limb + won't be full and a carry out will occur a good deal less than 50% of the + time. + + ysize==0 isn't a documented feature, but is used internally in a few + places. + + Producing cout last stops it using up a register during the main part of + the calculation, though gcc (as of 3.0) on an "if (mpn_add (...))" + doesn't seem able to move the true and false legs of the conditional up + to the two places cout is generated. */ + +#define __GMPN_AORS(cout, wp, xp, xsize, yp, ysize, FUNCTION, TEST) \ + do { \ + mp_size_t __gmp_i; \ + mp_limb_t __gmp_x; \ + \ + /* ASSERT ((ysize) >= 0); */ \ + /* ASSERT ((xsize) >= (ysize)); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, xp, xsize)); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, yp, ysize)); */ \ + \ + __gmp_i = (ysize); \ + if (__gmp_i != 0) \ + { \ + if (FUNCTION (wp, xp, yp, __gmp_i)) \ + { \ + do \ + { \ + if (__gmp_i >= (xsize)) \ + { \ + (cout) = 1; \ + goto __gmp_done; \ + } \ + __gmp_x = (xp)[__gmp_i]; \ + } \ + while (TEST); \ + } \ + } \ + if ((wp) != (xp)) \ + __GMPN_COPY_REST (wp, xp, xsize, __gmp_i); \ + (cout) = 0; \ + __gmp_done: \ + ; \ + } while (0) + +#define __GMPN_ADD(cout, wp, xp, xsize, yp, ysize) \ + __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_add_n, \ + (((wp)[__gmp_i++] = (__gmp_x + 1) & GMP_NUMB_MASK) == 0)) +#define __GMPN_SUB(cout, wp, xp, xsize, yp, ysize) \ + __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_sub_n, \ + (((wp)[__gmp_i++] = (__gmp_x - 1) & GMP_NUMB_MASK), __gmp_x == 0)) + + +/* The use of __gmp_i indexing is designed to ensure a compile time src==dst + remains nice and clear to the compiler, so that __GMPN_COPY_REST can + disappear, and the load/add/store gets a chance to become a + read-modify-write on CISC CPUs. + + Alternatives: + + Using a pair of pointers instead of indexing would be possible, but gcc + isn't able to recognise compile-time src==dst in that case, even when the + pointers are incremented more or less together. Other compilers would + very likely have similar difficulty. + + gcc could use "if (__builtin_constant_p(src==dst) && src==dst)" or + similar to detect a compile-time src==dst. This works nicely on gcc + 2.95.x, it's not good on gcc 3.0 where __builtin_constant_p(p==p) seems + to be always false, for a pointer p. But the current code form seems + good enough for src==dst anyway. + + gcc on x86 as usual doesn't give particularly good flags handling for the + carry/borrow detection. It's tempting to want some multi instruction asm + blocks to help it, and this was tried, but in truth there's only a few + instructions to save and any gain is all too easily lost by register + juggling setting up for the asm. */ + +#if GMP_NAIL_BITS == 0 +#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ + do { \ + mp_size_t __gmp_i; \ + mp_limb_t __gmp_x, __gmp_r; \ + \ + /* ASSERT ((n) >= 1); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ + \ + __gmp_x = (src)[0]; \ + __gmp_r = __gmp_x OP (v); \ + (dst)[0] = __gmp_r; \ + if (CB (__gmp_r, __gmp_x, (v))) \ + { \ + (cout) = 1; \ + for (__gmp_i = 1; __gmp_i < (n);) \ + { \ + __gmp_x = (src)[__gmp_i]; \ + __gmp_r = __gmp_x OP 1; \ + (dst)[__gmp_i] = __gmp_r; \ + ++__gmp_i; \ + if (!CB (__gmp_r, __gmp_x, 1)) \ + { \ + if ((src) != (dst)) \ + __GMPN_COPY_REST (dst, src, n, __gmp_i); \ + (cout) = 0; \ + break; \ + } \ + } \ + } \ + else \ + { \ + if ((src) != (dst)) \ + __GMPN_COPY_REST (dst, src, n, 1); \ + (cout) = 0; \ + } \ + } while (0) +#endif + +#if GMP_NAIL_BITS >= 1 +#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ + do { \ + mp_size_t __gmp_i; \ + mp_limb_t __gmp_x, __gmp_r; \ + \ + /* ASSERT ((n) >= 1); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ + \ + __gmp_x = (src)[0]; \ + __gmp_r = __gmp_x OP (v); \ + (dst)[0] = __gmp_r & GMP_NUMB_MASK; \ + if (__gmp_r >> GMP_NUMB_BITS != 0) \ + { \ + (cout) = 1; \ + for (__gmp_i = 1; __gmp_i < (n);) \ + { \ + __gmp_x = (src)[__gmp_i]; \ + __gmp_r = __gmp_x OP 1; \ + (dst)[__gmp_i] = __gmp_r & GMP_NUMB_MASK; \ + ++__gmp_i; \ + if (__gmp_r >> GMP_NUMB_BITS == 0) \ + { \ + if ((src) != (dst)) \ + __GMPN_COPY_REST (dst, src, n, __gmp_i); \ + (cout) = 0; \ + break; \ + } \ + } \ + } \ + else \ + { \ + if ((src) != (dst)) \ + __GMPN_COPY_REST (dst, src, n, 1); \ + (cout) = 0; \ + } \ + } while (0) +#endif + +#define __GMPN_ADDCB(r,x,y) ((r) < (y)) +#define __GMPN_SUBCB(r,x,y) ((x) < (y)) + +#define __GMPN_ADD_1(cout, dst, src, n, v) \ + __GMPN_AORS_1(cout, dst, src, n, v, +, __GMPN_ADDCB) +#define __GMPN_SUB_1(cout, dst, src, n, v) \ + __GMPN_AORS_1(cout, dst, src, n, v, -, __GMPN_SUBCB) + + +/* Compare {xp,size} and {yp,size}, setting "result" to positive, zero or + negative. size==0 is allowed. On random data usually only one limb will + need to be examined to get a result, so it's worth having it inline. */ +#define __GMPN_CMP(result, xp, yp, size) \ + do { \ + mp_size_t __gmp_i; \ + mp_limb_t __gmp_x, __gmp_y; \ + \ + /* ASSERT ((size) >= 0); */ \ + \ + (result) = 0; \ + __gmp_i = (size); \ + while (--__gmp_i >= 0) \ + { \ + __gmp_x = (xp)[__gmp_i]; \ + __gmp_y = (yp)[__gmp_i]; \ + if (__gmp_x != __gmp_y) \ + { \ + /* Cannot use __gmp_x - __gmp_y, may overflow an "int" */ \ + (result) = (__gmp_x > __gmp_y ? 1 : -1); \ + break; \ + } \ + } \ + } while (0) + + +#if defined (__GMPN_COPY) && ! defined (__GMPN_COPY_REST) +#define __GMPN_COPY_REST(dst, src, size, start) \ + do { \ + /* ASSERT ((start) >= 0); */ \ + /* ASSERT ((start) <= (size)); */ \ + __GMPN_COPY ((dst)+(start), (src)+(start), (size)-(start)); \ + } while (0) +#endif + +/* Copy {src,size} to {dst,size}, starting at "start". This is designed to + keep the indexing dst[j] and src[j] nice and simple for __GMPN_ADD_1, + __GMPN_ADD, etc. */ +#if ! defined (__GMPN_COPY_REST) +#define __GMPN_COPY_REST(dst, src, size, start) \ + do { \ + mp_size_t __gmp_j; \ + /* ASSERT ((size) >= 0); */ \ + /* ASSERT ((start) >= 0); */ \ + /* ASSERT ((start) <= (size)); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); */ \ + __GMP_CRAY_Pragma ("_CRI ivdep"); \ + for (__gmp_j = (start); __gmp_j < (size); __gmp_j++) \ + (dst)[__gmp_j] = (src)[__gmp_j]; \ + } while (0) +#endif + +/* Enhancement: Use some of the smarter code from gmp-impl.h. Maybe use + mpn_copyi if there's a native version, and if we don't mind demanding + binary compatibility for it (on targets which use it). */ + +#if ! defined (__GMPN_COPY) +#define __GMPN_COPY(dst, src, size) __GMPN_COPY_REST (dst, src, size, 0) +#endif + + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add) +#if ! defined (__GMP_FORCE_mpn_add) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) +{ + mp_limb_t __gmp_c; + __GMPN_ADD (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); + return __gmp_c; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add_1) +#if ! defined (__GMP_FORCE_mpn_add_1) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW +{ + mp_limb_t __gmp_c; + __GMPN_ADD_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); + return __gmp_c; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_cmp) +#if ! defined (__GMP_FORCE_mpn_cmp) +__GMP_EXTERN_INLINE +#endif +int +mpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) __GMP_NOTHROW +{ + int __gmp_result; + __GMPN_CMP (__gmp_result, __gmp_xp, __gmp_yp, __gmp_size); + return __gmp_result; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_zero_p) +#if ! defined (__GMP_FORCE_mpn_zero_p) +__GMP_EXTERN_INLINE +#endif +int +mpn_zero_p (mp_srcptr __gmp_p, mp_size_t __gmp_n) __GMP_NOTHROW +{ + /* if (__GMP_LIKELY (__gmp_n > 0)) */ + do { + if (__gmp_p[--__gmp_n] != 0) + return 0; + } while (__gmp_n != 0); + return 1; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub) +#if ! defined (__GMP_FORCE_mpn_sub) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) +{ + mp_limb_t __gmp_c; + __GMPN_SUB (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); + return __gmp_c; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub_1) +#if ! defined (__GMP_FORCE_mpn_sub_1) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW +{ + mp_limb_t __gmp_c; + __GMPN_SUB_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); + return __gmp_c; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_neg) +#if ! defined (__GMP_FORCE_mpn_neg) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n) +{ + while (*__gmp_up == 0) /* Low zero limbs are unchanged by negation. */ + { + *__gmp_rp = 0; + if (!--__gmp_n) /* All zero */ + return 0; + ++__gmp_up; ++__gmp_rp; + } + + *__gmp_rp = (- *__gmp_up) & GMP_NUMB_MASK; + + if (--__gmp_n) /* Higher limbs get complemented. */ + mpn_com (++__gmp_rp, ++__gmp_up, __gmp_n); + + return 1; +} +#endif + +#if defined (__cplusplus) +} +#endif + + +/* Allow faster testing for negative, zero, and positive. */ +#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0) +#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0) +#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0) + +/* When using GCC, optimize certain common comparisons. */ +#if defined (__GNUC__) && __GNUC__ >= 2 +#define mpz_cmp_ui(Z,UI) \ + (__builtin_constant_p (UI) && (UI) == 0 \ + ? mpz_sgn (Z) : _mpz_cmp_ui (Z,UI)) +#define mpz_cmp_si(Z,SI) \ + (__builtin_constant_p ((SI) >= 0) && (SI) >= 0 \ + ? mpz_cmp_ui (Z, __GMP_CAST (unsigned long, SI)) \ + : _mpz_cmp_si (Z,SI)) +#define mpq_cmp_ui(Q,NUI,DUI) \ + (__builtin_constant_p (NUI) && (NUI) == 0 ? mpq_sgn (Q) \ + : __builtin_constant_p ((NUI) == (DUI)) && (NUI) == (DUI) \ + ? mpz_cmp (mpq_numref (Q), mpq_denref (Q)) \ + : _mpq_cmp_ui (Q,NUI,DUI)) +#define mpq_cmp_si(q,n,d) \ + (__builtin_constant_p ((n) >= 0) && (n) >= 0 \ + ? mpq_cmp_ui (q, __GMP_CAST (unsigned long, n), d) \ + : _mpq_cmp_si (q, n, d)) +#else +#define mpz_cmp_ui(Z,UI) _mpz_cmp_ui (Z,UI) +#define mpz_cmp_si(Z,UI) _mpz_cmp_si (Z,UI) +#define mpq_cmp_ui(Q,NUI,DUI) _mpq_cmp_ui (Q,NUI,DUI) +#define mpq_cmp_si(q,n,d) _mpq_cmp_si(q,n,d) +#endif + + +/* Using "&" rather than "&&" means these can come out branch-free. Every + mpz_t has at least one limb allocated, so fetching the low limb is always + allowed. */ +#define mpz_odd_p(z) (((z)->_mp_size != 0) & __GMP_CAST (int, (z)->_mp_d[0])) +#define mpz_even_p(z) (! mpz_odd_p (z)) + + +/**************** C++ routines ****************/ + +#ifdef __cplusplus +__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpz_srcptr); +__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpq_srcptr); +__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpf_srcptr); +__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpz_ptr); +__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpq_ptr); +__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpf_ptr); +#endif + + +/* Source-level compatibility with GMP 2 and earlier. */ +#define mpn_divmod(qp,np,nsize,dp,dsize) \ + mpn_divrem (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dp, dsize) + +/* Source-level compatibility with GMP 1. */ +#define mpz_mdiv mpz_fdiv_q +#define mpz_mdivmod mpz_fdiv_qr +#define mpz_mmod mpz_fdiv_r +#define mpz_mdiv_ui mpz_fdiv_q_ui +#define mpz_mdivmod_ui(q,r,n,d) \ + (((r) == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d)) +#define mpz_mmod_ui(r,n,d) \ + (((r) == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d)) + +/* Useful synonyms, but not quite compatible with GMP 1. */ +#define mpz_div mpz_fdiv_q +#define mpz_divmod mpz_fdiv_qr +#define mpz_div_ui mpz_fdiv_q_ui +#define mpz_divmod_ui mpz_fdiv_qr_ui +#define mpz_div_2exp mpz_fdiv_q_2exp +#define mpz_mod_2exp mpz_fdiv_r_2exp + +enum +{ + GMP_ERROR_NONE = 0, + GMP_ERROR_UNSUPPORTED_ARGUMENT = 1, + GMP_ERROR_DIVISION_BY_ZERO = 2, + GMP_ERROR_SQRT_OF_NEGATIVE = 4, + GMP_ERROR_INVALID_ARGUMENT = 8, + GMP_ERROR_MPZ_OVERFLOW = 16 +}; + +/* Define CC and CFLAGS which were used to build this version of GMP */ +#define __GMP_CC "/workspace/xonotic/.tmp/misc/builddeps/emsdk/upstream/emscripten/emcc" +#define __GMP_CFLAGS "-O2 -pedantic" + +/* Major version number is the value of __GNU_MP__ too, above. */ +#define __GNU_MP_VERSION 6 +#define __GNU_MP_VERSION_MINOR 3 +#define __GNU_MP_VERSION_PATCHLEVEL 0 +#define __GNU_MP_RELEASE (__GNU_MP_VERSION * 10000 + __GNU_MP_VERSION_MINOR * 100 + __GNU_MP_VERSION_PATCHLEVEL) + +#define __GMP_H__ +#endif /* __GMP_H__ */ diff --git a/misc/builddeps/emscripten/gmp/include/gmpxx.h b/misc/builddeps/emscripten/gmp/include/gmpxx.h new file mode 100644 index 00000000..b7ed06a4 --- /dev/null +++ b/misc/builddeps/emscripten/gmp/include/gmpxx.h @@ -0,0 +1,3712 @@ +/* gmpxx.h -- C++ class wrapper for GMP types. -*- C++ -*- + +Copyright 2001-2003, 2006, 2008, 2011-2015, 2018 Free Software +Foundation, Inc. + +This file is part of the GNU MP Library. + +The GNU MP Library is free software; you can redistribute it and/or modify +it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + +or + + * the GNU General Public License as published by the Free Software + Foundation; either version 2 of the License, or (at your option) any + later version. + +or both in parallel, as here. + +The GNU MP Library is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received copies of the GNU General Public License and the +GNU Lesser General Public License along with the GNU MP Library. If not, +see https://www.gnu.org/licenses/. */ + +#ifndef __GMP_PLUSPLUS__ +#define __GMP_PLUSPLUS__ + +#include + +#include /* for strlen */ +#include /* numeric_limits */ +#include +#include /* swap */ +#include +#include +#include +#include + +// wrapper for gcc's __builtin_constant_p +// __builtin_constant_p has been in gcc since forever, +// but g++-3.4 miscompiles it. +#if __GMP_GNUC_PREREQ(4, 2) +#define __GMPXX_CONSTANT(X) __builtin_constant_p(X) +#else +#define __GMPXX_CONSTANT(X) false +#endif +#define __GMPXX_CONSTANT_TRUE(X) (__GMPXX_CONSTANT(X) && (X)) + +// Use C++11 features +#ifndef __GMPXX_USE_CXX11 +#if __cplusplus >= 201103L +#define __GMPXX_USE_CXX11 1 +#else +#define __GMPXX_USE_CXX11 0 +#endif +#endif + +#if __GMPXX_USE_CXX11 +#define __GMPXX_NOEXCEPT noexcept +#include // for common_type +#else +#define __GMPXX_NOEXCEPT +#endif + +// Max allocations for plain types when converted to GMP types +#if GMP_NAIL_BITS != 0 && ! defined _LONG_LONG_LIMB +#define __GMPZ_ULI_LIMBS 2 +#else +#define __GMPZ_ULI_LIMBS 1 +#endif + +#define __GMPXX_BITS_TO_LIMBS(n) (((n) + (GMP_NUMB_BITS - 1)) / GMP_NUMB_BITS) +#define __GMPZ_DBL_LIMBS __GMPXX_BITS_TO_LIMBS(DBL_MAX_EXP)+1 +#define __GMPQ_NUM_DBL_LIMBS __GMPZ_DBL_LIMBS +#define __GMPQ_DEN_DBL_LIMBS __GMPXX_BITS_TO_LIMBS(DBL_MANT_DIG+1-DBL_MIN_EXP)+1 +// The final +1s are a security margin. The current implementation of +// mpq_set_d seems to need it for the denominator. + +inline void __mpz_set_ui_safe(mpz_ptr p, unsigned long l) +{ + p->_mp_size = (l != 0); + p->_mp_d[0] = l & GMP_NUMB_MASK; +#if __GMPZ_ULI_LIMBS > 1 + l >>= GMP_NUMB_BITS; + p->_mp_d[1] = l; + p->_mp_size += (l != 0); +#endif +} + +inline void __mpz_set_si_safe(mpz_ptr p, long l) +{ + if(l < 0) + { + __mpz_set_ui_safe(p, -static_cast(l)); + mpz_neg(p, p); + } + else + __mpz_set_ui_safe(p, l); + // Note: we know the high bit of l is 0 so we could do slightly better +} + +// Fake temporary variables +#define __GMPXX_TMPZ_UI \ + mpz_t temp; \ + mp_limb_t limbs[__GMPZ_ULI_LIMBS]; \ + temp->_mp_d = limbs; \ + __mpz_set_ui_safe (temp, l) +#define __GMPXX_TMPZ_SI \ + mpz_t temp; \ + mp_limb_t limbs[__GMPZ_ULI_LIMBS]; \ + temp->_mp_d = limbs; \ + __mpz_set_si_safe (temp, l) +#define __GMPXX_TMPZ_D \ + mpz_t temp; \ + mp_limb_t limbs[__GMPZ_DBL_LIMBS]; \ + temp->_mp_d = limbs; \ + temp->_mp_alloc = __GMPZ_DBL_LIMBS; \ + mpz_set_d (temp, d) + +#define __GMPXX_TMPQ_UI \ + mpq_t temp; \ + mp_limb_t limbs[__GMPZ_ULI_LIMBS+1]; \ + mpq_numref(temp)->_mp_d = limbs; \ + __mpz_set_ui_safe (mpq_numref(temp), l); \ + mpq_denref(temp)->_mp_d = limbs + __GMPZ_ULI_LIMBS; \ + mpq_denref(temp)->_mp_size = 1; \ + mpq_denref(temp)->_mp_d[0] = 1 +#define __GMPXX_TMPQ_SI \ + mpq_t temp; \ + mp_limb_t limbs[__GMPZ_ULI_LIMBS+1]; \ + mpq_numref(temp)->_mp_d = limbs; \ + __mpz_set_si_safe (mpq_numref(temp), l); \ + mpq_denref(temp)->_mp_d = limbs + __GMPZ_ULI_LIMBS; \ + mpq_denref(temp)->_mp_size = 1; \ + mpq_denref(temp)->_mp_d[0] = 1 +#define __GMPXX_TMPQ_D \ + mpq_t temp; \ + mp_limb_t limbs[__GMPQ_NUM_DBL_LIMBS + __GMPQ_DEN_DBL_LIMBS]; \ + mpq_numref(temp)->_mp_d = limbs; \ + mpq_numref(temp)->_mp_alloc = __GMPQ_NUM_DBL_LIMBS; \ + mpq_denref(temp)->_mp_d = limbs + __GMPQ_NUM_DBL_LIMBS; \ + mpq_denref(temp)->_mp_alloc = __GMPQ_DEN_DBL_LIMBS; \ + mpq_set_d (temp, d) + +inline unsigned long __gmpxx_abs_ui (signed long l) +{ + return l >= 0 ? static_cast(l) + : -static_cast(l); +} + +/**************** Function objects ****************/ +/* Any evaluation of a __gmp_expr ends up calling one of these functions + all intermediate functions being inline, the evaluation should optimize + to a direct call to the relevant function, thus yielding no overhead + over the C interface. */ + +struct __gmp_unary_plus +{ + static void eval(mpz_ptr z, mpz_srcptr w) { mpz_set(z, w); } + static void eval(mpq_ptr q, mpq_srcptr r) { mpq_set(q, r); } + static void eval(mpf_ptr f, mpf_srcptr g) { mpf_set(f, g); } +}; + +struct __gmp_unary_minus +{ + static void eval(mpz_ptr z, mpz_srcptr w) { mpz_neg(z, w); } + static void eval(mpq_ptr q, mpq_srcptr r) { mpq_neg(q, r); } + static void eval(mpf_ptr f, mpf_srcptr g) { mpf_neg(f, g); } +}; + +struct __gmp_unary_com +{ + static void eval(mpz_ptr z, mpz_srcptr w) { mpz_com(z, w); } +}; + +struct __gmp_binary_plus +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_add(z, w, v); } + + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { + // Ideally, those checks should happen earlier so that the tree + // generated for a+0+b would just be sum(a,b). + if (__GMPXX_CONSTANT(l) && l == 0) + { + if (z != w) mpz_set(z, w); + } + else + mpz_add_ui(z, w, l); + } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { + if (l >= 0) + eval(z, w, static_cast(l)); + else + mpz_sub_ui(z, w, -static_cast(l)); + } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_add (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { eval(z, w, d); } + + static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) + { mpq_add(q, r, s); } + + static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) + { + if (__GMPXX_CONSTANT(l) && l == 0) + { + if (q != r) mpq_set(q, r); + } + else if (__GMPXX_CONSTANT(l) && l == 1) + { + mpz_add (mpq_numref(q), mpq_numref(r), mpq_denref(r)); + if (q != r) mpz_set(mpq_denref(q), mpq_denref(r)); + } + else + { + if (q == r) + mpz_addmul_ui(mpq_numref(q), mpq_denref(q), l); + else + { + mpz_mul_ui(mpq_numref(q), mpq_denref(r), l); + mpz_add(mpq_numref(q), mpq_numref(q), mpq_numref(r)); + mpz_set(mpq_denref(q), mpq_denref(r)); + } + } + } + static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) + { eval(q, r, l); } + static inline void eval(mpq_ptr q, mpq_srcptr r, signed long int l); + // defined after __gmp_binary_minus + static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) + { eval(q, r, l); } + static void eval(mpq_ptr q, mpq_srcptr r, double d) + { __GMPXX_TMPQ_D; mpq_add (q, r, temp); } + static void eval(mpq_ptr q, double d, mpq_srcptr r) + { eval(q, r, d); } + + static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z) + { + if (q == r) + mpz_addmul(mpq_numref(q), mpq_denref(q), z); + else + { + mpz_mul(mpq_numref(q), mpq_denref(r), z); + mpz_add(mpq_numref(q), mpq_numref(q), mpq_numref(r)); + mpz_set(mpq_denref(q), mpq_denref(r)); + } + } + static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r) + { eval(q, r, z); } + + static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) + { mpf_add(f, g, h); } + + static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) + { mpf_add_ui(f, g, l); } + static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) + { mpf_add_ui(f, g, l); } + static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) + { + if (l >= 0) + mpf_add_ui(f, g, l); + else + mpf_sub_ui(f, g, -static_cast(l)); + } + static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) + { eval(f, g, l); } + static void eval(mpf_ptr f, mpf_srcptr g, double d) + { + mpf_t temp; + mpf_init2(temp, 8*sizeof(double)); + mpf_set_d(temp, d); + mpf_add(f, g, temp); + mpf_clear(temp); + } + static void eval(mpf_ptr f, double d, mpf_srcptr g) + { eval(f, g, d); } +}; + +struct __gmp_binary_minus +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_sub(z, w, v); } + + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { + if (__GMPXX_CONSTANT(l) && l == 0) + { + if (z != w) mpz_set(z, w); + } + else + mpz_sub_ui(z, w, l); + } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { + if (__GMPXX_CONSTANT(l) && l == 0) + { + mpz_neg(z, w); + } + else + mpz_ui_sub(z, l, w); + } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { + if (l >= 0) + eval(z, w, static_cast(l)); + else + mpz_add_ui(z, w, -static_cast(l)); + } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { + if (l >= 0) + eval(z, static_cast(l), w); + else + { + mpz_add_ui(z, w, -static_cast(l)); + mpz_neg(z, z); + } + } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_sub (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { __GMPXX_TMPZ_D; mpz_sub (z, temp, w); } + + static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) + { mpq_sub(q, r, s); } + + static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) + { + if (__GMPXX_CONSTANT(l) && l == 0) + { + if (q != r) mpq_set(q, r); + } + else if (__GMPXX_CONSTANT(l) && l == 1) + { + mpz_sub (mpq_numref(q), mpq_numref(r), mpq_denref(r)); + if (q != r) mpz_set(mpq_denref(q), mpq_denref(r)); + } + else + { + if (q == r) + mpz_submul_ui(mpq_numref(q), mpq_denref(q), l); + else + { + mpz_mul_ui(mpq_numref(q), mpq_denref(r), l); + mpz_sub(mpq_numref(q), mpq_numref(r), mpq_numref(q)); + mpz_set(mpq_denref(q), mpq_denref(r)); + } + } + } + static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) + { eval(q, r, l); mpq_neg(q, q); } + static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) + { + if (l >= 0) + eval(q, r, static_cast(l)); + else + __gmp_binary_plus::eval(q, r, -static_cast(l)); + } + static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) + { eval(q, r, l); mpq_neg(q, q); } + static void eval(mpq_ptr q, mpq_srcptr r, double d) + { __GMPXX_TMPQ_D; mpq_sub (q, r, temp); } + static void eval(mpq_ptr q, double d, mpq_srcptr r) + { __GMPXX_TMPQ_D; mpq_sub (q, temp, r); } + + static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z) + { + if (q == r) + mpz_submul(mpq_numref(q), mpq_denref(q), z); + else + { + mpz_mul(mpq_numref(q), mpq_denref(r), z); + mpz_sub(mpq_numref(q), mpq_numref(r), mpq_numref(q)); + mpz_set(mpq_denref(q), mpq_denref(r)); + } + } + static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r) + { eval(q, r, z); mpq_neg(q, q); } + + static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) + { mpf_sub(f, g, h); } + + static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) + { mpf_sub_ui(f, g, l); } + static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) + { mpf_ui_sub(f, l, g); } + static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) + { + if (l >= 0) + mpf_sub_ui(f, g, l); + else + mpf_add_ui(f, g, -static_cast(l)); + } + static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) + { + if (l >= 0) + mpf_sub_ui(f, g, l); + else + mpf_add_ui(f, g, -static_cast(l)); + mpf_neg(f, f); + } + static void eval(mpf_ptr f, mpf_srcptr g, double d) + { + mpf_t temp; + mpf_init2(temp, 8*sizeof(double)); + mpf_set_d(temp, d); + mpf_sub(f, g, temp); + mpf_clear(temp); + } + static void eval(mpf_ptr f, double d, mpf_srcptr g) + { + mpf_t temp; + mpf_init2(temp, 8*sizeof(double)); + mpf_set_d(temp, d); + mpf_sub(f, temp, g); + mpf_clear(temp); + } +}; + +// defined here so it can reference __gmp_binary_minus +inline void +__gmp_binary_plus::eval(mpq_ptr q, mpq_srcptr r, signed long int l) +{ + if (l >= 0) + eval(q, r, static_cast(l)); + else + __gmp_binary_minus::eval(q, r, -static_cast(l)); +} + +struct __gmp_binary_lshift +{ + static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l) + { + if (__GMPXX_CONSTANT(l) && (l == 0)) + { + if (z != w) mpz_set(z, w); + } + else + mpz_mul_2exp(z, w, l); + } + static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l) + { + if (__GMPXX_CONSTANT(l) && (l == 0)) + { + if (q != r) mpq_set(q, r); + } + else + mpq_mul_2exp(q, r, l); + } + static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l) + { mpf_mul_2exp(f, g, l); } +}; + +struct __gmp_binary_rshift +{ + static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l) + { + if (__GMPXX_CONSTANT(l) && (l == 0)) + { + if (z != w) mpz_set(z, w); + } + else + mpz_fdiv_q_2exp(z, w, l); + } + static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l) + { + if (__GMPXX_CONSTANT(l) && (l == 0)) + { + if (q != r) mpq_set(q, r); + } + else + mpq_div_2exp(q, r, l); + } + static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l) + { mpf_div_2exp(f, g, l); } +}; + +struct __gmp_binary_multiplies +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_mul(z, w, v); } + + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { +// gcc-3.3 doesn't have __builtin_ctzl. Don't bother optimizing for old gcc. +#if __GMP_GNUC_PREREQ(3, 4) + if (__GMPXX_CONSTANT(l) && (l & (l-1)) == 0) + { + if (l == 0) + { + z->_mp_size = 0; + } + else + { + __gmp_binary_lshift::eval(z, w, __builtin_ctzl(l)); + } + } + else +#endif + mpz_mul_ui(z, w, l); + } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { + if (__GMPXX_CONSTANT_TRUE(l >= 0)) + eval(z, w, static_cast(l)); + else if (__GMPXX_CONSTANT_TRUE(l <= 0)) + { + eval(z, w, -static_cast(l)); + mpz_neg(z, z); + } + else + mpz_mul_si (z, w, l); + } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_mul (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { eval(z, w, d); } + + static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) + { mpq_mul(q, r, s); } + + static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) + { +#if __GMP_GNUC_PREREQ(3, 4) + if (__GMPXX_CONSTANT(l) && (l & (l-1)) == 0) + { + if (l == 0) + { + mpq_set_ui(q, 0, 1); + } + else + { + __gmp_binary_lshift::eval(q, r, __builtin_ctzl(l)); + } + } + else +#endif + { + __GMPXX_TMPQ_UI; + mpq_mul (q, r, temp); + } + } + static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) + { eval(q, r, l); } + static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) + { + if (__GMPXX_CONSTANT_TRUE(l >= 0)) + eval(q, r, static_cast(l)); + else if (__GMPXX_CONSTANT_TRUE(l <= 0)) + { + eval(q, r, -static_cast(l)); + mpq_neg(q, q); + } + else + { + __GMPXX_TMPQ_SI; + mpq_mul (q, r, temp); + } + } + static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) + { eval(q, r, l); } + static void eval(mpq_ptr q, mpq_srcptr r, double d) + { __GMPXX_TMPQ_D; mpq_mul (q, r, temp); } + static void eval(mpq_ptr q, double d, mpq_srcptr r) + { eval(q, r, d); } + + static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) + { mpf_mul(f, g, h); } + + static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) + { mpf_mul_ui(f, g, l); } + static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) + { mpf_mul_ui(f, g, l); } + static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) + { + if (l >= 0) + mpf_mul_ui(f, g, l); + else + { + mpf_mul_ui(f, g, -static_cast(l)); + mpf_neg(f, f); + } + } + static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) + { eval(f, g, l); } + static void eval(mpf_ptr f, mpf_srcptr g, double d) + { + mpf_t temp; + mpf_init2(temp, 8*sizeof(double)); + mpf_set_d(temp, d); + mpf_mul(f, g, temp); + mpf_clear(temp); + } + static void eval(mpf_ptr f, double d, mpf_srcptr g) + { eval(f, g, d); } +}; + +struct __gmp_binary_divides +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_tdiv_q(z, w, v); } + + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { +#if __GMP_GNUC_PREREQ(3, 4) + // Don't optimize division by 0... + if (__GMPXX_CONSTANT(l) && (l & (l-1)) == 0 && l != 0) + { + if (l == 1) + { + if (z != w) mpz_set(z, w); + } + else + mpz_tdiv_q_2exp(z, w, __builtin_ctzl(l)); + // warning: do not use rshift (fdiv) + } + else +#endif + mpz_tdiv_q_ui(z, w, l); + } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { + if (mpz_sgn(w) >= 0) + { + if (mpz_fits_ulong_p(w)) + mpz_set_ui(z, l / mpz_get_ui(w)); + else + mpz_set_ui(z, 0); + } + else + { + mpz_neg(z, w); + if (mpz_fits_ulong_p(z)) + { + mpz_set_ui(z, l / mpz_get_ui(z)); + mpz_neg(z, z); + } + else + mpz_set_ui(z, 0); + } + } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { + if (l >= 0) + eval(z, w, static_cast(l)); + else + { + eval(z, w, -static_cast(l)); + mpz_neg(z, z); + } + } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { + if (mpz_fits_slong_p(w)) + mpz_set_si(z, l / mpz_get_si(w)); + else + { + /* if w is bigger than a long then the quotient must be zero, unless + l==LONG_MIN and w==-LONG_MIN in which case the quotient is -1 */ + mpz_set_si (z, (mpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? -1 : 0)); + } + } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_tdiv_q (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { __GMPXX_TMPZ_D; mpz_tdiv_q (z, temp, w); } + + static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) + { mpq_div(q, r, s); } + + static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) + { +#if __GMP_GNUC_PREREQ(3, 4) + if (__GMPXX_CONSTANT(l) && (l & (l-1)) == 0 && l != 0) + __gmp_binary_rshift::eval(q, r, __builtin_ctzl(l)); + else +#endif + { + __GMPXX_TMPQ_UI; + mpq_div (q, r, temp); + } + } + static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) + { + if (__GMPXX_CONSTANT_TRUE(l == 0)) + mpq_set_ui(q, 0, 1); + else if (__GMPXX_CONSTANT_TRUE(l == 1)) + mpq_inv(q, r); + else + { + __GMPXX_TMPQ_UI; + mpq_div (q, temp, r); + } + } + static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) + { + if (__GMPXX_CONSTANT_TRUE(l >= 0)) + eval(q, r, static_cast(l)); + else if (__GMPXX_CONSTANT_TRUE(l <= 0)) + { + eval(q, r, -static_cast(l)); + mpq_neg(q, q); + } + else + { + __GMPXX_TMPQ_SI; + mpq_div (q, r, temp); + } + } + static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) + { + if (__GMPXX_CONSTANT_TRUE(l == 0)) + mpq_set_ui(q, 0, 1); + else if (__GMPXX_CONSTANT_TRUE(l == 1)) + mpq_inv(q, r); + else if (__GMPXX_CONSTANT_TRUE(l == -1)) + { + mpq_inv(q, r); + mpq_neg(q, q); + } + else + { + __GMPXX_TMPQ_SI; + mpq_div (q, temp, r); + } + } + static void eval(mpq_ptr q, mpq_srcptr r, double d) + { __GMPXX_TMPQ_D; mpq_div (q, r, temp); } + static void eval(mpq_ptr q, double d, mpq_srcptr r) + { __GMPXX_TMPQ_D; mpq_div (q, temp, r); } + + static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) + { mpf_div(f, g, h); } + + static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) + { mpf_div_ui(f, g, l); } + static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) + { mpf_ui_div(f, l, g); } + static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) + { + if (l >= 0) + mpf_div_ui(f, g, l); + else + { + mpf_div_ui(f, g, -static_cast(l)); + mpf_neg(f, f); + } + } + static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) + { + if (l >= 0) + mpf_ui_div(f, l, g); + else + { + mpf_ui_div(f, -static_cast(l), g); + mpf_neg(f, f); + } + } + static void eval(mpf_ptr f, mpf_srcptr g, double d) + { + mpf_t temp; + mpf_init2(temp, 8*sizeof(double)); + mpf_set_d(temp, d); + mpf_div(f, g, temp); + mpf_clear(temp); + } + static void eval(mpf_ptr f, double d, mpf_srcptr g) + { + mpf_t temp; + mpf_init2(temp, 8*sizeof(double)); + mpf_set_d(temp, d); + mpf_div(f, temp, g); + mpf_clear(temp); + } +}; + +struct __gmp_binary_modulus +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_tdiv_r(z, w, v); } + + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { mpz_tdiv_r_ui(z, w, l); } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { + if (mpz_sgn(w) >= 0) + { + if (mpz_fits_ulong_p(w)) + mpz_set_ui(z, l % mpz_get_ui(w)); + else + mpz_set_ui(z, l); + } + else + { + mpz_neg(z, w); + if (mpz_fits_ulong_p(z)) + mpz_set_ui(z, l % mpz_get_ui(z)); + else + mpz_set_ui(z, l); + } + } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { + mpz_tdiv_r_ui (z, w, __gmpxx_abs_ui(l)); + } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { + if (mpz_fits_slong_p(w)) + mpz_set_si(z, l % mpz_get_si(w)); + else + { + /* if w is bigger than a long then the remainder is l unchanged, + unless l==LONG_MIN and w==-LONG_MIN in which case it's 0 */ + mpz_set_si (z, mpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? 0 : l); + } + } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_tdiv_r (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { __GMPXX_TMPZ_D; mpz_tdiv_r (z, temp, w); } +}; + +struct __gmp_binary_and +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_and(z, w, v); } + + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { __GMPXX_TMPZ_UI; mpz_and (z, w, temp); } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { __GMPXX_TMPZ_SI; mpz_and (z, w, temp); } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_and (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { eval(z, w, d); } +}; + +struct __gmp_binary_ior +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_ior(z, w, v); } + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { __GMPXX_TMPZ_UI; mpz_ior (z, w, temp); } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { __GMPXX_TMPZ_SI; mpz_ior (z, w, temp); } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_ior (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { eval(z, w, d); } +}; + +struct __gmp_binary_xor +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_xor(z, w, v); } + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { __GMPXX_TMPZ_UI; mpz_xor (z, w, temp); } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { __GMPXX_TMPZ_SI; mpz_xor (z, w, temp); } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_xor (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { eval(z, w, d); } +}; + +struct __gmp_cmp_function +{ + static int eval(mpz_srcptr z, mpz_srcptr w) { return mpz_cmp(z, w); } + + static int eval(mpz_srcptr z, unsigned long int l) + { return mpz_cmp_ui(z, l); } + static int eval(unsigned long int l, mpz_srcptr z) + { return -mpz_cmp_ui(z, l); } + static int eval(mpz_srcptr z, signed long int l) + { return mpz_cmp_si(z, l); } + static int eval(signed long int l, mpz_srcptr z) + { return -mpz_cmp_si(z, l); } + static int eval(mpz_srcptr z, double d) + { return mpz_cmp_d(z, d); } + static int eval(double d, mpz_srcptr z) + { return -mpz_cmp_d(z, d); } + + static int eval(mpq_srcptr q, mpq_srcptr r) { return mpq_cmp(q, r); } + + static int eval(mpq_srcptr q, unsigned long int l) + { return mpq_cmp_ui(q, l, 1); } + static int eval(unsigned long int l, mpq_srcptr q) + { return -mpq_cmp_ui(q, l, 1); } + static int eval(mpq_srcptr q, signed long int l) + { return mpq_cmp_si(q, l, 1); } + static int eval(signed long int l, mpq_srcptr q) + { return -mpq_cmp_si(q, l, 1); } + static int eval(mpq_srcptr q, double d) + { __GMPXX_TMPQ_D; return mpq_cmp (q, temp); } + static int eval(double d, mpq_srcptr q) + { __GMPXX_TMPQ_D; return mpq_cmp (temp, q); } + static int eval(mpq_srcptr q, mpz_srcptr z) + { return mpq_cmp_z(q, z); } + static int eval(mpz_srcptr z, mpq_srcptr q) + { return -mpq_cmp_z(q, z); } + + static int eval(mpf_srcptr f, mpf_srcptr g) { return mpf_cmp(f, g); } + + static int eval(mpf_srcptr f, unsigned long int l) + { return mpf_cmp_ui(f, l); } + static int eval(unsigned long int l, mpf_srcptr f) + { return -mpf_cmp_ui(f, l); } + static int eval(mpf_srcptr f, signed long int l) + { return mpf_cmp_si(f, l); } + static int eval(signed long int l, mpf_srcptr f) + { return -mpf_cmp_si(f, l); } + static int eval(mpf_srcptr f, double d) + { return mpf_cmp_d(f, d); } + static int eval(double d, mpf_srcptr f) + { return -mpf_cmp_d(f, d); } + static int eval(mpf_srcptr f, mpz_srcptr z) + { return mpf_cmp_z(f, z); } + static int eval(mpz_srcptr z, mpf_srcptr f) + { return -mpf_cmp_z(f, z); } + static int eval(mpf_srcptr f, mpq_srcptr q) + { + mpf_t qf; + mpf_init(qf); /* Should we use the precision of f? */ + mpf_set_q(qf, q); + int ret = eval(f, qf); + mpf_clear(qf); + return ret; + } + static int eval(mpq_srcptr q, mpf_srcptr f) + { return -eval(f, q); } +}; + +struct __gmp_binary_equal +{ + static bool eval(mpz_srcptr z, mpz_srcptr w) { return mpz_cmp(z, w) == 0; } + + static bool eval(mpz_srcptr z, unsigned long int l) + { return mpz_cmp_ui(z, l) == 0; } + static bool eval(unsigned long int l, mpz_srcptr z) + { return eval(z, l); } + static bool eval(mpz_srcptr z, signed long int l) + { return mpz_cmp_si(z, l) == 0; } + static bool eval(signed long int l, mpz_srcptr z) + { return eval(z, l); } + static bool eval(mpz_srcptr z, double d) + { return mpz_cmp_d(z, d) == 0; } + static bool eval(double d, mpz_srcptr z) + { return eval(z, d); } + + static bool eval(mpq_srcptr q, mpq_srcptr r) + { return mpq_equal(q, r) != 0; } + + static bool eval(mpq_srcptr q, unsigned long int l) + { return ((__GMPXX_CONSTANT(l) && l == 0) || + mpz_cmp_ui(mpq_denref(q), 1) == 0) && + mpz_cmp_ui(mpq_numref(q), l) == 0; } + static bool eval(unsigned long int l, mpq_srcptr q) + { return eval(q, l); } + static bool eval(mpq_srcptr q, signed long int l) + { return ((__GMPXX_CONSTANT(l) && l == 0) || + mpz_cmp_ui(mpq_denref(q), 1) == 0) && + mpz_cmp_si(mpq_numref(q), l) == 0; } + static bool eval(signed long int l, mpq_srcptr q) + { return eval(q, l); } + static bool eval(mpq_srcptr q, double d) + { __GMPXX_TMPQ_D; return mpq_equal (q, temp) != 0; } + static bool eval(double d, mpq_srcptr q) + { return eval(q, d); } + static bool eval(mpq_srcptr q, mpz_srcptr z) + { return mpz_cmp_ui(mpq_denref(q), 1) == 0 && mpz_cmp(mpq_numref(q), z) == 0; } + static bool eval(mpz_srcptr z, mpq_srcptr q) + { return eval(q, z); } + + static bool eval(mpf_srcptr f, mpf_srcptr g) { return mpf_cmp(f, g) == 0; } + + static bool eval(mpf_srcptr f, unsigned long int l) + { return mpf_cmp_ui(f, l) == 0; } + static bool eval(unsigned long int l, mpf_srcptr f) + { return eval(f, l); } + static bool eval(mpf_srcptr f, signed long int l) + { return mpf_cmp_si(f, l) == 0; } + static bool eval(signed long int l, mpf_srcptr f) + { return eval(f, l); } + static bool eval(mpf_srcptr f, double d) + { return mpf_cmp_d(f, d) == 0; } + static bool eval(double d, mpf_srcptr f) + { return eval(f, d); } + static bool eval(mpf_srcptr f, mpz_srcptr z) + { return mpf_cmp_z(f, z) == 0; } + static bool eval(mpz_srcptr z, mpf_srcptr f) + { return eval(f, z); } + static bool eval(mpf_srcptr f, mpq_srcptr q) + { return __gmp_cmp_function::eval(f, q) == 0; } + static bool eval(mpq_srcptr q, mpf_srcptr f) + { return eval(f, q); } +}; + +struct __gmp_binary_less +{ + static bool eval(mpz_srcptr z, mpz_srcptr w) { return mpz_cmp(z, w) < 0; } + + static bool eval(mpz_srcptr z, unsigned long int l) + { return mpz_cmp_ui(z, l) < 0; } + static bool eval(unsigned long int l, mpz_srcptr z) + { return mpz_cmp_ui(z, l) > 0; } + static bool eval(mpz_srcptr z, signed long int l) + { return mpz_cmp_si(z, l) < 0; } + static bool eval(signed long int l, mpz_srcptr z) + { return mpz_cmp_si(z, l) > 0; } + static bool eval(mpz_srcptr z, double d) + { return mpz_cmp_d(z, d) < 0; } + static bool eval(double d, mpz_srcptr z) + { return mpz_cmp_d(z, d) > 0; } + + static bool eval(mpq_srcptr q, mpq_srcptr r) { return mpq_cmp(q, r) < 0; } + + static bool eval(mpq_srcptr q, unsigned long int l) + { return mpq_cmp_ui(q, l, 1) < 0; } + static bool eval(unsigned long int l, mpq_srcptr q) + { return mpq_cmp_ui(q, l, 1) > 0; } + static bool eval(mpq_srcptr q, signed long int l) + { return mpq_cmp_si(q, l, 1) < 0; } + static bool eval(signed long int l, mpq_srcptr q) + { return mpq_cmp_si(q, l, 1) > 0; } + static bool eval(mpq_srcptr q, double d) + { __GMPXX_TMPQ_D; return mpq_cmp (q, temp) < 0; } + static bool eval(double d, mpq_srcptr q) + { __GMPXX_TMPQ_D; return mpq_cmp (temp, q) < 0; } + static bool eval(mpq_srcptr q, mpz_srcptr z) + { return mpq_cmp_z(q, z) < 0; } + static bool eval(mpz_srcptr z, mpq_srcptr q) + { return mpq_cmp_z(q, z) > 0; } + + static bool eval(mpf_srcptr f, mpf_srcptr g) { return mpf_cmp(f, g) < 0; } + + static bool eval(mpf_srcptr f, unsigned long int l) + { return mpf_cmp_ui(f, l) < 0; } + static bool eval(unsigned long int l, mpf_srcptr f) + { return mpf_cmp_ui(f, l) > 0; } + static bool eval(mpf_srcptr f, signed long int l) + { return mpf_cmp_si(f, l) < 0; } + static bool eval(signed long int l, mpf_srcptr f) + { return mpf_cmp_si(f, l) > 0; } + static bool eval(mpf_srcptr f, double d) + { return mpf_cmp_d(f, d) < 0; } + static bool eval(double d, mpf_srcptr f) + { return mpf_cmp_d(f, d) > 0; } + static bool eval(mpf_srcptr f, mpz_srcptr z) + { return mpf_cmp_z(f, z) < 0; } + static bool eval(mpz_srcptr z, mpf_srcptr f) + { return mpf_cmp_z(f, z) > 0; } + static bool eval(mpf_srcptr f, mpq_srcptr q) + { return __gmp_cmp_function::eval(f, q) < 0; } + static bool eval(mpq_srcptr q, mpf_srcptr f) + { return __gmp_cmp_function::eval(q, f) < 0; } +}; + +struct __gmp_binary_greater +{ + template + static inline bool eval(T t, U u) { return __gmp_binary_less::eval(u, t); } +}; + +struct __gmp_unary_increment +{ + static void eval(mpz_ptr z) { mpz_add_ui(z, z, 1); } + static void eval(mpq_ptr q) + { mpz_add(mpq_numref(q), mpq_numref(q), mpq_denref(q)); } + static void eval(mpf_ptr f) { mpf_add_ui(f, f, 1); } +}; + +struct __gmp_unary_decrement +{ + static void eval(mpz_ptr z) { mpz_sub_ui(z, z, 1); } + static void eval(mpq_ptr q) + { mpz_sub(mpq_numref(q), mpq_numref(q), mpq_denref(q)); } + static void eval(mpf_ptr f) { mpf_sub_ui(f, f, 1); } +}; + +struct __gmp_abs_function +{ + static void eval(mpz_ptr z, mpz_srcptr w) { mpz_abs(z, w); } + static void eval(mpq_ptr q, mpq_srcptr r) { mpq_abs(q, r); } + static void eval(mpf_ptr f, mpf_srcptr g) { mpf_abs(f, g); } +}; + +struct __gmp_trunc_function +{ + static void eval(mpf_ptr f, mpf_srcptr g) { mpf_trunc(f, g); } +}; + +struct __gmp_floor_function +{ + static void eval(mpf_ptr f, mpf_srcptr g) { mpf_floor(f, g); } +}; + +struct __gmp_ceil_function +{ + static void eval(mpf_ptr f, mpf_srcptr g) { mpf_ceil(f, g); } +}; + +struct __gmp_sqrt_function +{ + static void eval(mpz_ptr z, mpz_srcptr w) { mpz_sqrt(z, w); } + static void eval(mpf_ptr f, mpf_srcptr g) { mpf_sqrt(f, g); } +}; + +struct __gmp_hypot_function +{ + static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) + { + mpf_t temp; + mpf_init2(temp, mpf_get_prec(f)); + mpf_mul(temp, g, g); + mpf_mul(f, h, h); + mpf_add(f, f, temp); + mpf_sqrt(f, f); + mpf_clear(temp); + } + + static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) + { + mpf_t temp; + mpf_init2(temp, mpf_get_prec(f)); + mpf_mul(temp, g, g); + mpf_set_ui(f, l); + mpf_mul_ui(f, f, l); + mpf_add(f, f, temp); + mpf_clear(temp); + mpf_sqrt(f, f); + } + static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) + { eval(f, g, l); } + static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) + { eval(f, g, __gmpxx_abs_ui(l)); } + static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) + { eval(f, g, l); } + static void eval(mpf_ptr f, mpf_srcptr g, double d) + { + mpf_t temp; + mpf_init2(temp, mpf_get_prec(f)); + mpf_mul(temp, g, g); + mpf_set_d(f, d); + mpf_mul(f, f, f); + mpf_add(f, f, temp); + mpf_sqrt(f, f); + mpf_clear(temp); + } + static void eval(mpf_ptr f, double d, mpf_srcptr g) + { eval(f, g, d); } +}; + +struct __gmp_sgn_function +{ + static int eval(mpz_srcptr z) { return mpz_sgn(z); } + static int eval(mpq_srcptr q) { return mpq_sgn(q); } + static int eval(mpf_srcptr f) { return mpf_sgn(f); } +}; + +struct __gmp_gcd_function +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_gcd(z, w, v); } + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { mpz_gcd_ui(z, w, l); } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { eval(z, w, __gmpxx_abs_ui(l)); } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_gcd (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { eval(z, w, d); } +}; + +struct __gmp_lcm_function +{ + static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) + { mpz_lcm(z, w, v); } + static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) + { mpz_lcm_ui(z, w, l); } + static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) + { eval(z, w, __gmpxx_abs_ui(l)); } + static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) + { eval(z, w, l); } + static void eval(mpz_ptr z, mpz_srcptr w, double d) + { __GMPXX_TMPZ_D; mpz_lcm (z, w, temp); } + static void eval(mpz_ptr z, double d, mpz_srcptr w) + { eval(z, w, d); } +}; + +struct __gmp_rand_function +{ + static void eval(mpz_ptr z, gmp_randstate_t s, mp_bitcnt_t l) + { mpz_urandomb(z, s, l); } + static void eval(mpz_ptr z, gmp_randstate_t s, mpz_srcptr w) + { mpz_urandomm(z, s, w); } + static void eval(mpf_ptr f, gmp_randstate_t s, mp_bitcnt_t prec) + { mpf_urandomb(f, s, prec); } +}; + +struct __gmp_fac_function +{ + static void eval(mpz_ptr z, unsigned long l) { mpz_fac_ui(z, l); } + static void eval(mpz_ptr z, signed long l) + { + if (l < 0) + throw std::domain_error ("factorial(negative)"); + eval(z, static_cast(l)); + } + static void eval(mpz_ptr z, mpz_srcptr w) + { + if (!mpz_fits_ulong_p(w)) + { + if (mpz_sgn(w) < 0) + throw std::domain_error ("factorial(negative)"); + else + throw std::bad_alloc(); // or std::overflow_error ("factorial")? + } + eval(z, mpz_get_ui(w)); + } + static void eval(mpz_ptr z, double d) + { __GMPXX_TMPZ_D; eval (z, temp); } +}; + +struct __gmp_primorial_function +{ + static void eval(mpz_ptr z, unsigned long l) { mpz_primorial_ui(z, l); } + static void eval(mpz_ptr z, signed long l) + { + if (l < 0) + throw std::domain_error ("primorial(negative)"); + eval(z, static_cast(l)); + } + static void eval(mpz_ptr z, mpz_srcptr w) + { + if (!mpz_fits_ulong_p(w)) + { + if (mpz_sgn(w) < 0) + throw std::domain_error ("primorial(negative)"); + else + throw std::bad_alloc(); // or std::overflow_error ("primorial")? + } + eval(z, mpz_get_ui(w)); + } + static void eval(mpz_ptr z, double d) + { __GMPXX_TMPZ_D; eval (z, temp); } +}; + +struct __gmp_fib_function +{ + static void eval(mpz_ptr z, unsigned long l) { mpz_fib_ui(z, l); } + static void eval(mpz_ptr z, signed long l) + { + if (l < 0) + { + eval(z, -static_cast(l)); + if ((l & 1) == 0) + mpz_neg(z, z); + } + else + eval(z, static_cast(l)); + } + static void eval(mpz_ptr z, mpz_srcptr w) + { + if (!mpz_fits_slong_p(w)) + throw std::bad_alloc(); // or std::overflow_error ("fibonacci")? + eval(z, mpz_get_si(w)); + } + static void eval(mpz_ptr z, double d) + { __GMPXX_TMPZ_D; eval (z, temp); } +}; + + +/**************** Auxiliary classes ****************/ + +/* this is much the same as gmp_allocated_string in gmp-impl.h + since gmp-impl.h is not publicly available, I redefine it here + I use a different name to avoid possible clashes */ + +extern "C" { + typedef void (*__gmp_freefunc_t) (void *, size_t); +} +struct __gmp_alloc_cstring +{ + char *str; + __gmp_alloc_cstring(char *s) { str = s; } + ~__gmp_alloc_cstring() + { + __gmp_freefunc_t freefunc; + mp_get_memory_functions (NULL, NULL, &freefunc); + (*freefunc) (str, std::strlen(str)+1); + } +}; + + +// general expression template class +template +class __gmp_expr; + + +// templates for resolving expression types +template +struct __gmp_resolve_ref +{ + typedef T ref_type; +}; + +template +struct __gmp_resolve_ref<__gmp_expr > +{ + typedef const __gmp_expr & ref_type; +}; + + +template +struct __gmp_resolve_expr; + +template <> +struct __gmp_resolve_expr +{ + typedef mpz_t value_type; + typedef mpz_ptr ptr_type; + typedef mpz_srcptr srcptr_type; +}; + +template <> +struct __gmp_resolve_expr +{ + typedef mpq_t value_type; + typedef mpq_ptr ptr_type; + typedef mpq_srcptr srcptr_type; +}; + +template <> +struct __gmp_resolve_expr +{ + typedef mpf_t value_type; + typedef mpf_ptr ptr_type; + typedef mpf_srcptr srcptr_type; +}; + +template <> +struct __gmp_resolve_expr +{ + typedef mpq_t value_type; +}; + +template <> +struct __gmp_resolve_expr +{ + typedef mpq_t value_type; +}; + +template <> +struct __gmp_resolve_expr +{ + typedef mpf_t value_type; +}; + +template <> +struct __gmp_resolve_expr +{ + typedef mpf_t value_type; +}; + +template <> +struct __gmp_resolve_expr +{ + typedef mpf_t value_type; +}; + +template <> +struct __gmp_resolve_expr +{ + typedef mpf_t value_type; +}; + +#if __GMPXX_USE_CXX11 +namespace std { + template + struct common_type <__gmp_expr, __gmp_expr > + { + private: + typedef typename __gmp_resolve_expr::value_type X; + public: + typedef __gmp_expr type; + }; + + template + struct common_type <__gmp_expr > + { + typedef __gmp_expr type; + }; + +#define __GMPXX_DECLARE_COMMON_TYPE(typ) \ + template \ + struct common_type <__gmp_expr, typ > \ + { \ + typedef __gmp_expr type; \ + }; \ + \ + template \ + struct common_type > \ + { \ + typedef __gmp_expr type; \ + } + + __GMPXX_DECLARE_COMMON_TYPE(signed char); + __GMPXX_DECLARE_COMMON_TYPE(unsigned char); + __GMPXX_DECLARE_COMMON_TYPE(signed int); + __GMPXX_DECLARE_COMMON_TYPE(unsigned int); + __GMPXX_DECLARE_COMMON_TYPE(signed short int); + __GMPXX_DECLARE_COMMON_TYPE(unsigned short int); + __GMPXX_DECLARE_COMMON_TYPE(signed long int); + __GMPXX_DECLARE_COMMON_TYPE(unsigned long int); + __GMPXX_DECLARE_COMMON_TYPE(float); + __GMPXX_DECLARE_COMMON_TYPE(double); +#undef __GMPXX_DECLARE_COMMON_TYPE +} +#endif + +// classes for evaluating unary and binary expressions +template +struct __gmp_unary_expr +{ + typename __gmp_resolve_ref::ref_type val; + + __gmp_unary_expr(const T &v) : val(v) { } +private: + __gmp_unary_expr(); +}; + +template +struct __gmp_binary_expr +{ + typename __gmp_resolve_ref::ref_type val1; + typename __gmp_resolve_ref::ref_type val2; + + __gmp_binary_expr(const T &v1, const U &v2) : val1(v1), val2(v2) { } +private: + __gmp_binary_expr(); +}; + + + +/**************** Macros for in-class declarations ****************/ +/* This is just repetitive code that is easier to maintain if it's written + only once */ + +#define __GMPP_DECLARE_COMPOUND_OPERATOR(fun) \ + template \ + __gmp_expr & fun(const __gmp_expr &); + +#define __GMPN_DECLARE_COMPOUND_OPERATOR(fun) \ + __gmp_expr & fun(signed char); \ + __gmp_expr & fun(unsigned char); \ + __gmp_expr & fun(signed int); \ + __gmp_expr & fun(unsigned int); \ + __gmp_expr & fun(signed short int); \ + __gmp_expr & fun(unsigned short int); \ + __gmp_expr & fun(signed long int); \ + __gmp_expr & fun(unsigned long int); \ + __gmp_expr & fun(float); \ + __gmp_expr & fun(double); \ + /* __gmp_expr & fun(long double); */ + +#define __GMP_DECLARE_COMPOUND_OPERATOR(fun) \ +__GMPP_DECLARE_COMPOUND_OPERATOR(fun) \ +__GMPN_DECLARE_COMPOUND_OPERATOR(fun) + +#define __GMP_DECLARE_COMPOUND_OPERATOR_UI(fun) \ + __gmp_expr & fun(mp_bitcnt_t); + +#define __GMP_DECLARE_INCREMENT_OPERATOR(fun) \ + inline __gmp_expr & fun(); \ + inline __gmp_expr fun(int); + +#define __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS \ + __gmp_expr(signed char c) { init_si(c); } \ + __gmp_expr(unsigned char c) { init_ui(c); } \ + __gmp_expr(signed int i) { init_si(i); } \ + __gmp_expr(unsigned int i) { init_ui(i); } \ + __gmp_expr(signed short int s) { init_si(s); } \ + __gmp_expr(unsigned short int s) { init_ui(s); } \ + __gmp_expr(signed long int l) { init_si(l); } \ + __gmp_expr(unsigned long int l) { init_ui(l); } \ + __gmp_expr(float f) { init_d(f); } \ + __gmp_expr(double d) { init_d(d); } + +#define __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS \ + __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } \ + __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } \ + __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } \ + __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } \ + __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } \ + __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } \ + __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } \ + __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } \ + __gmp_expr & operator=(float f) { assign_d(f); return *this; } \ + __gmp_expr & operator=(double d) { assign_d(d); return *this; } + +#define __GMPP_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +template \ +static __gmp_expr, eval_fun> > \ +fun(const __gmp_expr &expr); + +#define __GMPNN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, bigtype) \ +static inline __gmp_expr > \ +fun(type expr); + +#define __GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, signed long) +#define __GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, unsigned long) +#define __GMPND_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, double) + +#define __GMPN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed char) \ +__GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned char) \ +__GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed int) \ +__GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned int) \ +__GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed short int) \ +__GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned short int) \ +__GMPNS_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed long int) \ +__GMPNU_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned long int) \ +__GMPND_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, float) \ +__GMPND_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, double) + +#define __GMP_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPP_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPN_DECLARE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) + +/**************** mpz_class -- wrapper for mpz_t ****************/ + +template <> +class __gmp_expr +{ +private: + typedef mpz_t value_type; + value_type mp; + + // Helper functions used for all arithmetic types + void assign_ui(unsigned long l) + { + if (__GMPXX_CONSTANT_TRUE(l == 0)) + __get_mp()->_mp_size = 0; + else + mpz_set_ui(mp, l); + } + void assign_si(signed long l) + { + if (__GMPXX_CONSTANT_TRUE(l >= 0)) + assign_ui(l); + else if (__GMPXX_CONSTANT_TRUE(l <= 0)) + { + assign_ui(-static_cast(l)); + mpz_neg(mp, mp); + } + else + mpz_set_si(mp, l); + } + void assign_d (double d) + { + mpz_set_d (mp, d); + } + + void init_ui(unsigned long l) + { + if (__GMPXX_CONSTANT_TRUE(l == 0)) + mpz_init(mp); + else + mpz_init_set_ui(mp, l); + } + void init_si(signed long l) + { + if (__GMPXX_CONSTANT_TRUE(l >= 0)) + init_ui(l); + else if (__GMPXX_CONSTANT_TRUE(l <= 0)) + { + init_ui(-static_cast(l)); + mpz_neg(mp, mp); + } + else + mpz_init_set_si(mp, l); + } + void init_d (double d) + { + mpz_init_set_d (mp, d); + } + +public: + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } + + // constructors and destructor + __gmp_expr() __GMPXX_NOEXCEPT { mpz_init(mp); } + + __gmp_expr(const __gmp_expr &z) { mpz_init_set(mp, z.mp); } +#if __GMPXX_USE_CXX11 + __gmp_expr(__gmp_expr &&z) noexcept + { *__get_mp() = *z.__get_mp(); mpz_init(z.mp); } +#endif + template + __gmp_expr(const __gmp_expr &expr) + { mpz_init(mp); __gmp_set_expr(mp, expr); } + template + explicit __gmp_expr(const __gmp_expr &expr) + { mpz_init(mp); __gmp_set_expr(mp, expr); } + + __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS + + explicit __gmp_expr(const char *s, int base = 0) + { + if (mpz_init_set_str (mp, s, base) != 0) + { + mpz_clear (mp); + throw std::invalid_argument ("mpz_set_str"); + } + } + explicit __gmp_expr(const std::string &s, int base = 0) + { + if (mpz_init_set_str(mp, s.c_str(), base) != 0) + { + mpz_clear (mp); + throw std::invalid_argument ("mpz_set_str"); + } + } + + explicit __gmp_expr(mpz_srcptr z) { mpz_init_set(mp, z); } + + ~__gmp_expr() { mpz_clear(mp); } + + void swap(__gmp_expr& z) __GMPXX_NOEXCEPT + { std::swap(*__get_mp(), *z.__get_mp()); } + + // assignment operators + __gmp_expr & operator=(const __gmp_expr &z) + { mpz_set(mp, z.mp); return *this; } +#if __GMPXX_USE_CXX11 + __gmp_expr & operator=(__gmp_expr &&z) noexcept + { swap(z); return *this; } +#endif + template + __gmp_expr & operator=(const __gmp_expr &expr) + { __gmp_set_expr(mp, expr); return *this; } + + __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS + + __gmp_expr & operator=(const char *s) + { + if (mpz_set_str (mp, s, 0) != 0) + throw std::invalid_argument ("mpz_set_str"); + return *this; + } + __gmp_expr & operator=(const std::string &s) + { + if (mpz_set_str(mp, s.c_str(), 0) != 0) + throw std::invalid_argument ("mpz_set_str"); + return *this; + } + + // string input/output functions + int set_str(const char *s, int base) + { return mpz_set_str(mp, s, base); } + int set_str(const std::string &s, int base) + { return mpz_set_str(mp, s.c_str(), base); } + std::string get_str(int base = 10) const + { + __gmp_alloc_cstring temp(mpz_get_str(0, base, mp)); + return std::string(temp.str); + } + + // conversion functions + mpz_srcptr __get_mp() const { return mp; } + mpz_ptr __get_mp() { return mp; } + mpz_srcptr get_mpz_t() const { return mp; } + mpz_ptr get_mpz_t() { return mp; } + + signed long int get_si() const { return mpz_get_si(mp); } + unsigned long int get_ui() const { return mpz_get_ui(mp); } + double get_d() const { return mpz_get_d(mp); } + + // bool fits_schar_p() const { return mpz_fits_schar_p(mp); } + // bool fits_uchar_p() const { return mpz_fits_uchar_p(mp); } + bool fits_sint_p() const { return mpz_fits_sint_p(mp); } + bool fits_uint_p() const { return mpz_fits_uint_p(mp); } + bool fits_sshort_p() const { return mpz_fits_sshort_p(mp); } + bool fits_ushort_p() const { return mpz_fits_ushort_p(mp); } + bool fits_slong_p() const { return mpz_fits_slong_p(mp); } + bool fits_ulong_p() const { return mpz_fits_ulong_p(mp); } + // bool fits_float_p() const { return mpz_fits_float_p(mp); } + // bool fits_double_p() const { return mpz_fits_double_p(mp); } + // bool fits_ldouble_p() const { return mpz_fits_ldouble_p(mp); } + +#if __GMPXX_USE_CXX11 + explicit operator bool() const { return __get_mp()->_mp_size != 0; } +#endif + + // member operators + __GMP_DECLARE_COMPOUND_OPERATOR(operator+=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator-=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator*=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator/=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator%=) + + __GMP_DECLARE_COMPOUND_OPERATOR(operator&=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator|=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator^=) + + __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator<<=) + __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator>>=) + + __GMP_DECLARE_INCREMENT_OPERATOR(operator++) + __GMP_DECLARE_INCREMENT_OPERATOR(operator--) + + __GMP_DECLARE_UNARY_STATIC_MEMFUN(mpz_t, factorial, __gmp_fac_function) + __GMP_DECLARE_UNARY_STATIC_MEMFUN(mpz_t, primorial, __gmp_primorial_function) + __GMP_DECLARE_UNARY_STATIC_MEMFUN(mpz_t, fibonacci, __gmp_fib_function) +}; + +typedef __gmp_expr mpz_class; + + +/**************** mpq_class -- wrapper for mpq_t ****************/ + +template <> +class __gmp_expr +{ +private: + typedef mpq_t value_type; + value_type mp; + + // Helper functions used for all arithmetic types + void assign_ui(unsigned long l) { mpq_set_ui(mp, l, 1); } + void assign_si(signed long l) + { + if (__GMPXX_CONSTANT_TRUE(l >= 0)) + assign_ui(l); + else + mpq_set_si(mp, l, 1); + } + void assign_d (double d) { mpq_set_d (mp, d); } + + void init_ui(unsigned long l) { mpq_init(mp); get_num() = l; } + void init_si(signed long l) { mpq_init(mp); get_num() = l; } + void init_d (double d) { mpq_init(mp); assign_d (d); } + +public: + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } + void canonicalize() { mpq_canonicalize(mp); } + + // constructors and destructor + __gmp_expr() { mpq_init(mp); } + + __gmp_expr(const __gmp_expr &q) + { + mpz_init_set(mpq_numref(mp), mpq_numref(q.mp)); + mpz_init_set(mpq_denref(mp), mpq_denref(q.mp)); + } +#if __GMPXX_USE_CXX11 + __gmp_expr(__gmp_expr &&q) + { *mp = *q.mp; mpq_init(q.mp); } + __gmp_expr(mpz_class &&z) + { + *mpq_numref(mp) = *z.get_mpz_t(); + mpz_init_set_ui(mpq_denref(mp), 1); + mpz_init(z.get_mpz_t()); + } +#endif + template + __gmp_expr(const __gmp_expr &expr) + { mpq_init(mp); __gmp_set_expr(mp, expr); } + template + __gmp_expr(const __gmp_expr &expr) + { mpq_init(mp); __gmp_set_expr(mp, expr); } + template + explicit __gmp_expr(const __gmp_expr &expr) + { mpq_init(mp); __gmp_set_expr(mp, expr); } + + __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS + + explicit __gmp_expr(const char *s, int base = 0) + { + mpq_init (mp); + // If s is the literal 0, we meant to call another constructor. + // If s just happens to evaluate to 0, we would crash, so whatever. + if (s == 0) + { + // Don't turn mpq_class(0,0) into 0 + mpz_set_si(mpq_denref(mp), base); + } + else if (mpq_set_str(mp, s, base) != 0) + { + mpq_clear (mp); + throw std::invalid_argument ("mpq_set_str"); + } + } + explicit __gmp_expr(const std::string &s, int base = 0) + { + mpq_init(mp); + if (mpq_set_str (mp, s.c_str(), base) != 0) + { + mpq_clear (mp); + throw std::invalid_argument ("mpq_set_str"); + } + } + explicit __gmp_expr(mpq_srcptr q) + { + mpz_init_set(mpq_numref(mp), mpq_numref(q)); + mpz_init_set(mpq_denref(mp), mpq_denref(q)); + } + + __gmp_expr(const mpz_class &num, const mpz_class &den) + { + mpz_init_set(mpq_numref(mp), num.get_mpz_t()); + mpz_init_set(mpq_denref(mp), den.get_mpz_t()); + } + + ~__gmp_expr() { mpq_clear(mp); } + + void swap(__gmp_expr& q) __GMPXX_NOEXCEPT { std::swap(*mp, *q.mp); } + + // assignment operators + __gmp_expr & operator=(const __gmp_expr &q) + { mpq_set(mp, q.mp); return *this; } +#if __GMPXX_USE_CXX11 + __gmp_expr & operator=(__gmp_expr &&q) noexcept + { swap(q); return *this; } + __gmp_expr & operator=(mpz_class &&z) noexcept + { get_num() = std::move(z); get_den() = 1u; return *this; } +#endif + template + __gmp_expr & operator=(const __gmp_expr &expr) + { __gmp_set_expr(mp, expr); return *this; } + + __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS + + __gmp_expr & operator=(const char *s) + { + if (mpq_set_str (mp, s, 0) != 0) + throw std::invalid_argument ("mpq_set_str"); + return *this; + } + __gmp_expr & operator=(const std::string &s) + { + if (mpq_set_str(mp, s.c_str(), 0) != 0) + throw std::invalid_argument ("mpq_set_str"); + return *this; + } + + // string input/output functions + int set_str(const char *s, int base) + { return mpq_set_str(mp, s, base); } + int set_str(const std::string &s, int base) + { return mpq_set_str(mp, s.c_str(), base); } + std::string get_str(int base = 10) const + { + __gmp_alloc_cstring temp(mpq_get_str(0, base, mp)); + return std::string(temp.str); + } + + // conversion functions + + // casting a reference to an mpz_t to mpz_class & is a dirty hack. + // It kind of works because the internal representation of mpz_class is + // exactly an mpz_t, but compilers are allowed to assume that mpq_class + // and mpz_class do not alias... In mpz_class, we avoid using mp directly, + // to reduce the risks of such problematic optimizations. + const mpz_class & get_num() const + { return reinterpret_cast(*mpq_numref(mp)); } + mpz_class & get_num() + { return reinterpret_cast(*mpq_numref(mp)); } + const mpz_class & get_den() const + { return reinterpret_cast(*mpq_denref(mp)); } + mpz_class & get_den() + { return reinterpret_cast(*mpq_denref(mp)); } + + mpq_srcptr __get_mp() const { return mp; } + mpq_ptr __get_mp() { return mp; } + mpq_srcptr get_mpq_t() const { return mp; } + mpq_ptr get_mpq_t() { return mp; } + + mpz_srcptr get_num_mpz_t() const { return mpq_numref(mp); } + mpz_ptr get_num_mpz_t() { return mpq_numref(mp); } + mpz_srcptr get_den_mpz_t() const { return mpq_denref(mp); } + mpz_ptr get_den_mpz_t() { return mpq_denref(mp); } + + double get_d() const { return mpq_get_d(mp); } + +#if __GMPXX_USE_CXX11 + explicit operator bool() const { return mpq_numref(mp)->_mp_size != 0; } +#endif + + // compound assignments + __GMP_DECLARE_COMPOUND_OPERATOR(operator+=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator-=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator*=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator/=) + + __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator<<=) + __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator>>=) + + __GMP_DECLARE_INCREMENT_OPERATOR(operator++) + __GMP_DECLARE_INCREMENT_OPERATOR(operator--) +}; + +typedef __gmp_expr mpq_class; + + +/**************** mpf_class -- wrapper for mpf_t ****************/ + +template <> +class __gmp_expr +{ +private: + typedef mpf_t value_type; + value_type mp; + + // Helper functions used for all arithmetic types + void assign_ui(unsigned long l) { mpf_set_ui(mp, l); } + void assign_si(signed long l) + { + if (__GMPXX_CONSTANT_TRUE(l >= 0)) + assign_ui(l); + else + mpf_set_si(mp, l); + } + void assign_d (double d) { mpf_set_d (mp, d); } + + void init_ui(unsigned long l) + { + if (__GMPXX_CONSTANT_TRUE(l == 0)) + mpf_init(mp); + else + mpf_init_set_ui(mp, l); + } + void init_si(signed long l) + { + if (__GMPXX_CONSTANT_TRUE(l >= 0)) + init_ui(l); + else + mpf_init_set_si(mp, l); + } + void init_d (double d) { mpf_init_set_d (mp, d); } + +public: + mp_bitcnt_t get_prec() const { return mpf_get_prec(mp); } + + void set_prec(mp_bitcnt_t prec) { mpf_set_prec(mp, prec); } + void set_prec_raw(mp_bitcnt_t prec) { mpf_set_prec_raw(mp, prec); } + + // constructors and destructor + __gmp_expr() { mpf_init(mp); } + + __gmp_expr(const __gmp_expr &f) + { mpf_init2(mp, f.get_prec()); mpf_set(mp, f.mp); } +#if __GMPXX_USE_CXX11 + __gmp_expr(__gmp_expr &&f) + { *mp = *f.mp; mpf_init2(f.mp, get_prec()); } +#endif + __gmp_expr(const __gmp_expr &f, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set(mp, f.mp); } + template + __gmp_expr(const __gmp_expr &expr) + { mpf_init2(mp, expr.get_prec()); __gmp_set_expr(mp, expr); } + template + __gmp_expr(const __gmp_expr &expr, mp_bitcnt_t prec) + { mpf_init2(mp, prec); __gmp_set_expr(mp, expr); } + + __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS + + __gmp_expr(signed char c, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_si(mp, c); } + __gmp_expr(unsigned char c, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_ui(mp, c); } + + __gmp_expr(signed int i, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_si(mp, i); } + __gmp_expr(unsigned int i, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_ui(mp, i); } + + __gmp_expr(signed short int s, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_si(mp, s); } + __gmp_expr(unsigned short int s, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_ui(mp, s); } + + __gmp_expr(signed long int l, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_si(mp, l); } + __gmp_expr(unsigned long int l, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_ui(mp, l); } + + __gmp_expr(float f, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_d(mp, f); } + __gmp_expr(double d, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set_d(mp, d); } + // __gmp_expr(long double ld) { mpf_init_set_d(mp, ld); } + // __gmp_expr(long double ld, mp_bitcnt_t prec) + // { mpf_init2(mp, prec); mpf_set_d(mp, ld); } + + explicit __gmp_expr(const char *s) + { + if (mpf_init_set_str (mp, s, 0) != 0) + { + mpf_clear (mp); + throw std::invalid_argument ("mpf_set_str"); + } + } + __gmp_expr(const char *s, mp_bitcnt_t prec, int base = 0) + { + mpf_init2(mp, prec); + if (mpf_set_str(mp, s, base) != 0) + { + mpf_clear (mp); + throw std::invalid_argument ("mpf_set_str"); + } + } + explicit __gmp_expr(const std::string &s) + { + if (mpf_init_set_str(mp, s.c_str(), 0) != 0) + { + mpf_clear (mp); + throw std::invalid_argument ("mpf_set_str"); + } + } + __gmp_expr(const std::string &s, mp_bitcnt_t prec, int base = 0) + { + mpf_init2(mp, prec); + if (mpf_set_str(mp, s.c_str(), base) != 0) + { + mpf_clear (mp); + throw std::invalid_argument ("mpf_set_str"); + } + } + + explicit __gmp_expr(mpf_srcptr f) + { mpf_init2(mp, mpf_get_prec(f)); mpf_set(mp, f); } + __gmp_expr(mpf_srcptr f, mp_bitcnt_t prec) + { mpf_init2(mp, prec); mpf_set(mp, f); } + + ~__gmp_expr() { mpf_clear(mp); } + + void swap(__gmp_expr& f) __GMPXX_NOEXCEPT { std::swap(*mp, *f.mp); } + + // assignment operators + __gmp_expr & operator=(const __gmp_expr &f) + { mpf_set(mp, f.mp); return *this; } +#if __GMPXX_USE_CXX11 + __gmp_expr & operator=(__gmp_expr &&f) noexcept + { swap(f); return *this; } +#endif + template + __gmp_expr & operator=(const __gmp_expr &expr) + { __gmp_set_expr(mp, expr); return *this; } + + __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS + + __gmp_expr & operator=(const char *s) + { + if (mpf_set_str (mp, s, 0) != 0) + throw std::invalid_argument ("mpf_set_str"); + return *this; + } + __gmp_expr & operator=(const std::string &s) + { + if (mpf_set_str(mp, s.c_str(), 0) != 0) + throw std::invalid_argument ("mpf_set_str"); + return *this; + } + + // string input/output functions + int set_str(const char *s, int base) + { return mpf_set_str(mp, s, base); } + int set_str(const std::string &s, int base) + { return mpf_set_str(mp, s.c_str(), base); } + std::string get_str(mp_exp_t &expo, int base = 10, size_t size = 0) const + { + __gmp_alloc_cstring temp(mpf_get_str(0, &expo, base, size, mp)); + return std::string(temp.str); + } + + // conversion functions + mpf_srcptr __get_mp() const { return mp; } + mpf_ptr __get_mp() { return mp; } + mpf_srcptr get_mpf_t() const { return mp; } + mpf_ptr get_mpf_t() { return mp; } + + signed long int get_si() const { return mpf_get_si(mp); } + unsigned long int get_ui() const { return mpf_get_ui(mp); } + double get_d() const { return mpf_get_d(mp); } + + // bool fits_schar_p() const { return mpf_fits_schar_p(mp); } + // bool fits_uchar_p() const { return mpf_fits_uchar_p(mp); } + bool fits_sint_p() const { return mpf_fits_sint_p(mp); } + bool fits_uint_p() const { return mpf_fits_uint_p(mp); } + bool fits_sshort_p() const { return mpf_fits_sshort_p(mp); } + bool fits_ushort_p() const { return mpf_fits_ushort_p(mp); } + bool fits_slong_p() const { return mpf_fits_slong_p(mp); } + bool fits_ulong_p() const { return mpf_fits_ulong_p(mp); } + // bool fits_float_p() const { return mpf_fits_float_p(mp); } + // bool fits_double_p() const { return mpf_fits_double_p(mp); } + // bool fits_ldouble_p() const { return mpf_fits_ldouble_p(mp); } + +#if __GMPXX_USE_CXX11 + explicit operator bool() const { return mpf_sgn(mp) != 0; } +#endif + + // compound assignments + __GMP_DECLARE_COMPOUND_OPERATOR(operator+=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator-=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator*=) + __GMP_DECLARE_COMPOUND_OPERATOR(operator/=) + + __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator<<=) + __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator>>=) + + __GMP_DECLARE_INCREMENT_OPERATOR(operator++) + __GMP_DECLARE_INCREMENT_OPERATOR(operator--) +}; + +typedef __gmp_expr mpf_class; + + + +/**************** User-defined literals ****************/ + +#if __GMPXX_USE_CXX11 +inline mpz_class operator"" _mpz(const char* s) +{ + return mpz_class(s); +} + +inline mpq_class operator"" _mpq(const char* s) +{ + mpq_class q; + q.get_num() = s; + return q; +} + +inline mpf_class operator"" _mpf(const char* s) +{ + return mpf_class(s); +} +#endif + +/**************** I/O operators ****************/ + +// these should (and will) be provided separately + +template +inline std::ostream & operator<< +(std::ostream &o, const __gmp_expr &expr) +{ + __gmp_expr const& temp(expr); + return o << temp.__get_mp(); +} + +template +inline std::istream & operator>>(std::istream &i, __gmp_expr &expr) +{ + return i >> expr.__get_mp(); +} + +/* +// you might want to uncomment this +inline std::istream & operator>>(std::istream &i, mpq_class &q) +{ + i >> q.get_mpq_t(); + q.canonicalize(); + return i; +} +*/ + + +/**************** Functions for type conversion ****************/ + +inline void __gmp_set_expr(mpz_ptr z, const mpz_class &w) +{ + mpz_set(z, w.get_mpz_t()); +} + +template +inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr &expr) +{ + expr.eval(z); +} + +template +inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr &expr) +{ + mpq_class const& temp(expr); + mpz_set_q(z, temp.get_mpq_t()); +} + +template +inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr &expr) +{ + mpf_class const& temp(expr); + mpz_set_f(z, temp.get_mpf_t()); +} + +inline void __gmp_set_expr(mpq_ptr q, const mpz_class &z) +{ + mpq_set_z(q, z.get_mpz_t()); +} + +template +inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr &expr) +{ + __gmp_set_expr(mpq_numref(q), expr); + mpz_set_ui(mpq_denref(q), 1); +} + +inline void __gmp_set_expr(mpq_ptr q, const mpq_class &r) +{ + mpq_set(q, r.get_mpq_t()); +} + +template +inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr &expr) +{ + expr.eval(q); +} + +template +inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr &expr) +{ + mpf_class const& temp(expr); + mpq_set_f(q, temp.get_mpf_t()); +} + +template +inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr &expr) +{ + mpz_class const& temp(expr); + mpf_set_z(f, temp.get_mpz_t()); +} + +template +inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr &expr) +{ + mpq_class const& temp(expr); + mpf_set_q(f, temp.get_mpq_t()); +} + +inline void __gmp_set_expr(mpf_ptr f, const mpf_class &g) +{ + mpf_set(f, g.get_mpf_t()); +} + +template +inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr &expr) +{ + expr.eval(f); +} + + +/* Temporary objects */ + +template +class __gmp_temp +{ + __gmp_expr val; + public: + template + __gmp_temp(U const& u, V) : val (u) {} + typename __gmp_resolve_expr::srcptr_type + __get_mp() const { return val.__get_mp(); } +}; + +template <> +class __gmp_temp +{ + mpf_class val; + public: + template + __gmp_temp(U const& u, mpf_ptr res) : val (u, mpf_get_prec(res)) {} + mpf_srcptr __get_mp() const { return val.__get_mp(); } +}; + +/**************** Specializations of __gmp_expr ****************/ +/* The eval() method of __gmp_expr evaluates the corresponding + expression and assigns the result to its argument, which is either an + mpz_t, mpq_t, or mpf_t as specified by the T argument. + Compound expressions are evaluated recursively (temporaries are created + to hold intermediate values), while for simple expressions the eval() + method of the appropriate function object (available as the Op argument + of either __gmp_unary_expr or __gmp_binary_expr) is + called. */ + + +/**************** Unary expressions ****************/ +/* cases: + - simple: argument is mp*_class, that is, __gmp_expr + - compound: argument is __gmp_expr (with U not equal to T) */ + + +// simple expressions + +template +class __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val_type; + + __gmp_unary_expr expr; +public: + explicit __gmp_expr(const val_type &val) : expr(val) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { Op::eval(p, expr.val.__get_mp()); } + const val_type & get_val() const { return expr.val; } + mp_bitcnt_t get_prec() const { return expr.val.get_prec(); } +}; + + +// simple expressions, U is a built-in numerical type + +template +class __gmp_expr > +{ +private: + typedef U val_type; + + __gmp_unary_expr expr; +public: + explicit __gmp_expr(const val_type &val) : expr(val) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { Op::eval(p, expr.val); } + const val_type & get_val() const { return expr.val; } + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } +}; + + +// compound expressions + +template +class __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val_type; + + __gmp_unary_expr expr; +public: + explicit __gmp_expr(const val_type &val) : expr(val) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { expr.val.eval(p); Op::eval(p, p); } + const val_type & get_val() const { return expr.val; } + mp_bitcnt_t get_prec() const { return expr.val.get_prec(); } +}; + + +/**************** Binary expressions ****************/ +/* simple: + - arguments are both mp*_class + - one argument is mp*_class, one is a built-in type + compound: + - one is mp*_class, one is __gmp_expr + - one is __gmp_expr, one is built-in + - both arguments are __gmp_expr<...> */ + + +// simple expressions + +template +class __gmp_expr +, __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { Op::eval(p, expr.val1.__get_mp(), expr.val2.__get_mp()); } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const + { + mp_bitcnt_t prec1 = expr.val1.get_prec(), + prec2 = expr.val2.get_prec(); + return (prec1 > prec2) ? prec1 : prec2; + } +}; + + +// simple expressions, U is a built-in numerical type + +template +class __gmp_expr, U, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef U val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { Op::eval(p, expr.val1.__get_mp(), expr.val2); } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); } +}; + +template +class __gmp_expr, Op> > +{ +private: + typedef U val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { Op::eval(p, expr.val1, expr.val2.__get_mp()); } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); } +}; + + +// compound expressions, one argument is a subexpression + +template +class __gmp_expr +, __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + if(p != expr.val1.__get_mp()) + { + __gmp_set_expr(p, expr.val2); + Op::eval(p, expr.val1.__get_mp(), p); + } + else + { + __gmp_temp temp(expr.val2, p); + Op::eval(p, expr.val1.__get_mp(), temp.__get_mp()); + } + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const + { + mp_bitcnt_t prec1 = expr.val1.get_prec(), + prec2 = expr.val2.get_prec(); + return (prec1 > prec2) ? prec1 : prec2; + } +}; + +template +class __gmp_expr +, __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + if(p != expr.val2.__get_mp()) + { + __gmp_set_expr(p, expr.val1); + Op::eval(p, p, expr.val2.__get_mp()); + } + else + { + __gmp_temp temp(expr.val1, p); + Op::eval(p, temp.__get_mp(), expr.val2.__get_mp()); + } + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const + { + mp_bitcnt_t prec1 = expr.val1.get_prec(), + prec2 = expr.val2.get_prec(); + return (prec1 > prec2) ? prec1 : prec2; + } +}; + +template +class __gmp_expr +, __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + if(p != expr.val1.__get_mp()) + { + __gmp_set_expr(p, expr.val2); + Op::eval(p, expr.val1.__get_mp(), p); + } + else + { + __gmp_temp temp(expr.val2, p); + Op::eval(p, expr.val1.__get_mp(), temp.__get_mp()); + } + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const + { + mp_bitcnt_t prec1 = expr.val1.get_prec(), + prec2 = expr.val2.get_prec(); + return (prec1 > prec2) ? prec1 : prec2; + } +}; + +template +class __gmp_expr +, __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + if(p != expr.val2.__get_mp()) + { + __gmp_set_expr(p, expr.val1); + Op::eval(p, p, expr.val2.__get_mp()); + } + else + { + __gmp_temp temp(expr.val1, p); + Op::eval(p, temp.__get_mp(), expr.val2.__get_mp()); + } + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const + { + mp_bitcnt_t prec1 = expr.val1.get_prec(), + prec2 = expr.val2.get_prec(); + return (prec1 > prec2) ? prec1 : prec2; + } +}; + + +// one argument is a subexpression, one is a built-in + +template +class __gmp_expr, V, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef V val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + expr.val1.eval(p); + Op::eval(p, p, expr.val2); + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); } +}; + +template +class __gmp_expr, Op> > +{ +private: + typedef U val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + expr.val2.eval(p); + Op::eval(p, expr.val1, p); + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); } +}; + + +// both arguments are subexpressions + +template +class __gmp_expr +, __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + __gmp_temp temp2(expr.val2, p); + expr.val1.eval(p); + Op::eval(p, p, temp2.__get_mp()); + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const + { + mp_bitcnt_t prec1 = expr.val1.get_prec(), + prec2 = expr.val2.get_prec(); + return (prec1 > prec2) ? prec1 : prec2; + } +}; + +template +class __gmp_expr +, __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + __gmp_temp temp1(expr.val1, p); + expr.val2.eval(p); + Op::eval(p, temp1.__get_mp(), p); + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const + { + mp_bitcnt_t prec1 = expr.val1.get_prec(), + prec2 = expr.val2.get_prec(); + return (prec1 > prec2) ? prec1 : prec2; + } +}; + +template +class __gmp_expr +, __gmp_expr, Op> > +{ +private: + typedef __gmp_expr val1_type; + typedef __gmp_expr val2_type; + + __gmp_binary_expr expr; +public: + __gmp_expr(const val1_type &val1, const val2_type &val2) + : expr(val1, val2) { } + void eval(typename __gmp_resolve_expr::ptr_type p) const + { + __gmp_temp temp2(expr.val2, p); + expr.val1.eval(p); + Op::eval(p, p, temp2.__get_mp()); + } + const val1_type & get_val1() const { return expr.val1; } + const val2_type & get_val2() const { return expr.val2; } + mp_bitcnt_t get_prec() const + { + mp_bitcnt_t prec1 = expr.val1.get_prec(), + prec2 = expr.val2.get_prec(); + return (prec1 > prec2) ? prec1 : prec2; + } +}; + + +/**************** Special cases ****************/ + +/* Some operations (i.e., add and subtract) with mixed mpz/mpq arguments + can be done directly without first converting the mpz to mpq. + Appropriate specializations of __gmp_expr are required. */ + + +#define __GMPZQ_DEFINE_EXPR(eval_fun) \ + \ +template <> \ +class __gmp_expr > \ +{ \ +private: \ + typedef mpz_class val1_type; \ + typedef mpq_class val2_type; \ + \ + __gmp_binary_expr expr; \ +public: \ + __gmp_expr(const val1_type &val1, const val2_type &val2) \ + : expr(val1, val2) { } \ + void eval(mpq_ptr q) const \ + { eval_fun::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } \ + const val1_type & get_val1() const { return expr.val1; } \ + const val2_type & get_val2() const { return expr.val2; } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ +}; \ + \ +template <> \ +class __gmp_expr > \ +{ \ +private: \ + typedef mpq_class val1_type; \ + typedef mpz_class val2_type; \ + \ + __gmp_binary_expr expr; \ +public: \ + __gmp_expr(const val1_type &val1, const val2_type &val2) \ + : expr(val1, val2) { } \ + void eval(mpq_ptr q) const \ + { eval_fun::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } \ + const val1_type & get_val1() const { return expr.val1; } \ + const val2_type & get_val2() const { return expr.val2; } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ +}; \ + \ +template \ +class __gmp_expr \ +, eval_fun> > \ +{ \ +private: \ + typedef mpz_class val1_type; \ + typedef __gmp_expr val2_type; \ + \ + __gmp_binary_expr expr; \ +public: \ + __gmp_expr(const val1_type &val1, const val2_type &val2) \ + : expr(val1, val2) { } \ + void eval(mpq_ptr q) const \ + { \ + mpq_class temp(expr.val2); \ + eval_fun::eval(q, expr.val1.get_mpz_t(), temp.get_mpq_t()); \ + } \ + const val1_type & get_val1() const { return expr.val1; } \ + const val2_type & get_val2() const { return expr.val2; } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ +}; \ + \ +template \ +class __gmp_expr \ +, eval_fun> > \ +{ \ +private: \ + typedef mpq_class val1_type; \ + typedef __gmp_expr val2_type; \ + \ + __gmp_binary_expr expr; \ +public: \ + __gmp_expr(const val1_type &val1, const val2_type &val2) \ + : expr(val1, val2) { } \ + void eval(mpq_ptr q) const \ + { \ + mpz_class temp(expr.val2); \ + eval_fun::eval(q, expr.val1.get_mpq_t(), temp.get_mpz_t()); \ + } \ + const val1_type & get_val1() const { return expr.val1; } \ + const val2_type & get_val2() const { return expr.val2; } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ +}; \ + \ +template \ +class __gmp_expr \ +, mpq_class, eval_fun> > \ +{ \ +private: \ + typedef __gmp_expr val1_type; \ + typedef mpq_class val2_type; \ + \ + __gmp_binary_expr expr; \ +public: \ + __gmp_expr(const val1_type &val1, const val2_type &val2) \ + : expr(val1, val2) { } \ + void eval(mpq_ptr q) const \ + { \ + mpz_class temp(expr.val1); \ + eval_fun::eval(q, temp.get_mpz_t(), expr.val2.get_mpq_t()); \ + } \ + const val1_type & get_val1() const { return expr.val1; } \ + const val2_type & get_val2() const { return expr.val2; } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ +}; \ + \ +template \ +class __gmp_expr \ +, mpz_class, eval_fun> > \ +{ \ +private: \ + typedef __gmp_expr val1_type; \ + typedef mpz_class val2_type; \ + \ + __gmp_binary_expr expr; \ +public: \ + __gmp_expr(const val1_type &val1, const val2_type &val2) \ + : expr(val1, val2) { } \ + void eval(mpq_ptr q) const \ + { \ + mpq_class temp(expr.val1); \ + eval_fun::eval(q, temp.get_mpq_t(), expr.val2.get_mpz_t()); \ + } \ + const val1_type & get_val1() const { return expr.val1; } \ + const val2_type & get_val2() const { return expr.val2; } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ +}; \ + \ +template \ +class __gmp_expr, __gmp_expr, eval_fun> > \ +{ \ +private: \ + typedef __gmp_expr val1_type; \ + typedef __gmp_expr val2_type; \ + \ + __gmp_binary_expr expr; \ +public: \ + __gmp_expr(const val1_type &val1, const val2_type &val2) \ + : expr(val1, val2) { } \ + void eval(mpq_ptr q) const \ + { \ + mpz_class temp1(expr.val1); \ + expr.val2.eval(q); \ + eval_fun::eval(q, temp1.get_mpz_t(), q); \ + } \ + const val1_type & get_val1() const { return expr.val1; } \ + const val2_type & get_val2() const { return expr.val2; } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ +}; \ + \ +template \ +class __gmp_expr, __gmp_expr, eval_fun> > \ +{ \ +private: \ + typedef __gmp_expr val1_type; \ + typedef __gmp_expr val2_type; \ + \ + __gmp_binary_expr expr; \ +public: \ + __gmp_expr(const val1_type &val1, const val2_type &val2) \ + : expr(val1, val2) { } \ + void eval(mpq_ptr q) const \ + { \ + mpz_class temp2(expr.val2); \ + expr.val1.eval(q); \ + eval_fun::eval(q, q, temp2.get_mpz_t()); \ + } \ + const val1_type & get_val1() const { return expr.val1; } \ + const val2_type & get_val2() const { return expr.val2; } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ +}; + + +__GMPZQ_DEFINE_EXPR(__gmp_binary_plus) +__GMPZQ_DEFINE_EXPR(__gmp_binary_minus) + + + +/**************** Macros for defining functions ****************/ +/* Results of operators and functions are instances of __gmp_expr. + T determines the numerical type of the expression: it can be either + mpz_t, mpq_t, or mpf_t. When the arguments of a binary + expression have different numerical types, __gmp_resolve_expr is used + to determine the "larger" type. + U is either __gmp_unary_expr or __gmp_binary_expr, + where V and W are the arguments' types -- they can in turn be + expressions, thus allowing to build compound expressions to any + degree of complexity. + Op is a function object that must have an eval() method accepting + appropriate arguments. + Actual evaluation of a __gmp_expr object is done when it gets + assigned to an mp*_class ("lazy" evaluation): this is done by calling + its eval() method. */ + + +// non-member unary operators and functions + +#define __GMP_DEFINE_UNARY_FUNCTION(fun, eval_fun) \ + \ +template \ +inline __gmp_expr, eval_fun> > \ +fun(const __gmp_expr &expr) \ +{ \ + return __gmp_expr, eval_fun> >(expr); \ +} + +// variant that only works for one of { mpz, mpq, mpf } + +#define __GMP_DEFINE_UNARY_FUNCTION_1(T, fun, eval_fun) \ + \ +template \ +inline __gmp_expr, eval_fun> > \ +fun(const __gmp_expr &expr) \ +{ \ + return __gmp_expr, eval_fun> >(expr); \ +} + +#define __GMP_DEFINE_UNARY_TYPE_FUNCTION(type, fun, eval_fun) \ + \ +template \ +inline type fun(const __gmp_expr &expr) \ +{ \ + __gmp_expr const& temp(expr); \ + return eval_fun::eval(temp.__get_mp()); \ +} + + +// non-member binary operators and functions + +#define __GMPP_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ + \ +template \ +inline __gmp_expr::value_type, \ +__gmp_binary_expr<__gmp_expr, __gmp_expr, eval_fun> > \ +fun(const __gmp_expr &expr1, const __gmp_expr &expr2) \ +{ \ + return __gmp_expr::value_type, \ + __gmp_binary_expr<__gmp_expr, __gmp_expr, eval_fun> > \ + (expr1, expr2); \ +} + +#define __GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, bigtype) \ + \ +template \ +inline __gmp_expr \ +, bigtype, eval_fun> > \ +fun(const __gmp_expr &expr, type t) \ +{ \ + return __gmp_expr \ + , bigtype, eval_fun> >(expr, t); \ +} \ + \ +template \ +inline __gmp_expr \ +, eval_fun> > \ +fun(type t, const __gmp_expr &expr) \ +{ \ + return __gmp_expr \ + , eval_fun> >(t, expr); \ +} + +#define __GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, signed long int) + +#define __GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, unsigned long int) + +#define __GMPND_DEFINE_BINARY_FUNCTION(fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, double) + +#define __GMPNLD_DEFINE_BINARY_FUNCTION(fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, long double) + +#define __GMPN_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ +__GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, signed char) \ +__GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, unsigned char) \ +__GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, signed int) \ +__GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, unsigned int) \ +__GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, signed short int) \ +__GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, unsigned short int) \ +__GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, signed long int) \ +__GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, unsigned long int) \ +__GMPND_DEFINE_BINARY_FUNCTION(fun, eval_fun, float) \ +__GMPND_DEFINE_BINARY_FUNCTION(fun, eval_fun, double) \ +/* __GMPNLD_DEFINE_BINARY_FUNCTION(fun, eval_fun, long double) */ + +#define __GMP_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ +__GMPP_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ +__GMPN_DEFINE_BINARY_FUNCTION(fun, eval_fun) + +// variant that only works for one of { mpz, mpq, mpf } + +#define __GMPP_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) \ + \ +template \ +inline __gmp_expr, __gmp_expr, eval_fun> > \ +fun(const __gmp_expr &expr1, const __gmp_expr &expr2) \ +{ \ + return __gmp_expr, __gmp_expr, eval_fun> > \ + (expr1, expr2); \ +} + +#define __GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, bigtype) \ + \ +template \ +inline __gmp_expr \ +, bigtype, eval_fun> > \ +fun(const __gmp_expr &expr, type t) \ +{ \ + return __gmp_expr \ + , bigtype, eval_fun> >(expr, t); \ +} \ + \ +template \ +inline __gmp_expr \ +, eval_fun> > \ +fun(type t, const __gmp_expr &expr) \ +{ \ + return __gmp_expr \ + , eval_fun> >(t, expr); \ +} + +#define __GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, signed long int) + +#define __GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, unsigned long int) + +#define __GMPND_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, double) + +#define __GMPNLD_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, type, long double) + +#define __GMPN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) \ +__GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, signed char) \ +__GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, unsigned char) \ +__GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, signed int) \ +__GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, unsigned int) \ +__GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, signed short int) \ +__GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, unsigned short int) \ +__GMPNS_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, signed long int) \ +__GMPNU_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, unsigned long int) \ +__GMPND_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, float) \ +__GMPND_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, double) \ +/* __GMPNLD_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun, long double) */ + +#define __GMP_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) \ +__GMPP_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) \ +__GMPN_DEFINE_BINARY_FUNCTION_1(T, fun, eval_fun) + + +#define __GMP_DEFINE_BINARY_FUNCTION_UI(fun, eval_fun) \ + \ +template \ +inline __gmp_expr \ +, mp_bitcnt_t, eval_fun> > \ +fun(const __gmp_expr &expr, mp_bitcnt_t l) \ +{ \ + return __gmp_expr, mp_bitcnt_t, eval_fun> >(expr, l); \ +} + + +#define __GMPP_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) \ + \ +template \ +inline type fun(const __gmp_expr &expr1, \ + const __gmp_expr &expr2) \ +{ \ + __gmp_expr const& temp1(expr1); \ + __gmp_expr const& temp2(expr2); \ + return eval_fun::eval(temp1.__get_mp(), temp2.__get_mp()); \ +} + +#define __GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, \ + type2, bigtype) \ + \ +template \ +inline type fun(const __gmp_expr &expr, type2 t) \ +{ \ + __gmp_expr const& temp(expr); \ + return eval_fun::eval(temp.__get_mp(), static_cast(t)); \ +} \ + \ +template \ +inline type fun(type2 t, const __gmp_expr &expr) \ +{ \ + __gmp_expr const& temp(expr); \ + return eval_fun::eval(static_cast(t), temp.__get_mp()); \ +} + +#define __GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2) \ +__GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, \ + type2, signed long int) + +#define __GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2) \ +__GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, \ + type2, unsigned long int) + +#define __GMPND_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2) \ +__GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2, double) + +#define __GMPNLD_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2) \ +__GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2, long double) + +#define __GMPN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) \ +__GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, signed char) \ +__GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, unsigned char) \ +__GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, signed int) \ +__GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, unsigned int) \ +__GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, signed short int) \ +__GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, unsigned short int) \ +__GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, signed long int) \ +__GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, unsigned long int) \ +__GMPND_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, float) \ +__GMPND_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, double) \ +/* __GMPNLD_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, long double) */ + +#define __GMP_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) \ +__GMPP_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) \ +__GMPN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) + + +// member operators + +#define __GMPP_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) \ + \ +template \ +inline type##_class & type##_class::fun(const __gmp_expr &expr) \ +{ \ + __gmp_set_expr(mp, __gmp_expr, eval_fun> >(*this, expr)); \ + return *this; \ +} + +#define __GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, \ + type2, bigtype) \ + \ +inline type##_class & type##_class::fun(type2 t) \ +{ \ + __gmp_set_expr(mp, __gmp_expr >(*this, t)); \ + return *this; \ +} + +#define __GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2) \ +__GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, \ + type2, signed long int) + +#define __GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2) \ +__GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, \ + type2, unsigned long int) + +#define __GMPND_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2) \ +__GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2, double) + +#define __GMPNLD_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2) \ +__GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2, long double) + +#define __GMPN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) \ +__GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, signed char) \ +__GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, unsigned char) \ +__GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, signed int) \ +__GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, unsigned int) \ +__GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, signed short int) \ +__GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, unsigned short int) \ +__GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, signed long int) \ +__GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, unsigned long int) \ +__GMPND_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, float) \ +__GMPND_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, double) \ +/* __GMPNLD_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, long double) */ + +#define __GMP_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) \ +__GMPP_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) \ +__GMPN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) + +#define __GMPZ_DEFINE_COMPOUND_OPERATOR(fun, eval_fun) \ +__GMP_DEFINE_COMPOUND_OPERATOR(mpz, fun, eval_fun) + +#define __GMPQ_DEFINE_COMPOUND_OPERATOR(fun, eval_fun) \ +__GMP_DEFINE_COMPOUND_OPERATOR(mpq, fun, eval_fun) + +#define __GMPF_DEFINE_COMPOUND_OPERATOR(fun, eval_fun) \ +__GMP_DEFINE_COMPOUND_OPERATOR(mpf, fun, eval_fun) + + + +#define __GMP_DEFINE_COMPOUND_OPERATOR_UI(type, fun, eval_fun) \ + \ +inline type##_class & type##_class::fun(mp_bitcnt_t l) \ +{ \ + __gmp_set_expr(mp, __gmp_expr >(*this, l)); \ + return *this; \ +} + +#define __GMPZ_DEFINE_COMPOUND_OPERATOR_UI(fun, eval_fun) \ +__GMP_DEFINE_COMPOUND_OPERATOR_UI(mpz, fun, eval_fun) + +#define __GMPQ_DEFINE_COMPOUND_OPERATOR_UI(fun, eval_fun) \ +__GMP_DEFINE_COMPOUND_OPERATOR_UI(mpq, fun, eval_fun) + +#define __GMPF_DEFINE_COMPOUND_OPERATOR_UI(fun, eval_fun) \ +__GMP_DEFINE_COMPOUND_OPERATOR_UI(mpf, fun, eval_fun) + + + +#define __GMP_DEFINE_INCREMENT_OPERATOR(type, fun, eval_fun) \ + \ +inline type##_class & type##_class::fun() \ +{ \ + eval_fun::eval(mp); \ + return *this; \ +} \ + \ +inline type##_class type##_class::fun(int) \ +{ \ + type##_class temp(*this); \ + eval_fun::eval(mp); \ + return temp; \ +} + +#define __GMPZ_DEFINE_INCREMENT_OPERATOR(fun, eval_fun) \ +__GMP_DEFINE_INCREMENT_OPERATOR(mpz, fun, eval_fun) + +#define __GMPQ_DEFINE_INCREMENT_OPERATOR(fun, eval_fun) \ +__GMP_DEFINE_INCREMENT_OPERATOR(mpq, fun, eval_fun) + +#define __GMPF_DEFINE_INCREMENT_OPERATOR(fun, eval_fun) \ +__GMP_DEFINE_INCREMENT_OPERATOR(mpf, fun, eval_fun) + + +#define __GMPP_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +template \ +__gmp_expr, eval_fun> > \ +fun(const __gmp_expr &expr) \ +{ \ + return __gmp_expr, eval_fun> >(expr); \ +} + +#define __GMPNN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, bigtype) \ +inline __gmp_expr > \ +fun(type expr) \ +{ \ + return __gmp_expr >(expr); \ +} + +#define __GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, signed long) +#define __GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, unsigned long) +#define __GMPND_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type) \ +__GMPNN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, type, double) + +#define __GMPN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed char) \ +__GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned char) \ +__GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed int) \ +__GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned int) \ +__GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed short int) \ +__GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned short int) \ +__GMPNS_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, signed long int) \ +__GMPNU_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, unsigned long int) \ +__GMPND_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, float) \ +__GMPND_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun, double) \ + +#define __GMP_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPP_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ +__GMPN_DEFINE_UNARY_STATIC_MEMFUN(T, fun, eval_fun) \ + + +/**************** Arithmetic operators and functions ****************/ + +// non-member operators and functions + +__GMP_DEFINE_UNARY_FUNCTION(operator+, __gmp_unary_plus) +__GMP_DEFINE_UNARY_FUNCTION(operator-, __gmp_unary_minus) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, operator~, __gmp_unary_com) + +__GMP_DEFINE_BINARY_FUNCTION(operator+, __gmp_binary_plus) +__GMP_DEFINE_BINARY_FUNCTION(operator-, __gmp_binary_minus) +__GMP_DEFINE_BINARY_FUNCTION(operator*, __gmp_binary_multiplies) +__GMP_DEFINE_BINARY_FUNCTION(operator/, __gmp_binary_divides) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, operator%, __gmp_binary_modulus) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, operator&, __gmp_binary_and) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, operator|, __gmp_binary_ior) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, operator^, __gmp_binary_xor) + +__GMP_DEFINE_BINARY_FUNCTION_UI(operator<<, __gmp_binary_lshift) +__GMP_DEFINE_BINARY_FUNCTION_UI(operator>>, __gmp_binary_rshift) + +__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator==, __gmp_binary_equal) +__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator!=, ! __gmp_binary_equal) +__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator<, __gmp_binary_less) +__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator<=, ! __gmp_binary_greater) +__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator>, __gmp_binary_greater) +__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator>=, ! __gmp_binary_less) + +__GMP_DEFINE_UNARY_FUNCTION(abs, __gmp_abs_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpf_t, trunc, __gmp_trunc_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpf_t, floor, __gmp_floor_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpf_t, ceil, __gmp_ceil_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpf_t, sqrt, __gmp_sqrt_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, sqrt, __gmp_sqrt_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, factorial, __gmp_fac_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, primorial, __gmp_primorial_function) +__GMP_DEFINE_UNARY_FUNCTION_1(mpz_t, fibonacci, __gmp_fib_function) +__GMP_DEFINE_BINARY_FUNCTION_1(mpf_t, hypot, __gmp_hypot_function) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, gcd, __gmp_gcd_function) +__GMP_DEFINE_BINARY_FUNCTION_1(mpz_t, lcm, __gmp_lcm_function) + +__GMP_DEFINE_UNARY_TYPE_FUNCTION(int, sgn, __gmp_sgn_function) +__GMP_DEFINE_BINARY_TYPE_FUNCTION(int, cmp, __gmp_cmp_function) + +template +void swap(__gmp_expr& x, __gmp_expr& y) __GMPXX_NOEXCEPT +{ x.swap(y); } + +// member operators for mpz_class + +__GMPZ_DEFINE_COMPOUND_OPERATOR(operator+=, __gmp_binary_plus) +__GMPZ_DEFINE_COMPOUND_OPERATOR(operator-=, __gmp_binary_minus) +__GMPZ_DEFINE_COMPOUND_OPERATOR(operator*=, __gmp_binary_multiplies) +__GMPZ_DEFINE_COMPOUND_OPERATOR(operator/=, __gmp_binary_divides) +__GMPZ_DEFINE_COMPOUND_OPERATOR(operator%=, __gmp_binary_modulus) + +__GMPZ_DEFINE_COMPOUND_OPERATOR(operator&=, __gmp_binary_and) +__GMPZ_DEFINE_COMPOUND_OPERATOR(operator|=, __gmp_binary_ior) +__GMPZ_DEFINE_COMPOUND_OPERATOR(operator^=, __gmp_binary_xor) + +__GMPZ_DEFINE_COMPOUND_OPERATOR_UI(operator<<=, __gmp_binary_lshift) +__GMPZ_DEFINE_COMPOUND_OPERATOR_UI(operator>>=, __gmp_binary_rshift) + +__GMPZ_DEFINE_INCREMENT_OPERATOR(operator++, __gmp_unary_increment) +__GMPZ_DEFINE_INCREMENT_OPERATOR(operator--, __gmp_unary_decrement) + +__GMP_DEFINE_UNARY_STATIC_MEMFUN(mpz_t, mpz_class::factorial, __gmp_fac_function) +__GMP_DEFINE_UNARY_STATIC_MEMFUN(mpz_t, mpz_class::primorial, __gmp_primorial_function) +__GMP_DEFINE_UNARY_STATIC_MEMFUN(mpz_t, mpz_class::fibonacci, __gmp_fib_function) + +// member operators for mpq_class + +__GMPQ_DEFINE_COMPOUND_OPERATOR(operator+=, __gmp_binary_plus) +__GMPQ_DEFINE_COMPOUND_OPERATOR(operator-=, __gmp_binary_minus) +__GMPQ_DEFINE_COMPOUND_OPERATOR(operator*=, __gmp_binary_multiplies) +__GMPQ_DEFINE_COMPOUND_OPERATOR(operator/=, __gmp_binary_divides) + +__GMPQ_DEFINE_COMPOUND_OPERATOR_UI(operator<<=, __gmp_binary_lshift) +__GMPQ_DEFINE_COMPOUND_OPERATOR_UI(operator>>=, __gmp_binary_rshift) + +__GMPQ_DEFINE_INCREMENT_OPERATOR(operator++, __gmp_unary_increment) +__GMPQ_DEFINE_INCREMENT_OPERATOR(operator--, __gmp_unary_decrement) + +// member operators for mpf_class + +__GMPF_DEFINE_COMPOUND_OPERATOR(operator+=, __gmp_binary_plus) +__GMPF_DEFINE_COMPOUND_OPERATOR(operator-=, __gmp_binary_minus) +__GMPF_DEFINE_COMPOUND_OPERATOR(operator*=, __gmp_binary_multiplies) +__GMPF_DEFINE_COMPOUND_OPERATOR(operator/=, __gmp_binary_divides) + +__GMPF_DEFINE_COMPOUND_OPERATOR_UI(operator<<=, __gmp_binary_lshift) +__GMPF_DEFINE_COMPOUND_OPERATOR_UI(operator>>=, __gmp_binary_rshift) + +__GMPF_DEFINE_INCREMENT_OPERATOR(operator++, __gmp_unary_increment) +__GMPF_DEFINE_INCREMENT_OPERATOR(operator--, __gmp_unary_decrement) + + + +/**************** Class wrapper for gmp_randstate_t ****************/ + +class __gmp_urandomb_value { }; +class __gmp_urandomm_value { }; + +template <> +class __gmp_expr +{ +private: + __gmp_randstate_struct *state; + mp_bitcnt_t bits; +public: + __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { } + void eval(mpz_ptr z) const { __gmp_rand_function::eval(z, state, bits); } + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } +}; + +template <> +class __gmp_expr +{ +private: + __gmp_randstate_struct *state; + mpz_class range; +public: + __gmp_expr(gmp_randstate_t s, const mpz_class &z) : state(s), range(z) { } + void eval(mpz_ptr z) const + { __gmp_rand_function::eval(z, state, range.get_mpz_t()); } + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } +}; + +template <> +class __gmp_expr +{ +private: + __gmp_randstate_struct *state; + mp_bitcnt_t bits; +public: + __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { } + void eval(mpf_ptr f) const + { + __gmp_rand_function::eval(f, state, + (bits>0) ? bits : mpf_get_prec(f)); + } + mp_bitcnt_t get_prec() const + { + if (bits == 0) + return mpf_get_default_prec(); + else + return bits; + } +}; + +extern "C" { + typedef void __gmp_randinit_default_t (gmp_randstate_t); + typedef void __gmp_randinit_lc_2exp_t (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t); + typedef int __gmp_randinit_lc_2exp_size_t (gmp_randstate_t, mp_bitcnt_t); +} + +class gmp_randclass +{ +private: + gmp_randstate_t state; + + // copy construction and assignment not allowed + gmp_randclass(const gmp_randclass &); + void operator=(const gmp_randclass &); +public: + // constructors and destructor + gmp_randclass(gmp_randalg_t alg, unsigned long int size) + { + switch (alg) + { + case GMP_RAND_ALG_LC: // no other cases for now + default: + gmp_randinit(state, alg, size); + break; + } + } + + // gmp_randinit_default + gmp_randclass(__gmp_randinit_default_t* f) { f(state); } + + // gmp_randinit_lc_2exp + gmp_randclass(__gmp_randinit_lc_2exp_t* f, + mpz_class z, unsigned long int l1, mp_bitcnt_t l2) + { f(state, z.get_mpz_t(), l1, l2); } + + // gmp_randinit_lc_2exp_size + gmp_randclass(__gmp_randinit_lc_2exp_size_t* f, + mp_bitcnt_t size) + { + if (f (state, size) == 0) + throw std::length_error ("gmp_randinit_lc_2exp_size"); + } + + ~gmp_randclass() { gmp_randclear(state); } + + // initialize + void seed(); // choose a random seed some way (?) + void seed(unsigned long int s) { gmp_randseed_ui(state, s); } + void seed(const mpz_class &z) { gmp_randseed(state, z.get_mpz_t()); } + + // get random number + __gmp_expr get_z_bits(mp_bitcnt_t l) + { return __gmp_expr(state, l); } + __gmp_expr get_z_bits(const mpz_class &z) + { return get_z_bits(z.get_ui()); } + // FIXME: z.get_bitcnt_t() ? + + __gmp_expr get_z_range(const mpz_class &z) + { return __gmp_expr(state, z); } + + __gmp_expr get_f(mp_bitcnt_t prec = 0) + { return __gmp_expr(state, prec); } +}; + + +/**************** Specialize std::numeric_limits ****************/ + +namespace std { + template <> class numeric_limits + { + public: + static const bool is_specialized = true; + static mpz_class min() { return mpz_class(); } + static mpz_class max() { return mpz_class(); } + static mpz_class lowest() { return mpz_class(); } + static const int digits = 0; + static const int digits10 = 0; + static const int max_digits10 = 0; + static const bool is_signed = true; + static const bool is_integer = true; + static const bool is_exact = true; + static const int radix = 2; + static mpz_class epsilon() { return mpz_class(); } + static mpz_class round_error() { return mpz_class(); } + static const int min_exponent = 0; + static const int min_exponent10 = 0; + static const int max_exponent = 0; + static const int max_exponent10 = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const float_denorm_style has_denorm = denorm_absent; + static const bool has_denorm_loss = false; + static mpz_class infinity() { return mpz_class(); } + static mpz_class quiet_NaN() { return mpz_class(); } + static mpz_class signaling_NaN() { return mpz_class(); } + static mpz_class denorm_min() { return mpz_class(); } + static const bool is_iec559 = false; + static const bool is_bounded = false; + static const bool is_modulo = false; + static const bool traps = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_toward_zero; + }; + + template <> class numeric_limits + { + public: + static const bool is_specialized = true; + static mpq_class min() { return mpq_class(); } + static mpq_class max() { return mpq_class(); } + static mpq_class lowest() { return mpq_class(); } + static const int digits = 0; + static const int digits10 = 0; + static const int max_digits10 = 0; + static const bool is_signed = true; + static const bool is_integer = false; + static const bool is_exact = true; + static const int radix = 2; + static mpq_class epsilon() { return mpq_class(); } + static mpq_class round_error() { return mpq_class(); } + static const int min_exponent = 0; + static const int min_exponent10 = 0; + static const int max_exponent = 0; + static const int max_exponent10 = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const float_denorm_style has_denorm = denorm_absent; + static const bool has_denorm_loss = false; + static mpq_class infinity() { return mpq_class(); } + static mpq_class quiet_NaN() { return mpq_class(); } + static mpq_class signaling_NaN() { return mpq_class(); } + static mpq_class denorm_min() { return mpq_class(); } + static const bool is_iec559 = false; + static const bool is_bounded = false; + static const bool is_modulo = false; + static const bool traps = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_toward_zero; + }; + + template <> class numeric_limits + { + public: + static const bool is_specialized = true; + static mpf_class min() { return mpf_class(); } + static mpf_class max() { return mpf_class(); } + static mpf_class lowest() { return mpf_class(); } + static const int digits = 0; + static const int digits10 = 0; + static const int max_digits10 = 0; + static const bool is_signed = true; + static const bool is_integer = false; + static const bool is_exact = false; + static const int radix = 2; + static mpf_class epsilon() { return mpf_class(); } + static mpf_class round_error() { return mpf_class(); } + static const int min_exponent = 0; + static const int min_exponent10 = 0; + static const int max_exponent = 0; + static const int max_exponent10 = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const float_denorm_style has_denorm = denorm_absent; + static const bool has_denorm_loss = false; + static mpf_class infinity() { return mpf_class(); } + static mpf_class quiet_NaN() { return mpf_class(); } + static mpf_class signaling_NaN() { return mpf_class(); } + static mpf_class denorm_min() { return mpf_class(); } + static const bool is_iec559 = false; + static const bool is_bounded = false; + static const bool is_modulo = false; + static const bool traps = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + }; +} + + +/**************** #undef all private macros ****************/ + +#undef __GMPP_DECLARE_COMPOUND_OPERATOR +#undef __GMPN_DECLARE_COMPOUND_OPERATOR +#undef __GMP_DECLARE_COMPOUND_OPERATOR +#undef __GMP_DECLARE_COMPOUND_OPERATOR_UI +#undef __GMP_DECLARE_INCREMENT_OPERATOR +#undef __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS +#undef __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS + +#undef __GMPZQ_DEFINE_EXPR + +#undef __GMP_DEFINE_UNARY_FUNCTION_1 +#undef __GMP_DEFINE_UNARY_FUNCTION +#undef __GMP_DEFINE_UNARY_TYPE_FUNCTION + +#undef __GMPP_DEFINE_BINARY_FUNCTION +#undef __GMPNN_DEFINE_BINARY_FUNCTION +#undef __GMPNS_DEFINE_BINARY_FUNCTION +#undef __GMPNU_DEFINE_BINARY_FUNCTION +#undef __GMPND_DEFINE_BINARY_FUNCTION +#undef __GMPNLD_DEFINE_BINARY_FUNCTION +#undef __GMPN_DEFINE_BINARY_FUNCTION +#undef __GMP_DEFINE_BINARY_FUNCTION + +#undef __GMP_DEFINE_BINARY_FUNCTION_UI + +#undef __GMPP_DEFINE_BINARY_TYPE_FUNCTION +#undef __GMPNN_DEFINE_BINARY_TYPE_FUNCTION +#undef __GMPNS_DEFINE_BINARY_TYPE_FUNCTION +#undef __GMPNU_DEFINE_BINARY_TYPE_FUNCTION +#undef __GMPND_DEFINE_BINARY_TYPE_FUNCTION +#undef __GMPNLD_DEFINE_BINARY_TYPE_FUNCTION +#undef __GMPN_DEFINE_BINARY_TYPE_FUNCTION +#undef __GMP_DEFINE_BINARY_TYPE_FUNCTION + +#undef __GMPZ_DEFINE_COMPOUND_OPERATOR + +#undef __GMPP_DEFINE_COMPOUND_OPERATOR +#undef __GMPNN_DEFINE_COMPOUND_OPERATOR +#undef __GMPNS_DEFINE_COMPOUND_OPERATOR +#undef __GMPNU_DEFINE_COMPOUND_OPERATOR +#undef __GMPND_DEFINE_COMPOUND_OPERATOR +#undef __GMPNLD_DEFINE_COMPOUND_OPERATOR +#undef __GMPN_DEFINE_COMPOUND_OPERATOR +#undef __GMP_DEFINE_COMPOUND_OPERATOR + +#undef __GMPQ_DEFINE_COMPOUND_OPERATOR +#undef __GMPF_DEFINE_COMPOUND_OPERATOR + +#undef __GMP_DEFINE_COMPOUND_OPERATOR_UI +#undef __GMPZ_DEFINE_COMPOUND_OPERATOR_UI +#undef __GMPQ_DEFINE_COMPOUND_OPERATOR_UI +#undef __GMPF_DEFINE_COMPOUND_OPERATOR_UI + +#undef __GMP_DEFINE_INCREMENT_OPERATOR +#undef __GMPZ_DEFINE_INCREMENT_OPERATOR +#undef __GMPQ_DEFINE_INCREMENT_OPERATOR +#undef __GMPF_DEFINE_INCREMENT_OPERATOR + +#undef __GMPXX_CONSTANT_TRUE +#undef __GMPXX_CONSTANT + +#endif /* __GMP_PLUSPLUS__ */ diff --git a/misc/builddeps/emscripten/gmp/lib/libgmp.a b/misc/builddeps/emscripten/gmp/lib/libgmp.a new file mode 100644 index 0000000000000000000000000000000000000000..b6a894c95672f0f749c9b6e68c2487b47ce85b08 GIT binary patch literal 735352 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 R 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


v>k$%Uxy2E@Yt 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

P-o9F8(O_cLcX9s7GRt4Ep@6 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

d7;zY;r&TUH+Wp z;gofY&B0dry_w9`Cb&Th)a@SVIPkR5*6UBhb1A{sv@5}6kcfiVZm`0v9165wsnc1^ zc$^TNNLucMspuvBr0J#w+}*c^o3RO6wA#hV3PsI22DN*54XL@Zjr}u&;fsDb06qLXP(}LhaY?*3F-6O2_xOYmt z8r7Dd;kV3JHVHjtP>C(dWD=WF^-M}v^_N}qK*b2RQ|wqfw$G5~gkGT>>caphB0e2O zgKA>8#immdMH&FJQ@3cFAqra=pn9=BRb?6Ddo9ZuAG_F_`Hy6zss#C=N`AK6R-Y*W?ba|gJBR<%}97tCO8 zZ>kSsn)0#U=oRc`pmpViuhgTPq)QmT3FBN2##`iN`W-Po-EHaAMMwbvR(`c8x;QT$ zZ}Ctri>uCjJES4pScL_0f1jc%64x*pfS{?&I3(05g;u*)!!udDY+C3ta*X+dqt`Sy zAga`!px(xsL6^0NBO;U5@%B}dHg~#dnqBobR%z9<6g6M5SC$GmN|tCsd6hjK`^AgJ zE$g8U_Z}W=1d(9`wc>9w0M3V=QOm`XVMxUidTuewxKe3Frjy8}+(eUJ{GMa!Y5|d* z_z2c`&vu~&>;sd<`YPcCEn%im7faZqw^^D@DQG1g8)bC64@zOBX?0n8v$%+LVg@1_ zyZ|85wxLanZJnk=V@WK>dQ41uE+*z^k@9B)dFq&J#EczEdNy7rJ6lo` zf9N@MGyA~yY|c+%fM+=YrK+t-xr@eQbx?CP5;t*J$*z>52)W1oC*_lg&!cZb_6hq* zLIz$H9iwE5#OZZVJ_y4I1KJi80sw*OQj!UFJp{lM8PFclF>CpR=s|S8(1x>Y0d!9~ z;~CpOEVx+dteBnI#5AS)tbyL5tpW|B zw=FSFV|`IKkOs8qhU?Nz7Tx$w79A@w4rP4NMT*S)idgq&W7wM-j*}G`V)=z2^~&t3^TV?Xk0?elvc$u)8?*lxEb&-BDl0<>^SLPKnWV)q)l)_vU@ z_GMgAS|;g^kr$*Y{bnYTw%rbenx{J5_uhl3BFf5%uvldFfQ0-SVEVM}0hCPlb_d?A zw;1V@wCWKxFi5d~Y4MEqudIKDmP;TjPY@_d=$yIK09j9Sv`0m12@0wUT%}{-^P1zT z1;0|-MWd7WUQUEsIL;Oa18E+b6p%&u~9`Rp>I3zZqpe1>@l z8w0PyiqZ}-DI@e{vbWJX1yVLF5j?`gx~y5PC~tL<-}rzACVN4GS4~Y@leOUm6`Qk1 zQil&7?ednzsczh^8b;XaHHBvd3pSE(Al+#8w&`NcvUZC#YfWURGuX;8qB;&uJIKy5 zjOfyars|mzgT10gwOZy|UKBHyR>1h$@5dr9iB9pmjzZv(7xGRR2sqHO*Rg^~Y zxqxsE`rlhTqD+rq-;9l8J%#SM3}*!m2e5Z>br24q2Xv#0%c!~6lrr3H;$sl4T2&b? zY8l;IVZ?NG4O2R#FJ1|&S-6V`l7Ha31*z@5T+ifm-Pdy6-N?c>+Ie^)(%L&YMfVF` zj_sJv!taJn9zF_V$LCJ%S=`I(t!_$i;Cp3TBNTsP4AUvPbm<366a*a|P? zdevec-oy14PQrcjQWoC4d>Tr7XPF{*Ytr6vt z{}a#Ion%axK}|!R6zO%1AU$^(w4qy7$I98eD)VYU##W74IT25eGnpr19kK-g zs2x2xr7K{>7JJ)Qd&`<<_y+nE;S4$l&^+Q^gz-9M$^sfc$F{Go>@mI$!VW=^8dn44 zv&N8OWh&a1CmnDFRxTu&Uu*=dCTTC_O-SgY;RxN{-doO|3UNtcWxj6w4q#TLzX zSA&QX9krQMtu;r+VG-jt(s%J9vun~Nb@13Us8?A(Rl7q7w-5o)^v0|qI(4MKGXhCV z3Nh1IF<_&mB#>Bl)rtE6!I=m_V6#(T*x@ZBUTS|u@zU8lF*^q3XmcT}o8YQVE{Hnd zV|~LA-IKc5+cUgzA|Syb&ae#wk{X8qNzSS?1HMi4`WPU0Xz@vMcGJ~P&AVoPxVHlM zPE_7zMDX6C6Y9;D^UvnntKJIeO#2=!-aV35HSL^ySxoyLUWe(Y#@Ji7B@JqV`)HF; z1YXhKP8oo;M;OHG+pGHaCh0d0+!EpL>1}7#QRD8U*BI-9TJM50&}$6Wqnj|YWoNx4 zsse6m7{kS5wrF;ww~-l8RJxZfslo=ymA#UF z9GPwJ88Y0iUTz14z{^JeEG;fEsAhx!=g+t_0fx6ZF}Egj?CR<_EOIC1cI^r3AQGm* zvON@NQ~SqjPkY_^Eh1y1?(fjdJ$iMv7P6ep3?fm$g4vQ{*DYs`?yD|@cnfv(^h6t!Z>#Or7<~LVqD$cVoo9Hmh-xHEAhI&%9e&~FpX$~Asb|)u)*-dZ7`0vagCbBS55R-?quvM5KvUbRXnb=wMUn^rLexd@cIm`QPo6)07Pjl@}G)$(^QZ z5E^dD$O{30pLRlR=cr17i{SwL0k2DZv3=tNz#vtHB_@hSc=3bsVk^!8M#q1QUYIp{ zo5b}>L2ue@Rl8FO;~SSik8}g%GB3O}kJq1fbly8^HyJ!f<3b7-Rlr!Gx+&aYf|uNh zCU%?tSdT>$P30)zfjV8PSJk44c-c8k>D`1A97f*Z@tIx#>1ph2fI z=x=>7$o#|7aPbR@zOAw}q6*Ko$L4IQHK2es(x7`I6W0JOBD_fLZBx%;5EA`=kXaq7!yAM1iN$$hy+Tlblk_atbP2<1biTN zU4gRRTb5sp?IA&C1=d#VMs+g{LlnVxWHSvzbZ6Q~B}8LSh9O$1Cqfjsjobu}0_Mu= z+CwbfWe272pniQ-JIiq8xB-~R3=FYYak8DIPHt$_$6Edr+c^&}%r#MKd7n<2k2$RVcG= zM5aav(jp*>2+SFM#(V>ky2|AAfKo7Kv1wYzF%awCmrNtUC+6rLsE}1ZjdS*i0>hAb0XvAjkqVP6KUz3oMw{ znbFN*EEv}rn{Yu`aBN=tOHqXVXI@_a0!s^SM(dA-1aoBJM#dh&6h%AdB8zLbx15$3 z`Ux;WE2(BAVWdmQ0RKN$8X(__tdIHt!ScBMZHDvPH*lw-EFd>sch8+$8InQsuZYRErAMGu69+R za&~^ykF1cUCODK`mJ!vPhaVz5y&$iJJFy~vt5FMAH|yb}&02UK=7;a%81@f{rq7zI zg(u;eb_)X9U-S8oi;Zyowq|(awpO^4>(gA1TWW^qa^1Sr3h!My-J*ac5uI}?646=b zoY%AeE+{3UcWGi;Tak!H%?nd_$NPUFe-7I`%$&M$VFTf2(xWIvjYR4UiBX$NR1;HAs3SDM-SXaV&@UVpSVw135u$1kJHUly}d&muhX$`A@_92*W z&^+oVKZ=A%(9%hd#+>w}y?47nzr%q~{pS6dy_4c&_&GiNlM}3}PiKdJ&JF*Z?=Qr{ z7;i;_O;5L&Y!D0mZSgVsBiQuepUcBPx5uI=;0HP*L}_=LI3ladJFrPumsg~WnvKtO z*F?LOU06POBPq?13v@gct^)G?a;?}lyHys!LCcDm8(>jt&q%4gMJf4rrMk`-E>)C4 zeobXoQI79MZ3b&de3111y))2j`45!*YP{$SntBkXeAwx;%p|KTXTbFA&d=}d5Diq} zGkQCGB)Wm!Ll^w)w%(5DhTQ4tq#?w^-4aCSydG@AIwwj~W3pj~Z+L)5*>Fw(qMv4| zm)N(0Gg$gZ6UxE_E;n@_pCt86!xKBxloblTj5=MI)^SM4?+_{%p?&<~U0j$ZJ%pHr z1*(x-!&O>?*4c$vwclanC}CIjd0I{m7K_%dx<;-e^}HuBJGR|aUkx0)RiMTg(B$oQ zaO{z^Ja6Er2%qafgsR1hcCbR&(Bo+6A9Aa<3!^LOT7ryeqDk^*6UU;JguT~}lI3WI z1QTPj2yGA(XMJ?I$-}%Tvk~0nA0fEaBiwp>IrM>$LBVGqGoHRu%sK+swO5@j{6Y+@ z2FqRnNe6taau|}^GzArC+Tvnn1kHs}Xd=M7^Xf79hUD&X%R9%7O@LOY$T#mbTpLQzS=@>KTMkDqH`V0-1 z4V<>GR@au6VMceiQ8;biR5vI`>z+x9>rad#wU6!q@Y~1^$hO)vEU7h}b^rrm_63sV zV##yErYxDu;>bM@fkr;Opwes^;u&85BMWL6+=kO8EqS_f>XT&Bp^&zBCxKSK4fWdd zE^M_?SAvSbW~=?(bi!C|;Zmb0G;BvTzRx8ge8f08FI0` z@}M~&rdUjaDO_U z-YRrYov|u9Yt<6TwnYiqlvF}%A+d-eoumuybVx&Tp@}1ietwS#O9d8W!^<(lmBOfIYC;o zW8QkL`x{dW1*`WSQ);g56j%Ka@p0!92 z+a($EQs)ea=`$8jpaG?{v#rGE?$-QH-6TZxK)wV{s zdD~R@(6(;)BG)xb)2-(%oo1%3jwHE*2bJn-Yu;i9_n$qUW#?wGVH2X53rkjM!g{gR zg*iJRF#P7;tRaX}+;m=&w8)EFmbHCDwY zlcUxZo6HldRv4z9U}Do%OWB@Bvpq2|NI0n-#ppy18}ytwW<#u8A)>HIh2L>ob|y1K zvCCFw!FG5z=OSZL>-VuWEEsCQ=pz|rijy>L3p&2wv{bj*P&Y(UCt&j~T(&q-@i9>Q zhLm-t70pJpq9|imsn@llyhj86-ZrD$s7>ZzN~uS`^~>UgmMO`1ix-M64olG8*bMx= zq#!Vw5LIeH%rA;XYPU=Z+e*FuSnu>&!1AN<)BEBDiSj(wfj66;Gm#~ISrpOF@zZn9{` zZ?b60F?vT?9};4zqtm-zTB?AG0n_&Oa)dA!I2WcS5?l;WHc(6qD9l$^dQ9@3ReGM0 z>|j|=Cc6MAofE^b%s;lcE7Z}B@(%;FFBWs#PbSBCtr}a4+q4$987AOiZ(E58wlT?E zGB?rKJ{20q1npr=P}>v})Bpet?;F7c`dwfGr16b0LB+7U4kp+Kz@you#00T-nw1h0 zRO%`*!N^U=1eMq4G@At`=xOgWx7hz#zSB&SGMN}6xSzaE)9&9_?0(rb@8j-2V`%ro zb-5zk&?3m-I9d}xc}DMktG#`ERM7zghY_WF#T?6erYUxDO!i2jt|f|;+nr?|w>u}H z+>i3bc5gG}Oc(3JHW*8pEqO}Y-Q0A2yWel~?XK+;w|jgs(0<(Rs0-6}*Va%p58UR+ zcHg1Jw}tJF)d3fZv=`%cAHTWYcHgH3vah!zZFfL5w%zxsiG8Vw;qC5tg2{^H#Da|I zk9N4kg~|@sPZ=c~8KdR#(00)kT)XBn!L{S$}ev zle_k|q*bFE@d?ciw+DUtT9A56Rv*2zFx*;sGj?9DOAo7dtk0?H{*v;vL0uZFy z+}^H*JKA~p+jbV-Nuq&gPUqpBTz^F<%XQe1UP`FS_pvEGmUE@wM##!1`1}#l$txG@ z;hl>iJb7C^+_Ei%Pw@FoJ|Ba9>GaE~bk-?IBM0`MH6FY2MghB7+LgwmRz~efrFilg zi63luy0mh%4Ob0?lW(lfUeoRyg;)uk3r}Hr6ch@o8Aiuk=Ov}m$DX%*c4M`B1syf^m zqhr$36rmzw7J{a;@yh zMN_wnrZ!*`p{YCN7g+1@VX-2+dOOg1salF1QE&rWe3!G(#3DdbxuB`y?eUnSO;ZJ< z5>#co6eF@rh+J^krD~#|z%EFPIAM9ulOh~@cW;l=)Uj97TR7G1DQRkaQF>ORsmPg3 z$dNwbA#_-LG#!)Mg;YC{iQX+HdM~Y}-cD?5iZ`H$JJk0biR9@f&>z3ae3qm1uA1q7 zx9Zq!ffUB_11zViyMR(`cek3@otj9HF;Ll1VWN>l7zvYu*US!8j}Ro1(3dL~KInuk zv&b}LpVHmE-R?!Cxk$oV>EGhVu?#W)7h5;$l8>xH7Sn+oSs()WaNc8*L1>I&_KU5PW= zRm$vR-B1sJs%Cw-F5P6R$_{%;b8wQ?K)QL5KfV95ue5Q(l3R)v9<_r)9B?6 zW3eqPui5dFE zOyM0fm=sZ~%|$G&*d!to`t3d7pg|2clJ=gX7`i~Mc(0s586n?V@L>0d4zb9gj-qEX zg9of(;f_baC{a^93TF2HtcH_8Sjl2+^XQ~P*2p@xV>l*d8&Di!ALeRdAomV3b{B3d zcrxPp2KR)ICcIPSIjiC%sewRrJXq3euvLcfKqvm2N|y;oaDmSxTsyf*1;d!XlrhqZHKaDzH!#miRQ{+jgtz zec;wz$LJ3NG8_pCJr%aVS2NPv1X|LSIcV{2p5V<>_GHeCYwAg}M*)#2C5(ra&;aGb z!W$bzRxnKJ6uT-91U{x92*s8mxTyETICylLwUBDCxT3&#!xDz{5o z=^aV5(miUQ5_oz8T9yO?rxlN6c!tm3mlvj))@%YM4v_F75wX0T@m9QI&;#dmp z*{AWy&KN6lg1S$jCQO@$dTceLVvozIx6DKd?u-g|EI}Cl-br)GWEGR3yp-qzCQSl5 zl!D1R1Ac?TP!>ipDf2J3c^RQ%A#Y{l&YO)sMH91N$qj>YK6{>a>W|r=sdIP#j^A( z^UMmPvSz_aU?YYn+9~X#5m0f#VkoLozpt_-hl)oNmk@~T*~J7J;?SMqIU8L|G)F1v ztf}02=hxdi+Qn!#%yKP>nT{S?rq`TfHIxn07 zE)*A)9vRXxZdQn>@}ND~xrPNw(yca&?}8?nmTkf13BqwwF^+H$em8Plzzb9_Zy|qU z9?Z?2vIWl93B|?5mGPtK^6G|hrh9YZ1(6Uzbiz1gENxxCb-xlz+XjniTO(~#eop!; z(yyBQ;(h^4gax6x)0SKQMQ_R=)H^lHrFP5GxXg@L|IaqYXG_-qS4)jj)pz}y7=iky zS$Hyx3 zx&D#s#e}Ke&UN=pH+*kqy7jY})6s5!_E}rE+wVVc&UjAG_t~tMoM=0_RVOAiR5H0# z7}QdumMr}Fv&DpVHgLmErw5CLE<#fe|MBI+CVp3LnUy}B*=sLcblH`cuN^-0$P15N zjMKm)+>3e=7rNimxNM+IGhTAis|PlD^*}g9HuPM1VTZz<;ANoFklk3%W|GnkKFYXB z_PV)W55>9Wk5a&Sp>&h7AHiE;6{dkRVH+Q=@im=;a_Jf3EbbA#Z` zD9g9u?NTIeh-7_+*F{j&aBvDkrkL1bq1vl9BCK9i4yQ1&a^sE|a@}}*`|u*S8K2rX}xP08Xbf%v`)xTSdCOn$~lf>sS%f$_P}qIW#U84 zs-0rTTkuMR-Pq)`R~@H!!@F!>ve1vP*7Npj^|KSgRMpntn}1!weZC#W4rSjKF3G}; zSr*<13jPS!cR|Cy1`R(8bo)}=u3pRaL0qps4+_3FZ-tZO+|Rqtw<^*7 zsZ_;;upyQ;o5Cbix!+OYq({Fomb}KW8qmH1V3!!tTZq?4GXrWX#c}F0#(b>po$tsoH5E*C_gQW&F zc?T@)as7Oe#lfRy6*WS)lr1aPH>?OwRaxDoxqSzgh3Nh<)(!PQ`uzz?Wd$2D9jU`! z(v-^Pusqtd2}+)U*_7iZQkvi;+-hlQFey+EIE3a!k!~@1dnw0(cDEY=Ak?uY$2LI2+(;5A}^7$y=GM4tF}Ep znW|)(2KG4Zg95lH0$}!Hy3f-C1S2ATdUyaiamBL@e_kW5M(cRd7bspZO*$bTleFrg z{4UFpN3~d8%qgBk^a((-X1zCdlSQ@77S%2lFi_RaRKUv;(7F{tx||J7zQroX)u5PN zCL{{dzOXci{Cv@RGA+l&6|<7>WN}5|9II2!ZEKZvigZf-F)O)^ugFXuUn{$!*8sQ{ z*Kl3B$>JIt5DwC>BSf>8$#pR$#UZYhkc6~2Yd>jrFIKg8yB12(VQQ9rzk>uyvK-$OO=t4^`=JJ$#|aJ`Z6gZJ|JBQj+@flj@cTwbRgkA2puXe7=(`@Ek0cR^_z zGf}5<%1EhcNJg>5MPE=cgXLe-4E`o=JJmH)jUA}okKSDtQ?NxId;>K^CS6I@fyX?0 zHa2OM=axL4JrJ_TO=UYd+*&vWHt9;^iR~0N3{jpAi$DdF*}?Dfh-l(6qO|LFfQLIa z$O8w59zrYk)niE(0SRK7XLcJRcS ztQif8D;bAU5-~w1B`?qN3lmeiBVtf3=8|`{nB7tD@xmzd&l-z*kZa5Di|~bSx@l-ZqTKZD^bX zEC8@lV$RmIC}dR_S`=CW)tkkH`}#zgK4Y$=8 z14GQapZD$49B@0)0k_GbRA4ZnfWAzn`t>?)>ficjPVjN!?Ba~ESdLD06J##OypKpGm3Jr;}3 z!g0*A#}t@&g)*x+BvDbxwouL}tz#{ncWu_z@~t>wSeFi8Bm7;p7p#Oo$^sFB;Z=~} zcX0hRWcV9gKSo{kWYkqJ%Y=U{ScOoribfhkFvM!f8c*Et2n?M{eCB zaPYuc@x0^;{dGIgWF1#B0F*`n6ka8PE(mjBMF{zaSYly%1FL{%JU@D9$SQEGFbh=4 z?^eiiwR~K1My@y1a+$Vlk}7Mzn;AAB;-(}3=c~laPB|=f&cUWsaq_jX+U?(6B zn#3};?A)+?@Yx`<_fLb;Z}Ob1PJ>U`tzY@AHit;%G(@4km1z%TJFXAzzxI0^Fg2*J zOoKbFbv9=nKkbfh*&?{{IuSws1TBilH3wg0kKeG z=vf^Ok5Fre9MT-VHn{i)WD4%Jgy}je*r5dq5|_bX>693WCOwr!7$!!Vz^0@U6m&YR zS;_Aq-p~MI~s1;hMl+49DIJHq6ODk4ZUrO1if9h zx8OO7hl=4Xj%Z~~xTQy2q4XBOR9sUM-`@!qzsJeQ7pI+=}Ox>UeaZqpdG#CSlp5|rZe1f@z5h38QB1~6Za8V&_w`h3MZ zsWzY26~)kw!+bfyy!!S8m@h||SBn)ePs4%Z7TC$3W2&61jG?YTe1M1@T^lO!Ebnd! zl-nzyMEz~f*=&?z@bP&Xe5HuFdu#~G9TAk=X~PS^cK4J($xbn*Ep@vB!uaTae$b^cM5sw4 zeL|Z*o#*#2Mkntg>ois2rn6vsB(0Z`0$;a*|6`swi9NFUEylt<5pFyfsHh&@?eb zPHmz;)sYORCHo{FyTB?u1h#0}|gKA(aBaU0h?2oXQ$y17*kZ{qq$D}*m{{R;P_>qtHF zO0K^_nD~3H+tCfam+Ri>6aU;!2(RF}6CL4~I$8J$*Nx~0-@^5M^n<_Vx^2478CG?I z|3dgW*VQv5ktDPJpL2bN^Q^wh^=s~3OXi%9qD%Y|*N@1w{{nQ1f6jFWy2Q`T<>B7B z5FQJFoV8Z8;(&X)2cQ15LFG0s_`G<~Qam*8z^fo)qc>kmrK~okt zQilCPVnLvpDCHCdLjEm@sv8|_yopFNU*Yi&Xc%}1p$YtrB$WFsfovjhl={YRgF8a@ z&001kt9+Cy@EC&qYlxk08api$MZ?%>4D;-Flm>(UMt(_H=#pEOWx^8gis=U38H=3) z`dp`2{%SyDWc@@zG*I2yAi4fUR0es-4$zksK#kfnD?>teHyLNn1|6CO{Gd)d8K!VE=64vddGN; zw;rvD?9r7<DiXOnsyt>7>8{RUEdta%a?GRek#e0q|-ifI9 zt14er=WItN4gYT*j^yD9C~;np)x#@M>b#HZGyMKR)(F4i`*ZO>x(!>)9eEZ$&iAiz z{gmHN!4>rR;OLigy$wA5AwIuWYn^_0>)cb(&z!ej&fI3wx`Yb~#IzpfDzq|HbIH3! z4*w@m%T(1hk(B=i$S`VEP8}IWJx^5~V~U;ivExWM^}Wv#cKrVKY}wQ?IZ9s7Dwq#C zu9wMVoLNRWgTD{CV^FpbH0yY@cBQarbI?+n+7)q4eCXWr8L4F8qXzAj&S1*2YUG0% z>0RoI)8?u0L~F3ev@jh)h4gF1evy}v+ReYT1imx zh8SMzX_P{u(9>9A$5|<6D5}^7^fXiaw0`m~(M(BC!!7A)z=z6+H7E7Ult!bGWID+j z9ZS^Hw8bSxg-%BWl`U&V01}Vdq^Bm#lQdt-8aXH!Ckow|GG=*t0NY$BYnp=xnO=u* zC-e)_-Jq^%!O@GS?v_Q5>zH<6UQySm!!AQAbY0=e18iVXGsABwaillfKv&~0y0C8V z8V^16uHDg)Iho6J6gd3rY}{dCR~41InzCi*-g&$1=t2~NsvW#axHsu)32PylMvQ=Hz6($m(k&w`p;p{IZmG6_8fpmT0>#o`UH_`hcG;(LZ2hV-ftKA> z3B61jQ$-S%^i(M_K_VW3Z>da3wGAl~3iysI6I4;DOeo);0N))EzC@?Q1rYBDzG*m? zEKGJZ^3Y2xX8p$ezE$wDPR$j$3fy!L&~6UQosnn@Qm9>&SWLU3=vjR3%WJ5JoiH-2 znHd4*uE+r?5sfeOcxPm>>TJ#N#kwmhxvFnZ0Oqa;%xbY>v8LgWrdvj4Wi2f|N~)_= z8{RyYs(`e;ZFjc>%3T#uPOX`Hj+oHO;FCs{X>JZGMeKCZ4M7Bkkr)G zw#<`9R#+&^6SPNzC}>E%eq~f?skasTZ9n@1)ixfqCntrmN#{2eg_a z{|8Kyda!_y)QeU1px`qfF_OzOdoQwymF+fhCE@1uGUc~V||QV(JibdBIN z{1+C#s4E;%50(#xUa6=D$y$TXUkXAUtBgLeb1Di#7q~W85Pn}0QB`97!|-#2(3hbg z{3OEWH@U7sId~J-UG;kSGS^SyF`2JMDfnIvqW>({btnd3&vh?~!N=lJ@ak4Qyo>8o zCgmP_%W_upd5S}&Vx6h6ns6`CvhJ94$gxoNs{p@ z6oVh(dg62~JfG|RClW0E0^_V#Ve7IhY zLh!9zpTg1b+c+8ilIs;@6nj6{uTcnIyHG{T-`ReeDILwb;@nfvIv#w`!SM*9H;6aiy4JBOvfD8?o%`-dQPtd3)Q;8L2TN^a z^|tGI{sraoO~mk0N%{I~B!<6sKASC+l(j39lJYE9+MyFegNHc-dAtSAQR1hDWN-47 zO_egDC2&aL*!kc!E$4uwUy}y#L2k^CnAikNvUOA_46^pU=HIVKzma!bFqBZLcM74f ztXFy8so><^n8wP=IlW15*)K=Ssy|v?ijKI4v~`t`CGvL=CmNN3HT0cM7^E$55a8#P zc){IrY&aG(&#yc1>Bz*W&xmdAd}n@QBt$B}VC`2Po0G=6fSGkrNO8c3;x7%c0+`t` zz|2O{oZcD%%&b$AqS68|smtW6Ls?*&;CvEffQxYw@axw0IxAtW0uZFL6wqlyiOu;WgxJKlAg4uH-NTgB8hc-{rrlhwe;y&I<=qq0G667F>1RdHuG zqKNd?$k@Aa`qSfL?B35bc5uXm%^oAw}nnGjLgI^GQO+Y@>d!|Q7!NN4DwW)Ziw4Y6sl5nKLxp^ zs+?#|=pj|Tx%H446GlW%G5MPUf)hr3kJ}S9(T;#lRT`jad{Xb82<;{wxnSVdZ)a*WDSZdAWX?VbRY+cp0wCZ$;3!2TRxE5HkJ}>(-rIe^;xAUvphk z4@BFC@D7BHzakmR&qx(~9WKou!KGP|NRMq&hU>;=2!Fx#F`|;bK}6D1aB03Zx;1|v zLFC!(dUz?<>#^d!o9nCXM)(Tay!>o%{zf(ED=C%;d&FJe;?PE5k!8B5b}J4 zk5_Yj5zmD0ab1V-aTC|;@JzUa>+=XAKjdJQTM<6qz;!2{3BQ`Dho|C|@DjWd?nDsz zG}m|e{uI0tUWix1E4ki*K=MU|lOOP1M`pg7$fwiF?fT4v`w#Rg|84G#uzy@Gc$U^% zUU5B$!A|*K>4DjzHaRV&ax_W`@~<4AlA@K49e?B{4?jW1726wG=)4QwCS-4KWSRRB z*Ax*VY=Q*ub`^^*NOx>QbE<`6G&4d~tQuLNt1sl|gQYlELwBV~XvAVdWN3Buz~1l0 z$add1kFRmWG=tS?qXP^C`{SQC;;5i4*y7=&U2QIwu;TIh~@bLW?UwF=W=RWMfS?68& z-~;C!y!fIA|C{hCwLN#@!efs(eB#i<4_|oV%43I*=l^!@(ko9~_^`FZ4}8ShWe>Y> z?fAcKAHU=gM<00jk59-;%H;g5dPyBPdpuL=iwu&Nf)}=q zp|(XAD4d@TJ?z5chcDvt0zt{5Zw=FK8=Ua6Px)#EVj8P4^VAafR_IkA9Kdxut>5cm7g(Us-yHn8W9@u~G z_<0jA5&Y_tv1H**n%@HR^v`tg-TL@+eBy&t$m>R#j~sya!Kc#a?0wVOQgHwt2`!G| z@=07d?mc21l#tH$?UbUeAfIZ~KvzcwAK*q-mtkOoHka~AAeV^`v9;ycT3 zvS~TJjZMp`JcLzI$Tlx7N7}rBGK`X)(93sHUuZewIFs4NNmrR{$|I&cJ7ju(f zM*^`?kABlu(+ z@6<7lwh*T?T$gUL$;WTPEtP}waq%+L%$fsZf;aG&=Vg4EICfCbAj{N}$+;jpIZH)K zMH*SdAq>&ZzG?`f&WOXe2>^0FGiVBP$+l}C?dv2u#b7On94>O3Np;M=TT?3dF=+0p zDU%G2C}ANdSY6bqIYhm@DRo@CN)w97C+2Pg?Ri zM?oq(c{~I#4Jm0`IVw47ELpW;69V|BQSFMWi4|VcPy)QdccG(UR0f^1);W~B&|6w< z^}(}&U^Y~%okZegt-FjSmc2)jQqFOTeN0W2Q)Qi_jbfNKGxUtzZBFHLZb0dVH)?iE z?&Mbc8A7v4q}&EsixjqO3@?-+{uWw`eM$`3O zG+h6Prt1dG>UWVQ_)AkE{F3i~fkx|Hoj}YD#|d|d_2Ee1FY@_=E-^A_v2I11_3r7@ z?BFa(duN>jAG819xlwC%L798!7QwjSW6Hq(B==R#(H|E#vr!bxx6ilrZl#wb=I?*_;f?u=)7RVn-%-j%b@XBTG6& z_QS1PIwcuFNpII?hZGrfrktx$20}X*f)8hnC`}z8t7+S;`QUELmLq`;VaL&`2x9rm zQKCOKDY$rSzkGXAe?%MVGJKVY>kMej_o`uXJt@kq@J`Q$Vj1)m>78lcms@-(MtBsTYd7FHjuxin;RSU@QSCPU-}&JL=w2(2pURFpi%&E$F-BDEfcT!XM}1@#xN; zi|ylPuGeQ|J|o)a^L+k@&#Uu#xGisl*C0~9n<$@8@cC85${+Lnafp?7g4sXI=TG>2 zJob*;uzkFZ&+ib8d0Oe?&ODg>fqM4eW_E&e&x^@fdKC;E?F3_}Ie&*>U)#VtXc$>$ zRs5Mu2exLg3H$<{CuBdXWep*}8cPQjoo`aw*Mz!yHOFk)oT$@XSg~~%9JCI(z!QYQ6e8Xf?B@W9QX-y2Gg^jQrJBUgb4&)iRj2}9*HHzE zBFPd6GIBhWIM=Ho8_@x7nLwxhi2a5Ij+JtF8R@r2SYX)mq%JphpHps=KsVMGbwlAa zaO}f%=_VZe_)V}zITRm-33SmA0BfZ!+A|$gO+A?sH0iQgOftY<3TiF&oP@+c*uG)W z2(rmwg%#FlP&iT%H_c%8jHGDrXjD|HOt(yA8!HjI;dNR}C7<>(TU#OI8&FqA2rnJQ z0L^f}Ec}-&+`+E?IK0}|`1~QCr`gUuJL-J4wsZGCXu_Fa>+al5Eqo)aPgdQ!6%$|D z;G?_w>sM(vf2E$)tGii-u(+4;@nPCdiq6_yUl&GsG0WJh^wK)piQl7p-vy3dO?ihL z4di}HtGI#-sLZQ2ERZ`rOjrPS1#Qs$d?Az}EMRszC>IU{2@BK>@dyi`ejULAxw#)l zEHFiVBp5X;5C!47VF9ZYq=qL#!UEduwD+K4V2I&+NecSE$?YH#3pxF(8hWtKpT_9yLt$hR{GC&Q`i!F_0*MAy$#9vleqLxCTa%0m;8= z+Q!s1yaHP%#PBqu8y(|J{= z-k8Z9$>?Pfti8tXuyMRLT(i9EQJ1PGI34K{>teWsGiT*bV8RKKffD;04xy*6w*nh5 zWHZ52b%M%x)!K1mRci}xRy8m~*0OESaD3aB*~k5aRCUq6`5C#Svhr<@!5#sw!V4%F zxeM z@E!L3&)N4+Wv{;g1<&cb-w$kIzwbYIU_2x8`uqK#n|1g#a$(5+v6;1ub%0?{yCHD_ zafj!4j>JulIwUHF&6dnN#-95khA$>ETda3~N-Qkv7M!AuLNPlolMT>yRX;~O4zQw{ zs$UV|4clxp+H6urgOAKG+f7VCx3b@Kx&SI^hAfZU)dQel^(|gt}s<9|)-nr^dS+)8K7Z@T^o!k6u0A4VDnSM6Wjqz1HEX zCZX2~LuC%FRSY{Lr>3*=@Pmj=?*f~C3#|I2M#c$yISQ35{3F-bKT9qyPV*ZAb+7GW1y8VG9wL#6y>TyFE&McTNX#`G` zLRg2jWJ!~vc+iRBL0)0W95pC8b-5Y&+FbK$EJe8qe5wo;W|Gv(2c(A<@`xOoVQ?XG zommg=ZWi6KR_pL)hKw=_km)IIf4)v?QLZ~Emq)rU6eNB#wg?J0l%yIUT|`TIRvaq zjkGgfqxQO~UpJ@`2Cln41Lw|VB1!%Y<8{#absa}AkT_yU9F_1@(-%WZN(N51CYK1^ z@cLl}?&gGH*3F|+Xn)_WqE#d_8y=8_-_FBjF15WW%feT<{s9T@b#QY^=kx|Rx;G=e zeE{4e#qPIHJ1OqWvmSJcc;?`^&(Oahp82HVnNQSRziT)~Doa+5_SW#0!j9rB8yi_W zJyP_vkBxQH&KQ!Q^7AD_X(0+jl-t#}xSo`P&NMp@)=NwpoTK*ms7GF8U!=cbpD6Fo z5E_fP$5wuUMqsfb8ZyY7_3sS>yooDU%$3KCUI6pIL^O0t3oeJOfsb3 zVfuW|s+eTG5?~SwZ!US2TM{N&KO^EssAOM;ARVsE!-qj3p8aX8tQKxDU(8$QX{D0s9)Mx7s$4?p$FPrVW;CazPSqem*r zX!obLBK_O&EidEoEr_0OPTx(H!j6%It{7rt1NO}4+Un=n?L=R_{-IaZpV&GwApeRE zY9rSP+mM@Y9dy#@1*Bj21w_42JD)~FJRn{Lh|AD@L$07gISH@G5`%t4UxxztB|Q%ITEoMLStRm6?54w@F?!wI81$Nlrh^D{zDf2?>t-tLao^e z?AK=?&a58Z%;%@LzRvd_@p%;p_VYOoS2_1UvbQ29z6s=d9Y*&rARnG)GT~Wg#b~>p z{kJKGJ@>%>Ul?}OU{}GKRZO}bB2HL$48uP5$zc2J*Hg;WOEd#|d!f<9pyehH$q1x) zT$TwAGQyJSj;nd~o98HOBHogziM{PumQ~LtWYZD%f>79HsdJ!+NnkvX;-vDHnu)q& zRZ@8h)?fn-$!XHx>x|s8U+GTjm#hz!I@C?Q5L@tGCz4>kn=)`)U(Lke)yL9~*3+Om zv`rcJOCkkl8V?%0RJ{*itoqENHY7WHNXZOQBgH5j#luB|0_!rcE9LA{3Pbi`*-b!=e{$p>3q2MnQ@yGVRCoHq_! z8-5*Cvl-jz$QC=T@%LfVDw7o>m)0LIyv%sVrEag=CIom}7`oO-gT_~FafkarNG+%D z2q7JFJKh!kbr#Oc!|&I^ALilFH7r(ncoB5-ommz>!S}E5{a!xh*!E%sl|SeD7}wYN zeKqv-)0|Ou4}!~IBCI?Odiqwb8=F~p1J}n-Kb`AY4?ZOc=D?(^SgvuZp659x!^GgK z{N14L4bS;ZRCNQ-m~{y47(t~RA+3+N^zx&JkajM;a_vy`B2IT{qjGmWLY?j-NFDy; z3oklBEv2LJCyZF%)sZ+PqXvAtNH*!%kM(1`VM?pwnoM)wOreNIxn-eIaAK80qOFWH z7_?*ol1{**(-+8*m$15nf1Q3KYl$X+Bza`5vnS|Kn0-hJILoougzR(1yR2r_m9o_7OOEd--u!mPK_ zJ%PXt+tZp2X(j1?6R$&#ogs+nw^C*$h>4n(5KGlSaz!dqF(!w^NP|0K5*TL1g4K<9 zFubz=k_5QuKO%}*<&Y;ehS>;82(892GdzYF8w0i4bg6BIQ`S1WwdqQ2_^hVs@~%HH z`9o`=RmQ8yWM~l_aWWH=gSajiYV`+0Un(POSGnexXaTU6#AVfwdO8*M=B8rSUIClt z(?hN2&fwac-uuK1AwIUIn=0dMAU{+lt!SPMHSR##MfL0AQ%UY1 z_KOGN9b`pa>9D@wQ6l@$75kL}>(YWstX-9n(RZ4mS4<-n6jLMW1E=OITv@clajdGj z+Sb~FAEJZcfXD@5VRg=k=mTH*R7%2bc9)IU8x)0RWOTl4aCU1A!dcRNIGmzEKwD{x z6So1YH&a9+pHef%2`Q*rMl5Lxgc5Y#p1kmh3LKj!w9_o6LTIlmL|gpF2<<282(R|}R(PI>PSwnD|FA0yXJz3(=Hb8A!df2Q3c4X-g6SkPYlE+3eE{sJy%QVenoFu)BRL!;!8|I z&O+yn*U-o8b@SP@a#=Y04T59KDIo$MgZiV43)ZedFwBTFlF$r^iBE-Jnx1RI6iZ}# zbnz}Kmh7x)lxQFgNG0-!PGxAAF0nsDeXtvL>gL>FZv_j86^VHZX%!4%F-v%inD#34 z6?XzwH8Gjq%o|z-pSp5uoj!nf&3lB6k5gaKnh>`1eMXPzBMiUzhq5Wi_o+4|NR@m` zf@N;7ETNY_%80?{&;t>2lEuEF%h1;ffRrB4(aZYjIk$4)Ro00 zWadO@tB|=*Z4ePp9RwAlCeVo*vk~rQ&9~Z(CZaX5btmFWr(z)m_>XiUErG3#P;)Jx zY6wE)nRasrPN~X1S{Pm85d4ji!Vh#_1GlFcsuRPR7?!J?VUf$a>WnOe${-=eI#~cg zQRY%K0}khlv~(#I6(C2XHdCsqxpHv?BV*z_t6Pgc*r~D>%TA>_ivz1e1lR)2N-P!m z6U$1|oq=Ghh4=rF_vTTSU@0@ezA>zi6bC#S4OPAd)ips1(s$biy?&@wOL7Ttc zdw=wDWmP2!Rzy@*1ky=P@%As{M)LxI@Hpg;p63MwM{00#z{L_ko%=d%UH20;Z1 zQR;oZd;fmtoO>f8GfH^foi@p>IQQIhe&hb_;k);5|5$wbpeicaLDyngIa8hpExuZo z635vjJmvC>%S!d5_o8IFn!>JJRcqCBA=IUMvG9y4A_>lwNY6*eCAAO8n!L1bB!Ff) zf!mNNH`voO%%%Z(ujrQ^wF`ZBiRvp>h-9rm&)@$p_SxCKg+6idx9pvg3Mb{-056L`^D+>@U}6yozS)UG7j zr^SOW92HkcmKucS$PjBvM2I#sDFRUqvSb5@3v zAiWnHSQR+AS)nvcc-b(8{t;y+_j6XiR<}#9!9P%Ql`5=JmTrPZZofIA?5bN{D=*V- zs?!wFK*)M(@sQRj4K8~NEGDwhn9-wbHYReBmlzlu&TT{2Xd~>AvjZNHsbH^qc z2B&V?!invS+1U0tqH+609%(!-HvCKM;h>fDiw&M4ltF`(H5vR`kz&UeqjXUmL2(In zco(=)mb8YeT}d_AlP@h%B-=bT)&(O%AMrc2F|965cdls|-ljEJYq`E{i~aPwYPpZr zA>!M$+|R3=rha=kJTuF}3s7pm$ls@<$i52X>P;xH&&3<`5|r47`1}k?>Vtfqj)M9V zD5yWn=M5bW!XyRdAEB&%itm@Yo$w>1q5Ke^=k`0{^?cq>y2%d=^6)|O&|hWVq?;a| zzy79U2_3tw-evzY8tqmcVHhf~YhHidGuX9*u3EW;cF;X{1-6p%+JLG|sogW+WvXt{ zsw*#6(se)jQhJ_!cwOn)*+GIjtChvFF%3ZR$4bkNbE#6Z&NJWZ>Xan(kszlbORw;OKtZ2-)x(?z04Sf@)?~C!W6*(F}x$+)Q zD?PLNF78pRDcb3>#n4`{Y`_+=)-f8VE5*{g6y-UNEw%t-DQogXSc$=sR5#j<`niX8 z`vAoQ(itF$sCr-&J>fxFUrim@9Hv)Bs4yhd6 z&6?a88HEs}k>TgPjf+SH+h{Va2gf_2T@0K^RTCz)Pbx}U)b56*a!G7mbmYdH$SXS3 zAVQHy)&1(by5Dc$HW8DZ2c@J1p!H(^iBguy$O5ITRO6AtC01gKK&N8T7APf3HXSoh zgNAAw6R>J~E+9?&xwT8Z3Z7kr0BtoN=2AH!B0V1F5{rU2-EyjWtgqwge|mR1E@0KZ|7jHkr4boVuXX>m zar?$_E%KuXE7t7&&0Al-mX?vJF`6;t7TJ_Y~4)rMFoIGE5Q_ zetzc9ph`rx!gJ=_0Mqrn!V8=0g=_=mS0U2M@(RavbOn{h3dq#b#|KRX(imf*G)$0m zm5z?IZOJy+)-JtTE)?DyN#BL~Acz<+-7q>w{89^( zfw!xo^@0fkq%mRKN7{_a!gt;&%unep5HpFy&2V9ho}%FhnpD#)p{eFr(pJ7N5F{sY zl0Wv7`HKN$B(A4bpGhFAfDLS{r$pkhPy>yKu}-szC`lyl;fIZOd2daZnk{R9f&~q2 zzsZo)-O}qCWri}5xb-HIxpgX%Iq3n;t`!=p88YvS%+qPMQu{8~#7y1IQg>q$x8K~c ziH!DGEghE&je&VsBU+iiPUcZh!8y~Q#F5Cn-%!qWp+*TZ2wYs7z)V*bpbHI_jNeG; zu8=i~k5cxEg#JxN-YV@{uEfEsz)&*~d|^Uv3WgQ0AJ86YWWs2S++}ar1#Q@w?g=|K zS{y?6aB|T-YeaMpA~8Taph)$;rhAHV@~`Qh=@#8H1{K{86Wwbw6;xxHiy22(eJwBX`+Obib`#M!4oT6Nxv=-i=hg8oFl;!0DBH z1PocF`7+R0$)*)Yo?i|eA-2g0BD@d>44&AA$|O0X*;{M6~@O*x#qX0N={dGw;V~{U_jmU*hlQdql?d zi7@B$R~$KWKMw3yk%;rxNXq#s&bxf-up6E`%)^U^S$G{uIsb32-^=x%kfif7eE&!O zK5LY51}4t%Q7^oazi;O}%nx(@=Uo3CpXZH>@Waa-HN)pK2a52)gGKnqYl`sEuPd%P zys=6EQ|fiai34?6Sh!)8W?IP$9s&PPm}1InNf2Dmh|xe3WIQTdY_%naLx1!c|jCkFjYL zzmBnKJuI%yH2GQ=%m&7<9-)8<-|Mo;04?1sRlxC8d#FHyTM7@R1+oXpB3q>iM8@yZ z;}#ow-0tm_R;irP*mBDihC+s8{`Jb`s^uIcsEQkK+drxOK0pc8Q}ml=2MME2Nq*L& zwHT+PF&T_eJz#sAkqWW3fvMoQIB+eC446S|J?L=z#4eS~75XN4OU}|XJc`6O${~?< zjnpc~dZWGIPs&^~%m8bEIip>m~c;Ckg zBoVUoNZvRm6~bG6*BC7{$H?PltL5kMvQ)MYq${~e=qCR-RiSDCc<$WD9H5ERKaTAC zz%0lT!*aJ*lcQBvLm`&~d5F9g1+Zvjs+d;xQi*y-8*Z16`8|$^aB@_@S^8+K6hpf^ z#(HMxLl}Pp`I(?)qc`W)_q0-2XZ+(JgsShDpX&SiL9rfpN$^M0us({t=imhm^uh9= zq=f}lTl^L6ta>Mml_j6ZAc@L-)=THjbU)TQqD^Ki!-t|5#Oi`v8NccM@k~mMnG&r2 zSUh!J-}U=*Ui_8{au%37nEu>@pZjP!c+>Ah7~3LH4pWMr`u=A;6cgm@j!J&ZGlvd0 z=eP2m)*LdPD4={I?fwurSKJ1VS9mTSTX(|?Gmv?)>)4I9-0 zGz@;f7nd;j7Q--@rg$SLQk!|I5%pi=;irdLWy{T9ZP87iQ-xFe(<>>aB~6E_2B?>d zgK>;!oa(!P=1YGQ4_(j==5qS`fA{P^h{K3QvlQ>n4&|~v`MGz$sGEjCEgMYV|C|3J zBKHJK@%_GPn2cRa@2{R$Kbge13z;$4rx(&P(O2=4*m8Ysa2uT*GPlGO^!;@2rdpz3 zRa0I)>@v9eRhyr+TBGO6si=Bb&VCrZYERNjyIiKJcf7$U))DU`8Ti?~ODGZ8Ol_7tDtJuk3KzL+>z^Oq4 zxxgATU%J7lR42*74@UQ>n$#wu=9vUEwPt8vz-dePDF&1%654=t63GjaEpw4&Me-?Z zjx$SiM3DRjk>uG3X(X@Zlt?~?&1sTi1-UA)Y~d<9uA@luRoL7T^Bu$HwzbQ9Z6rTi zmORDK)b^WBQ?XlKtLf#5rpp%_@RFl2Y_I9$Dr;&j%V!2!sXMx+;#O*hCY$9YI zPYY`Bf(YO3aYQ40*Q+?@S3&lY&Jet0!aTt@{09GIf|uXG30{5!nUkpaI}yAY&#;;q zLYI$^>5!V62t8+tkT}knM8MkPRS`OeG%EU=K4}qJK15L=D>%}mWiz6Pp)A1}LZ56B z$^>sGjWZ(6d3(%VEyr_B4vll7Vxe*cBe(nzCo7zDOFTX_zE-!(30*GAx#Oi^%_4M` zYNG<(WJqRTpX2RTVI*|xROIgiISP!LX9#^Dbalu}NmO30i3FwsI%qsoyJ_O~n>#iU zLbvriX$H<}e?4{YaYS?H?-({wHHd_+KouH9zi7OafIaYcnT-&-X;z5@p$iRG!y^Fo z%yRa{J#zL(8+og=8@ck>n?&f68Qx;ZRTip@Gxs&q1s%O>jGdaD-empjm&C&L_Yp_DOtVU&JT&etcqoj!*23_`u$Q59~EP&NE;W=evo6mmlo)_`u#aD8la% z6aRUxKY`Ed3;4X=gJ0{9@n`+jh#32E7XIHcho|uOO$%)NTwt>)f1k713NPmKi+p~2 zu^m1_O#P?0{xa9EB@xtbuzmHtwErI`dHA8FEWB`uSbqM#X{i<7$@NFL{tK?Z#OH^W z+u>!)o$yP`t?)Zse~7<-&gb)7fBy=8H9jxl^STwXU99xNd%6A?pa07Bm-+jHs~oTnT$=@CVEVOfM1eFOf!Z)8L4Hy7c{e6Ft8|2xlIJbmuM?f2Ys z&JR?-k}vLtn~&X4+W&5=eR01jFr!}u{AV1Xep{|%)T>Ra^LhNjZCQ2JdfM^IQ4enr zC62YR6qnf6oo7zpe(ogaq~Cq+d-4$C?eiCIKec)Cp1bcnbK&&4;@(WR)7B93R@`;> z6HeZ7=B{HW&v07&$@6!9@9AKV_;DR4FWhy{$#bVqpSf`E_A?hw-oCYU_bJZ+IEXnh zD8f&in%&xJwJ+Dtq-sJ-^`~cj$AUeZZYh<<89zzh^F_`z;fb`yvlylm;k&V;mZF0_ z3+GPXb@I5kX@5%GamPJ(9y`fznz)l^IkE75O+gVt82s^%>*~iBvXy(k-f*PpXT#=t z>sq@mTX1qtFD6f(?fGE?kT`D#$;!R%^oNVb`fjf$uUlLiJA=xeM1o9O6c)CzDSYDI z^ZJ6ON>sgM9#@3&PdHXt*j-!4rh0-y*};xxX^WkXwAWTTz)db6dt@4P`IsXclt!!A zS$F9xb_%L?A1!W7?>W1uS+E`%(g5_uk2kE(v*AXOad*XyS#fpg; zM2VBEwk@B$z#cyC0pf2~@EIag;am!I;pt7i?RmCTaRHJhI7J#;^Ibx6ZQSFFz-{b; z^YVpduDFBAuc&_XT|Jz0J$PAp5J#W-oKkmk&Rriq`}(166? zYldv&eU*rYW%%j>pDlJ+~gP6z0)>ZVW~<)e+DOwi>DGOauY)RS1rOjLS6(pKoAwHXh_ z?OLywnFi9)3PaYQE?MstBWG~AO|54Oclew{Bc=8I zUb!Z5%5F(|x7JOQc*RycPP=e3;Dc32HTnjaHk&`+%1pVw-&3?Abxt4AjtxKE(JVK~ zB~EKla~kBrvDa}_ojS^8Q3Yi$dycH#r_!`7hRPe|Df6HOYuFwLDvltJiv*_kYFA-w zOua9$MjYZMWh2H&4*4dO;LEk19Q6kJWK3jZ+d+OTPz#2V?QUU;Hblzp1xHh7;cN=` zO;w018n06J6%S&fmD-XeJvPk04fQLsO+{&=FJD+dd@+{yP5H>aC}$81SSy7;+KCLy z>Ko7+Nl5%>4Yb|Xfcg^+bekVPu880=?O~0l6PH@r<|(+qJCVuAF(vZXwjN6yGbK>O zW*9;jnQoN(9)@nKCL4-3|b{K)x135u-`G$s9*&8G|k)iwB0+VSDBhLDwUH8BJ0 zqKpb{W{QNBkps`4pdjaYHkAAa4}@kn;8);xO>k_aA?&Uv9VEn zw65pLY-sKkNsP~ijVSrL)2BRc_&}HZk;Zu7i6S&54b&;D(}&<&8m{)_8Ioc;l-_nT z(?sB=v+M97WF{Nw*V^Jm;&<^YZO3A+iAY?N2elCaU?84vV$u}KQuAfF8CDzSU$t@) z1=*KGLG~q4P$AM$(fm>FNhnA{8gJheOo!oxco6Aq*L|i*OV-?fyo8AjWQ94WI#1a4U_#+VNT3@P%3Y=V!OEdOFGev|g z9T(B=y-TfTmk5}m=2}nVODPw5zpp=3jf?b>g=e;X4#^0{3C_|U{JRc2L@+7< zX>w64q;=wm7!ubgDymjV2`N>pg5p&_-&-~`h%-&BD5fmF^9Yo}n->Tu6}g-%`zMa9 zwKZKRmk2|oj@*l6fvhexyMau&TE8Z~8hW|29TRwezrql|M6YoZSlA}G- z_h+fBp<7sWMCd1VcQJ%vIy>gfohNIvCTC-KK3Y<`yE{%b?(eW++yg`>y)fyA$smMr zir1@4^SYax%8zurSr;?$B6$z9qWkWQDA24GetI&9}ryZmTWJS7~nBF-_ua#l5pe<@N)EfBZh4PX^RZ z24pg_%qC26mz9x~%k)ZC-uYx?VPM$~@Ez%E)&O*CZ^i)h)JUzu^b=6^!E<2BA%9-a zB$1X1G6CYRxwAsUj61i_uqxXP?#z)<{4&FxwJFWGv!yuWKhB+%0hU6s>6|-TMp!+9 znWt?Haa>`hPl{~^nuWHRAw(*fGMU=--^gP3{@-Cn|qPCRWxYpiOdjR{xRL*I3 zKAw7JvJOg5nTFMFh!O&dTCOrT&Pc)G@O!gN$45{h!q2K?9oQQ>7n`zV#^90Cnqb zV9_i|#cc2^_tU}rc$TvQB5(&)ON->slSRQS7F7Q1$&V3k$T#7Jt&QP*EwT)MJ!E$& zO#h!I(#hJ%b=o|u|25_ba>x@-rZo`lvhMW5t;b=l2@9EK7uQKSXn?0lN8<@prpW9V zr-QwKua9RQZ?)Si_?d~*^NgAkhQH%OdavLE%+0cvQKG9XZrf6-zpKTJZoJK z))2_ZvaD_zN8%QZ>8!!`c-NF?a01=X55=w2X>kLxH)Z!KGaNj^jO@5Onyzl9-#nOinAx(;hSIs5_j+>&;l96go6Hn zhD9w`Lse8C!*s_MgN7MAu$Q({x~39Sx5Z>{Tx)|r43^KlW?mmt-NO*NiDu)fJ$dJa zQ{OEX7J7*i<1exjCRsL#5Pf=n>(0CGIC-JWYNGiM!2qIEb>Bb^le-{k9_f zRMu*}A!`Q?9_fT<c()>^5JDOaEL(Y0+ z%m7HYTt_zsn3x&eb!L`s@XV~P@6H~3DH)1SeByS@2iaFrMg3juk-6QtYlLARTrHAK&$C2FfQ(J2vBA1W>c2_*i_rh4sO zi8|s~@-aFGd_M|xu~o1n7EmIft9D3a0>D~05Z9Z+NJrGiqhtCN3nprl9S|zGS*8?G zVv7t5wW1dip1!R;dadJI;%Cd!O#rLyHwnC`yW_Q*z>Cp8RTg4B$IlEPS*N5eo=C20;qmw!CoP%3-Vv z7fs-0dT6$?uPz7S8zfoHR}PVJ>P4I{s`1s8I~xS&f(e9_^t1E`ZSF20XY1%rs;S&~}b2eesYO@LJuFXyuzv{qT z@Snzz*r>zhG(%syo^Ys@u|5cw)j=XTd& zZip|$5CJ$2$$3bDCab5?zLNq34 zY0dNzcz=0bZZf^WB~L(W_;#esF^@KSt#zS}n#bs> zvUD-S;j0TyvX6KJyBgZS)$MEP%_T7td>m6 zmke;8-%H4EFu&t{EkVCaCn=_5`+do- zm+mpQ^reiS0XdLj9Z~fN{jz&T?mnxeMXtXThlO69;;;(uqj+gYaae_W_SVP{80e$) zU+SBfi%v^qw9XNtP_zeysekiEg1B`u5$-o~FtpZg`D(Lyz`y(OU{u;S+3?m5FKVdO zx+2nS#&=s9G+2{Pm*c7^rU^~Wo!t0|_2X!2=4h(Z9hk4C7Pqr`G9%rYClm39UwXKq za)a3`cJZ%u5_Nz+r{8yWQL8IV9}Ir4U@512KvDKwcVqe#?)e+p#WmjLIx@z|4{NLx zZ3G7i!|*yGgEjW?5`A3_VPRjy+VFZNxl_#0r3DvX)H}aOYMoEwFnwU$2|oiG^8uY=v(yW}LYVKzm-^ui%Y*R2<(w2b!|-=2o$$-6 zqwv~&o$eR*jk{0VKMudPe<8eY|3ddK4~)Z?4lITrIXDR~KDZQq;b0bi`(UU0z@c$? z<)KdatHa&!xx*`07d~_T?70+_x+i?*h8wQmekQD)Ff^#}8G$VgFec$N+d!F^aVKIk z6(sX6K{AV%fn*Y#LEFKC0VUE6fh~rE%px@AhE2B|f3aIT;4c=Jn@~Q8*YFpEL{c5X zU#yNf{KZP#1%F9cxw)7xgS}Yo342L1W7vx!@w;O$2F>h@y|fBbj9Q_S_XmIcJchRQ zxp53}*pQNbb$@mBs0TO8!w=#sB3g`wwU*scj(E zrj|7hwV@pErwjtr05yj{W)J`o=-Lbdq4Bh9MCW3mv#>=f&nmD$U)$fLRDjWd+twCM zgzvGQgFtjsTGtHlqMInSbysX2WliAcr_0t0Mo^uW4#{mGecuy}G9AyQWsn#m`~s4A z`cZ+M*#I zp`0_wvt{WfGqnAtn`{jeTccagkSFWnMOTj4Y34J9-i%EqjRUJnCicj7Wz{pquhmS& z5m7pS1#tAG&uQ9V1Ng8_wJ38CsDj8lTSm2c#tte}tC$31y**=|#mJ0ko^{+jqxmw= zVrC=#Wk8e_n0P)n@@Tf3XUq^|$|E&961$MOVQG=j^$U3eJDYCTL36ne13hz+o#i7K znmLnM;|%l1D4Rvbx=TfI7^H>?pPgWkM-@gMj|HhK+83IjG4og zUJ~kwJ=T^zCa-(b9?KzE*<;nAgJxleD>OCQV;X>U109$!(LHtfkTEK@b}&V(;o5be zh(fIl4(5>!WLMlq7v4+;xpz=Rq(OxG+GYmvMdlY;us$$ImV0cWWj(-lp==SRxd=7& zqII5?g{~v2ZEUS2GHGoBt)($}%WS=jwwryldB*&5yRI_7JX&FR|E&2%WMbL6)&!W7 zt2J)DqlHULq(ZB4l1)>Z5>03)x_o-btt)pDyLFXMZ*c31HBnhtx_0X-pPKoEb)|dB zy3#e)m0%m?&B5f8b=7w33dG<{74JmoCC{W?E_t%9a_@pxqwR9ZqaBFZgh9dDqy{&* zH0WkqW!P3`ZRsUMJr5)~uAmf~f0E9|g!^XlVt*Kl!DPAYCD5Z#$)sQ_QC@Nw!n<*34!$#e~k=PG$I4S$IqqPH}os#xBUL2(QnJ@RRKj-q&u0 z-y@Fa3%z!DGp5rY^vPD*?{dUuFZ?CDGcOT)`m9kaylFHDzc_An|9(8|K67ChUcWHv zzI$;P{&;a5{(5mC+&5Va&zWT5<&#$T?`Y=JFuC5r4$Ai~FI`<`(jXbK(#H1^mwMyz z8{*lXx7Bf}zb=8%OFI|Cyd&G~rnxPU?daQfD=B}c&EjQ@qh#mEcu}Yf=25!krjHpf z$(m8{jae?~nTAh0k*w^)8*bd6O*?kjcVM zfc%Qi;JtDTci!F6`QPwoB!t2WJK8j5p(N5ZEHIp3L6f!=c^jnmD~Co$+7dj3_b9uD1Lv$EANj87O!d}@wNUIPkX21!-*0>4X>j`4? z-Bs37YlIYc2HyO29sJLV?Ts-&+G@2<2ecQDhPZQspY334OE{0Kj)r8?Nvt914F-WX zN-5DCC2kFIdH!(GQpsp}@rbAe02MSJ5m_dcADAo*M%&Yhr5qoOGFHj>6x%GaivbP_ zhK{#r8 zm&q$iEjlO%z+NG-jZ$qzt}%_Jh0945#a;=TR7&Nmmuf$^);(9F%tlJhQmNW-w?3c( z-YC#Q==FdyL}tR|4d1sBrN@+8_Dx%5QS*>1CDtx2+mc)@ltR46d~Z+_tKLNNn=8ST zV}GCWn(wdc#K`UM`^ur+bh>J=#%cIqk+nV2S2{NRfu3{cUeW5%eR0cbW>Dn$DVKiY z&H&;K85W_=%qbl!JIrUJ9A$vjxXZmiQ%>32l+A8*RM@m(MX-vEgT&{#!SGrH_S8;0 zHBW&G)UeB_NG>IatgX$yjBHLrYJ3Vo@Qew`+-J)7>SaMk@01w zR=S6O)zKztuuNg*U2i(wnkW=-5v1*)l?cUKk1c72POjFP!Q5xklH3Kem59t_bcrsEHpGAz+Grw04)}so4pI~h zBR^AiVOrd+?}!2pKA0kt{2tpZj}ZSVBZd1sA<=4vqj~(a+mw3Dy8rr5y!!=3@~#|Khy3}jLk;SY-x$Xm zGSaNXXTRvp4~FVZEpyXPlrmYcrpAS<-e#HMr-gjEq9Jjovax01m1VKH79eDJw;qRs z;*rwZww$>#S8U`C(vxhbE@CyFfz*r4lsnFpd<|B+_vZ*eWh1uvLt|n#R#BI$7Ak)L zjllWs#0x8k4%0s<$b3+>}2O%?4EGRSG#@FHX|`4GsA5$%Jqj+AA&J) zQWc0h@nOa`zNRH1prTNZO`JQ!hgg^wSA+$Dwd2+jq&wXOK)OInd7ij3fh|)>eSu{u z_9dQu=c}AuG^Jw70HsU|1K5=s48~)+U_$1KFEQIqfqHSKr~la)-kGF`o~v^)I%+65q^M z)Iyj#!K}b^b3@gi!)JFGs%>=-!^>qa)_&dx^p#z&{p4k8+O_O5Ts2opJ=r?UL}OzX?MbhNh$TIb`jp$ z>99kn8=lrH!Y=?)ymQbEU*hj`IY#AW3$5@*(nP&%u@~O7*vJ1n2(RPwwxwbCeLkP! z`UT6~@IH=7dHG5={KkHcal!Zd_xnlJbg&iv_~1hL>w}%}rbDCfZhXCeh|l-4q;z`6 z;j3&X61Mrtv*%74hEejrE5+j7iO$wVepUI0-ODPKP6)TAyDYHaRykCSvF?y0?xDl9Zmo@QkWKDSZsdZ zl&v`}zGIxRz9>Dn|ymud-CJ~CaJ9@6EdOWGx=3wG~UJCKOKxw!GjKq^c!F7z(M zT4F5OIm@3RwBw>liynH04GJ2c#?AIgF{I1_eMA=kv!?AG>mEqRQcCe1!9I1ByZjWFF4^_LlYsgZ>si$5=8b=NIIgzKTuv7Y!_d*TlCfO7G z3uIDgpcn@gNEZ;kP`3KU9}bUEetu*kPCBP+K`2JxC?x8VX$+|YH|K*vDsF@HxR?N5<5j?XOk4ia%$^)wH=MEYT-qCp($cp z;aPdsdS{-8@JYb`k9M=G3z$zGHu(WCe?@tA!%eqH?v>?jH7;*jWtMPxc7;7(!<6kN zzLGq8EjfQe_Uc}?suQ)u4*8=c6*q3?mZU+eSxm)tw)cGz0-$QEr&dl}jlC_+KKF91 zIP_fv05-aZ}^6N5$cJ;7a%q>3Z*Z=-s8~kVcJ@LJ#hr3O^|01D2c_YCC80T zfJua=lw{=qlE~y8-q6~w+5?Y+*46HQYTL-#=FCFRvbYHP6jxCyQy)j?H`_?&0@+7fHQkD2H=@2 zbAS$7FM-)Rp)u*7AjOR$V0e7wkDI^&785@S0>_u>I%#QFid$`11jZ_>P#gCcg|kt z2P}2YOO9aaK_Jf_y(4s-UT%~J%Fzid=%F4Tl#4o{%?bh!FPB6uoQr0a@})s0YX_`> zYlq18ritH&rh{S9pcZDA=3T&E-*01LLozH6!WbEZ8k;riJQ}bO`5}nu+!}cO?HB5A3UruEw(- zI2%_?bf*ziIJ(WgmXv@9qpMyW*3pOkS}?Jf({ zq?~0Imx&Y^g}8axFrbfMiuP{Jt7OHvLpCe#LQYa!=GkN2#=(Om>m)I z9JeE+YKzW2``e!VFcFF z?>ypph3Z#h76M+)r=IT*$H1E6_wuP{Ort&q+bdSA2l5+XX$s(`eUS#nO?296#@Nv= zQ(Mv6w8nd;s?B%_oEN7LIhFrWh;QP~}41lWtl z$D3p{N(!wcAszDX;(-k^(x_fAn&zp?P!rZbWo|H1nl3jtG)-S?YHDf-Da()OSqNLC zrZGZ*qZ(w%xQZk(B;g_UZPcXZ`oIVj+=-fi>F$g4#MzGxdWy=z<>(0l^q2Rnh9BQe z4S%WH&{V_Q;hAK5_${K;-bbQz)bJww1Tfas$^ZANi$D7Mq^&pjzj@BHDu>OUmGQ3- zQ5Lc<7wr5;jFVW40|%Z0%}Tko5N}b0csOnnU-VpP(L-Oh==r*7UpCQ`xQP#(Mc)_O z1LBbOXgdBNlH(dn5!%xZch{-V5u{dj3fLq%gcLLm$beiIxi)r4oFyd8emcsZ$I-1y}YtnWblzJl&DkU8q;k!zPNFJ&&pNQ1+J>am2@l9RrX@%l1355ivKm%mIZ2Ow>9;s zy;-`i{sAqnS9Y>dwYVTI&!gI(mbPaCkVz!3OvOg+Q27GzgBFB36b8mWPV4 z$|XRk9AOfhp)=a-7cIx0)}AjEYmW?4j+eECvV;uLTHK^~76ytzb76FCVJtkJv#CYD z%hkeII6}jGVX&aIFnE)NA!|>qjT&EE7!)0KFL9%xtrx2g#m`fR+rm)afNxo|LMm&f zWK3tFfVruYq;c?WTK}-6=^?hcdZZDTSxo^H&xk7t72E(L-x&@}fhoj7wWEdT0wdjH zm|1YJgC(DeWNK^7Iq8Kg`n!y|M$y~ELCiah^NPlK#hb7~BbIEOjRDzvwYl%(Oh(&c zjsX=%u%vyQ3GmT4^Csi$U_cz_A~7HyX^gYqrt9MKO$NlB#yG=($bN6!$ADc?bj5wp z4KIrG2mwTygGpXA=#G7ado=ToyXkRNaiT_oQ#16E3>UBQYya=fH@f5KhU1Uke)fmi zy+w_l z6+eN7iIANJZEgVE(Ln@@u#2_*{1G<+W-m1s)IvY^R+$ zs51Pa$_~t8pK9}}U5`HOZ`f`kb5kHZZqk5Qk>8J;;0vWtxQb?qHp-*?8<(pd539gl^OF#hx+KjILXv`YSiX}Ef1LA) zdZ8cX{wo*E;1o@zyPEd#T96;b$mc*JAJGlubSRO}5gIH2cT*93`}B^Afu@#4EugBR zDJ!*Ku9U;GDD6COINsSuH;Bm=W#8-6w0;e1g{1=hFl#GkwHrw%Xac=@_YP0LZ|(4~ zTv)x^v-{DAnM@5en@f|L&5%Jjp*!vkF z=wUfg;Nfz=QQ&^3z@s}-;C|7YYJ~!qjo|l-x*bzC3S8C`%T9sI>YGs@rHR~(0v*(K z3ZxN_U%$pE(1*$?@R}p**PJc)ivq7X%Ng{%2?ZXt7VdWnJenww@1j6z5SjRGeG~1# za5mPU2Z&nzF$&zz*~?CWHYsI1gMIy|QQm%BhOPAjMn{Q>9iC%i z`$b1;(K>8VbaWum5ev}hh_o~M8GgJ2Cp&DbZ5>iM=)`m=t~>MI9G0>r3XWXukZ9_F z)6@Y*A<~ zL;!wU-#D_QNmJZ$n({LoV9z1}m>Yj)$U*{((O{n7H(ZNFv{>@G=8z0o>l!SJ*FY%R zclmzgo5Dy(U*a&h+k8xg4 z<-^s6$D!Z?7wjcz@-m*5OqZ2n^NNA%Z)pv|t|7Wnmo3|<7njKFkxkkDLM}?%8Aoqb ziJTDdQK=FOa9u|x+&Db!o%$Yq zyFP>$-UkiT{vmU7^h0Q;%~*}Xf`{cz@+|LM_Z`=rzi^KHEm_|4>+6o^fenHMv3K>o zV_6ur-)Q>m!gc5Fe!}e+Zoe+RnoVYJT!#ugf9rVQkVC!QfG%4r;RiE6@9{MR;(dfb zyr1A~$6o=#d^u-0eux0P*ADaWnZ>;ILBarAA0rSj{27O4ykUt`5?Au@oRx0td8_>L z!c}%0zGU?(3#c13X2ecIbnBxX?u8#wl*%XlpqI(vfKJ(Ez3y#a1NOZI=T8NWPqI;R61TEl^ z?~>@$P~W!t*652#I4e^9;jExd^C&6|0MOP)m_{gSBsyf){oFWhF<3sq7fPXi70ncF zAl>!!FsX{F!lk23Pjn6`2+X|h@h9qtR3><4K(;H9U(HotVv8z-q6$W?4{bSDvDIK< zt_@aKv`88qo}cI8A8^vV5>9tj0XKt3-SjPy^B8lwqJRGQO~<##N?ifDv7G9*8<>!^ zxf2Ke|3PkMU>eTJA!}sFet0pPG}&1V({RPV{ITo3Bdi}WxlC)Fg~9^pIY@(F)Dzpm zIoOgVwnsppxRTf+n{>2NVR|?zbfq*g0%-^jDRX0cdY(eIvpq5>ppl3xi4Qsh1R{c* z;cUiu#G6#K2)yETV!|+megmNCZ^HY8=fe3sW($zWSYU#;*OqC1XDyUD02Pdnpc)nK zMiZ!|7$4pgXM94kOz-uo6XUZt?C276O|O*8a2bZe7$2Z5EUK$}`-~GAfDWX*B3@{b z#>x-eEmy_(U>IUU`x4^=J%z1ktBUPRVtvE-Y?#IPVif>LULlNcU*xkeRdHBN28<7s zO4S<}q@y!c*QU6IxExQ^08IvuV{kJq&?2UwaG z!i&X*R#J9FzKiiuLw(!oV}DNrpizGa-Hv#@BwQL{8UYKe0GbsulaaLW?DdsRN}+xg z%@l3G*Y)%`F+NoRlLMd`it#~2VtfE20%*`S%{X?5!~q)4vVdO$oapRw=v`|66{v=G z+QJYn0~Ok#@B|V-Muzhd+e}d{tgXG%;v*33S-KtQ*M0Ab{&JrDBa95(k!oekEbX*agqk>S)LRjoPfZh(ffz+wOi`pa+Ya3mX=twbN&fFBZ*y^(#9n5|gZdP= zQ)4p5d^81~#8f^Mr~_8)_sR^Gi_cpYKK#TqBZ}a8sY)$Pq56Tgz#oxNMKNSlcjiPu zDND$&T{n#GM}81631BbwVGb}Rx8hbkP+7Q@k%!!lP*3zi3gQ<-&;nIcD1RrG6@z9W zA)Ph~-&%_NnUfa9Ep^mmO-W0lwaPEwQt&J6i;_h)#=hK(Nr(`XMC>d9TH7cIQPw*v zM-_tOED!M}>&3Y`@P0CzXl*AopU(7UnUZEr(aP41o zVz2{oDjY_50!$d$JN?aUN}9n2k}((#|Fdo|RbjYX*-L&3`E@dhm*-64FYEDIUwf;4 z4WYH$N#;9P!ppN(FP3ooXRQ%?F?_@PK`pIOct)0mx1syJ94q$&=ziaimHRVTxj%}P z`!=lH7Y_5*7ujaky0nOe`vZ$tn;q*XG+CU%p8R^pZn@!DY5%*ej--!gRMi{8=CawO zT%dK%&-~5zG1tAzSh%|+)x1m|O;a=ztyKMrr{0^@oKn)@DV%lwxu395bCjj#)IHzh z*7xqYH`~ckICvMkZ$tL>0Z|fP52>*f$n@N~)-K7jU_0^I{lp^7S!nPdbV)o3p4JOH zFs1bxq?g3ix=NcIHA$>zy)2M#VA8qN)&K)JEo+2QOHwwV+SsZYP0?l+xR%S-*<~%JUX^qbovj zP+E0Gibo~u<7#qqKJly7oAXt_I(TyqLakqq-ki&UQOaiHYf06M`nE{3h};@kt=>?g zK5Toe51w4EI;2|d+-dwqKIGd*Z=~Fh3Qv{3ANM;)7n9P?F-{{JRjXyGv?S(&GGO39 z7-nY})b0(A(}V`ujLS}u5gbiz1|#SeqTQPt}F+9FiHL{kmKws#?! zCDAz}L9?K8A>T9^VA>LDO;`BX8^c~*?RDdW% z-*yG1qZ;TQls@t+D1G8rQ2MH0LFotm3QETxEQ+?*j@kelwGTz#4k3GGB30|K&-Oq6 z4zpxrjgFMdiP7=Ao?><>S71ptxnC1e)LOu6^c9G>ld$lLv!6VhO9SBl+02P+rZ+SJ zoCO`byqtBvJq!PP-hCP&w?9sj@K+UVd;{G1G@s|NvHUA+D*t6RlmGId+kM;MD%%h@ zXpG99@aP+^zj3=9f4RoG-N2(g4IL+`B?<0=ouu9QUrB%uE+fEqMA^29;T_PSya{l- zWVTxmUn4Mqo;FEV5kjdjiyK1oId}T5llVAP>+bTtI+HmJKF@g+A%AB}F~^`tje~(? zjdOz|D24U_lt;W7e1X9K>HmVA4hLoLtnzXwxEJoI6v~bm*=}L`J^h5ZVpGZ`WIb_! z6m6xFsY+YJz;zN_18A!KYh)EBSB42J+w&^_wlxso2_RQkPdq}BGd9-7T8uiXO0Cfc zU#0>Ikzlk4HN_-P6fc-}90CyvBp&5RH2@)4biX>bKjp^+X7M#yhr%Y}Mks=l1$}Xh z7yp#d!@QlF>thr4s-4kd^GVMnTrvHk5RDQ$g~9y3v%JB9Aed0~NZE#6{hofRMhbza z1W8Dp=J;fdp%EmaBqOmgG0nG0APtF$^V)sbXGmyDb4W;Z$8$Cu42Gph!6?1*D9GiR zHM@_F#>5VXuNY^`SJE8~g6!35V=t+V{cE9+OQBMG(y=A@kWoa`DiBJlwJXs8YLrBJ z%mT>iV2bELf!qKp9Ij>bS9Up1X)iWV6Mh6{Cn#VN9Md*>Ynt?rpUCo*hb%|r^9s^c zdscu~flUy;I>N_*BMQwOQI)1jn>3yPnS4RMS9eSYg5=OXqaMWBP^M408aB1Kw*hjL z_i3)egV*JoXLqLplh;>tJ=W}~0yG(J>Pi$#NtQR76)GLXg%8mc(|gewEW?wY95{A> zyG2I)J_UAYTlsnlXj&g&&aW!0-n~BhQ8xI2l4mQ6en5x~Z~{M8J|9{$)?Pwc=Zf@m zmk<5)&@@LIIO$IQt@TyFO>e<|ZW!#UJ)p!Y_^y45P`&$09<1Cyi{(Cp5u*EtC+gk% z1dmYmAOTXYO5)XK+8mJL)SX;_lp3~Z?w_$WbU}E*vK>{&u%f8VxPNqlox6V&TgZ|p zz>p%{{j;#iz^rMvl+j8I&{(1uJ_STw415-1QfCcIenJ~IHHB;|!15@^&Sw-F$$N3~ zHk^Y7@%>0La)Ds@!54q?mP+qz#ylv1*2h z%IJwck=@6nPQsEIpvdl7vt@|v9tS~#-7}6_zN$p4CBDW@<{s`q`Eazwar=kBdVVBsY<@T}!iG+gxSk&wJ|N+m7@DmQ6O$E;zmKrcR-c&OG_wpNooZt2^!9s+ zbcfC(UzMEK#KhOq#KfdpJ)aoD?fKW37!yRa({ytK8gkEDHKUu8$@!1e{aQDFx4sTT z=%w?6np$X;LCRBI*U6`v519s^(nOID>Sd-?o;$sD_o?gt?c@L5zc0Qq{D&-jcL-0* z^6-MJ2yf)`8>EAJFwesCiV%JlP5upN^1sXH*ITXb2U?x($M`%8ZT^LAj#K6!`L}g@ z;T`0#zBJ^hAaYpWKgz;OICu`r(xCh4rK=6)d(=(0#C<`f{qIWADmNUvY5RFUFVk$d8rDHF3Mwlh zW~=@iP2%t}rok?n{69IU1XB>pCi4YKPP@Ph_DhxR{t*U#w7k9IheA1W{t>0Zes$X!wzE zCp~BynZh8@$Y6j2EqiTTWJjKEg`^aYu4S%h!ma6_0Z*=}!TUJ*-m>OOKeLC#Z<5D5 zsFB7)Xt5YP#l|~nUxEeb8BUcryj7=2A431)rmZzu7U*Xa$^xO0Dz?6?YYF#(Dp)Y3 z&8l+!Ea;Cp=94S&FdS?~Ka0sBR&ZM)Hvc7Uwry_DG{fsx! z&rou#p_W#BDd}hI&60jb4N}|uw!WcJ(ODI2MXGOXpx;bJkEjF+vH;o%efKFqKZ_Z` zJO?vMIo&@YQ$SNl$h7Nc2HcHhqh)FGs_1S_G5Q&J7q;N0t8&y}`dM!c^J3YzS)n^b z{Vb=;q8s!x5t1u<24r&^RY|<sR=scbQLmUxAp~i)FvDSWM>MuQlMW>XF8;#K&4@ zSCK1gE6IEonN=X2Oopm-u;3b^$^4PN>wdha^aL*RwGKE*C8~r>pC3kxqNc{K`@lqv z5xZYm1!Nnm+4>;!wSzdOYn4^yGM_E7TA(;aLvbsAu`^v6i(sjBSEXwa#n%`ECYp8R z$`}@g)MRBdX_!)M?v*mefTEMioJHZ3R%Ph76sI*Rq&;|E&6t+uVm@oBW^wQiGo~^V z%ND8`ikUfa6`4nSgbYhdbUlmI^$M+b#ct&3N{K0#8p_a1(P;@O;k!~jXk0SIYq#kN zW7Xo9j?iA^uSP><%%g^6@n2GPEDXZXUUQ9rfeY>BF=z%R3Utq~(ZqI*_S(C2pOJI4 zSE)W6?d2+>yaPi_-T3@JHI}g0wjG0h1#0OH#=X-rK# z6AL+H@+z3QMN^oXj9Ij)5w3)+lG}-?QA8x&qaE9(My48r#&~{Br-m;1)MT0(mXuA6 zDnreU!%__2X1N65fL{w-?|vKoq1y`>E)ntrt#bAwlBB2exSrXhT3!uY&m^od-W_p0 z`}w~+u4gdK?zrBwl{1q5?ttq#o$iF|;a-J{TRu%=4G_91Nz;ci2F^Z@RRCYi^D96t z{Hfll?UWDbD++%=YxGpYdiP2ESs)U*FJsTT6ud0iAPh+jT zCC6eQV&E(7R(N}-9iH0lgr6o+?K`nXKE~(sL=ya1FAvY}lW3Mxc7Afu@4j%9bw7%A z@&n^R_xa;2ynfv8{yf&m{j}vp)cI>v`aUd@&+z#>tdZApi0M0)`{8qJKEAr5Qtx{5 zNl$JN(?(s%BDwLF8@6XQc#r0_-^dzrTV;wQ+oYeeN0C12with4zY)}{TPe|0updMI zM>eH9+b-rJXvPrCI4>HWidjR(Oo((!&Yfp2vj13Q=Mf0$P#g>PPw)9DJ{C`#4tPo# zn>j)1_#PqO)Zzl>C z*J{Z_#NOz#D=GdZt?Bbmq~!a;40ZUDp*zae-KOeya>SJI|yH%UIl z1z`FZKS>|U+<7f9&znUlrj@b`6a!=(%aPs*S`M(pIo3q+v|(2}D=_d?-tN7c|UNK1E`4WuYu~ zWuYu~WuYu~WuYu~WuYu~WuYuR=@j-=p)3=9W81zoj78HhVr5W|(E^&966f0=XoZ%# zg=5=1TZRG<0>dy4^!UtVu`2qW3g3tv^-Ej+8PbUjvW5LD>s`xzp{1hBa$*PhkSj<9 z#?YS_$|*ue?X+`8d5mVWUKh({)5svkrKB#$x2>C|li8K2%XVezvR#?FY*(f(+m)%y zc4g{vJz__xJdRi+_$OAjd*3ktY?0TT#y|!&o`%@^0abO{qZe2@tT;kVZAmRNFe8># z4XG4kFjWdiEp@{}`Tv-*{~L3(B2VJx%d=q6cl z=AY!WS#GLRvyaEQhXYfiA?olNX;juJjb3qfjTAHjA^2i>oY_fmc5R7~6GPI-Z5yse z>+puL0#Ywy>$cxi&edwPeLQRt8#Us^iR1CG2GJ>3s|Ram;H;>z#JV~{%uE{nCceY$ zU2&=L7KU(>ZB8{xDSl~YSz2D_|5=x1#o}0Oy~x()1Wr9zLr{1&>&RDywqfc-Ay+lB zNwETLKLs_v6=EwKn#2R6IWtWph`f~4t@JAb)`C=#5I5oo)@jE;JxEqwH?4a+an|H} zbbp)lAq=6+EFV2=g>`JKLy?cHVgIQdt_3ebp_FV%vv5khIHKFJWRUW}LB55yinkE) z7EURV6~igx@?J*w>P(gTAR* z$RLlf@XCf!8Urh6x!d_I%lu(XSLmyOMADte2Cs-w&BLk<2yI^5$2@2&64mtZe=C(W zUmv?pIsh#NvS9&DN~J<**>)-vsIFVNT8udVcyB>y(l`ZXjB{5GrjL+Ss6;xbhBK-l zyxEa9;NAEu&+Vtajd-pKng!S{S?Ik_QdCIatOhM@R>3eTd`Xb0LIv>T+lg|J!$BCF zvK&zR{*usp3gKPpT?e2U();pzQ67L1@%5neE(P^V!=sZbD!D&-$;KaE1q{5j& zSMN_VROl(YyY#-OWR`>>kQovNn*B~C^e@QHz;^W*R-;vN5Y$(|Y1v~A0Agu2b5f^q zHn|*$Fgjwve3V20C`bWF)^wW94l={!57_YYlQ1}CD?^+`4H^7~w-l-4;Y36s_}&QW z)m{?%vqa~-73!ltjN7;|Zet&}CH0$k$)JZw2wp?MY zX$|()0!@&RwPDy{DQaoidSGFKhD*+}@xtT^Z|-ZpXp85+(K-|wgr}F`jvR_aDzs+- zTHL>Z$Ju){5CQu1LVl2(roK77Hbt)CN7yAd@?&W#>q=yxD#O{Q=4h7oc4MDct~!|( zRxzOo{i*LkD@Rpsgy-keACg7puuMoP6JC=~$*5J|ensYIZ7C+e=#fq^7)-kCLw7&v zTV;KS4!B=z>50sqh}MTVGy^Mo36J4`3?f?0DnT%)q|CH!j57ez81_M^2Uw|6YZ9`j z4WfDv;IYgeb4057I%8Hs*R0UtqtwpEtBk77*5Z%9n$NyE9NMM`%LOs2!H!cQOh=8x z57X6Q|I|~;fAg*7sqYElS&U}`w)zcW5lg^UlX%WURSv+^f}OXNP!#2y4OJX$7#@gk z+;i?Uh{MVHMUpZ2nM{*zBZ0(dX4?!2BzpA?GD`GA7$t{kRn*BlFP!>r&bUqp#e7xv z`&XHE;uVI*)ZqZFZw%j+g?sbxqgfu_nib*CvsSo|aDYF={r?35d;cDw?G*rRFXQ;? zkB!^mc?+bRSm0zQ{=Nwi?f2;XU-9>YfM*{f^TelDi|~W{0O9ua!|V19!iV;?!qYkV z=>a}pINS+VODSH#~47%uI9x7GW8Y`;`*hlqe#psfPs{%MHY4$zqaZwWdxd@Vs|jf5EK zmZNDF3!H8_R<{k$GY~G(a|2FmAZ~2|YdaxsmbY*R#I2jc0`dg6eNqQr=l}T-2Z)H{ z8Q0S`VSH)k5;0^6$-9rNlSYH3FHaGFEGGrnnT*d?%Fzx-bW9D-7daxquwC20 z3{C*+m&(?v7^y|dI*c>}*5JBAM8eXki01{?*g1xhQMMc2z#1jxkT-&x)qW$PGoE1+ zL5&%0U$yTDqgc`_f;I6B=jOhnUact4gEjG8Hf2Ud*{)1cwkuPV?aCBoyD~-Du1rz3 zD^rxaQ&eO7DzGL35e={=Ru;h;siQiZ)&4}V2H6EpDc@QR*6^J46SOuP6>Z38>>Ta1 z!C7KF+lHGlFl4=_^~bb7yE0V9t_+p2 zD??@M%1{}*GE~N{43(*eMyO02ng%N4l}Y&GYow!$hp5Vc-gT*KQc`T6u;HCG{L-cK zHT)tFLGVi#vJm`2HUWoU%!&XIV3Yh#@Qa{ihE3|8G$(^!*pRCgKt3#kU!;-h4AGt7 z7b_hc1T{AS6S2fu_+_bvU*;O5d8*-;MmaV75}WQ%0;AOMOXKl4$@q6!Welf4W3$Js zQ=oT(U(i+U08h>(Rg48WBhIc(7&*Z&8aanHgrCgRX?vVNTG#`edRfCSb2lA+X}q4O zPkIjsm#N9+6638ItLwbnAV$na>qhX4F&Duvanazu!`Qc#!*4Jo!7ugV;pd#Cqwa#O zIBG3=vvV;1SuZN|)|%yDOeJ@S6jzfAO60mu3TQd%`Gbn;hfU?TGBF0Vc#ygiXoBXj0h|DEV~j`5RE~59O%ep4y#6(4 zLikv;`w!6;z6mrrC=G=|M1j%xhdJ?kw~WUBA+28}_7-R|w?&ATOcslyb1Ibrk-DO1 zy`Ml6J0d({wGF}+XwoEX4ifuLWvl3xhfa)19;1!LY+=%OKob+Oi_8ae?w|>Z5acI; z1tlrj1ponrJb@^TKP03I;V17ygdc_v&>4gT;7VQX{42=AYpVqt-48;^?t%=LWK8YL;a}>S0bcsc(*|| zU~d#R57`*Bl5iTuv{`tm&=&BT2-IL2MW9Ay&^Cv7taXms3}2^?7z(pEWAX}!S!@C^ z2bw_4ZwYs(3`D~mOnax4ow!7BsbdCDQ&hUj?7Uke1~ zb832HGj!`I-G^{B0_i~gTS^5VwnQy0o_x#_0sk3I3G8*V;+;}cHba{Tt&pLpu@@h2X8 z!tFQT^5{E`-+0UI-*Wtx8=i3LTmD6`9pj4^Za?>=(5t%1{iuG8DtEwuPK9Lk} zpFnj-ClGi9At=$I;u{zY!Wu8rvh!3!GRh@-@KY-|->ESE79JWD7_e3!}Lc@G75sEPdox@Rbg zT^WjESB9e4m7yqhWhhF}WZ2iERJ|QV@yetX%V|QxmJ#t9N>lVL&pKU{)y)Hy%(o{@ z!}pXjiomdmQzYB`#K}f%OdM0?lZJvJr9+Q1R%S)?sHWCK3+5PawZ(T#;vs_?ERGsq zBG$-r$wUfa-$o=8FOH!{6;Y4*!(IbAAd;EzoaK^X{*+6`!ciDk%Oyj!d(0&RK~}kB zJob5tzfN^pE}4l&LR4ghNzh}zh%97;rCc)pofKmPDO;V;GXK|_1 z)$^P-S6DD60h{@TNQkvZz>WR4_B{$Uvt_6}Pif5lCs~G!S(F$_SYUn2qE1V5hh^DN z#V@lgcjBkB%QErOuXd-s^w&pU&^K7^_6v1V8Lju%F2Scvd0i!BM-AoAFguur4PeLrTNt6$-DFw<-4CY!6t=v z*L@9W_+gL^L{3k;Ll?#0if`Bq#i}Pz3OD58f6c=$;cI;#Nt6C-(GHhLnDo+4H$1b~ z3vcD~w}V!A>NpP%j6301$KCMa#a{RbpHD9JyMMcsg_mD#8x`)bT?!|U?bS9ocK!9+ zvuE#`=l}BOFvk7F+2GI64nqEe3eb1$wF6lZCnHfv@>O&!hjm;^7HmBw03@b|9!yKc zBWb}RoGqwCxk>>x(5N|{^CGlm9v1?(hMcb`q)*vOO<&cSyX=M~+liqGWRizL_O~`r zDh6A&&s9$d4?MvZSsgb+ikeGEXH-z_F_kVL`X%bZAtbaNS4LGccdag|Zd{(Q=ybqI zO5qj_b|u|JzjaFSWlDwuK;m8`g~;%(dNa@>8JOw{!lrh!`BH~b&K)P;_jcR9U`BwT zH61N%jaK#=okF=jvJp@t&{;<(fZb<1F&chQVJp(1^iQqI&N3SX`FV=7<}sc2F0Qqv zowYW)9;GvXs5AvJX=gVc8NwQIhL!`@UcPkcAG*Ay_nEoYbb+^El*RO*zU^NlR|DOC zNSXJiU$@qdMTCHCrnM3PYWZ7^1a;pg8V^n=r0SWO`5FZY4j0h8y`k!C> zf77WTH{TSQMR{9|Bv=~VJVjN6lzT0Itp?1jdB%M%$-bHLX*w|074yJRE>)7!Us7aI z_KSJehH52(iLPP|iH}4bdOdg0P+Fp)s6x?*ghG2R+pNfBZbN6bFfzO$6{L^t$5uuD zFU*-W(>noc;e-qJZNC;6}%EX-&h?r(V*vDrQcUW(D&UZ zg1#4ej${l?b0}Ev#y!-?L73~Hg z9APDGYLC0e+YgI7>^A>5UTyR5+oAU^<&NESJTi_3S1^>m$~792xMNH1JW03!4Eg)D zJEk* z{=K6Ru*M`!2uZwkH$@tpzD+_mk_P=H2v*3S*3Np(q(P{|NWYZVr*|zB&QnQ*mmKr~ zP2-Lh_v;}35QO~NNy*TNj`BEV^z9^ArCTE6Ab)PA6fc}PXm7^oKe!g}YV3*}_M$8Pe8S3qFt!e4zU=xJ0p97WP26QRNNq!*&s^6o-@AJ@WROdF1(p zENqg|Af&8Z+@;;h$2*l%IUq$$o72xTad zHDY=I?o!nu&j5AMWFBIxoKzM|S4#6JP#raal2Kr14Oo_%DI#_TEyp{fXBjc;lXCJ* z*|@8q9(`z1uD46hVWDgv&?tG-97{!FQF9cRnnUBX6WZ~p#x$uS&$ptnm!hK|E!$wq zVzJ0vmHG7bmK#LFC00jhm7`hpQxq>M;FtLlhJTX5L@A}1zCrs}{7LPJ76o`YiyGos zI_3pG(iC?I;D&}>TD1_1VN;}ki9ssVsWD^jtH2lKf+1O~Dv~Y7_$pbH+{`v9yvy`Z zTwms$2e+VoT3D)7K}G%BgQSqn^r%7b+9Kj(;N-6Kr6QR7wStD>L;6#zb-$ypgAlrD zMK_t;JdTq0mg}?-&NY-1B8ArPjGwG!;k)v1p$Na6wZgmj{9@h?FT~DyBkAhi(#pce zTixy_`1|*Ke`*`7g!FZ9C4t1p+r99)c02q`ryu?dtmUdwA)CXv7Y*{*qaVFJ&io~s zoR%kSs1KQ#mlOGC^qBb_cQKGIBMJ7x>?w7dd@*V&LY57lPofgCDzH|DzguM8ds$h9 z!WCeo#5FOs@L*@E_FEn1WQRv!n>mNkDs&u0O%nt4B^kGT=>}=5OM+PC(-T{T+pG-=^@J_s z9;Y;tCkrNS{MF;T#Lyf$5r3_!quqKa#uIj3J}DRn|C6@h;J|H;gnqG`iEH^t#8QMJ z$tPr}Ph&g=)p&6JQDZ#%dm0b19xH&6jiZ2|8UAJm*zN0WmMo1Q)5C+?C2|bm?~9A| zAHG;NVe1Up#j+E?z~ycXI74LHDEdti3jB4{6vijys|i^ z7LM(}-rvMF_epPxW(m_ZiDD$ZsDOQ?l{}99p@hsR)e_|8Qx;YgT7}BQPsmy);>_K# zHnMR&iHJ2S47bT)?>nn=q!?V{*dsIC&;+E~}1yn)|ul?H1aJsn0wjiTx?n(KNLW%7O9N zESxUFZy|qwJYse@McIfJV#B`i*#+JGw)I>|+KJ&RNxzv<>1{MXxRr1IA_ z!o6g=MWiy+2Hf0!uVyS%xXq4|$lr4%qb}J|5kYp-EZt1T)z0?X<#%$K{kGFiu9?6m zkD)T9BB=<(r+MO~q$(zG+crd27F~Dnz8_(D^3RUqMlUf3Emfsnw$LLj8Q+gZD5%7y zR=q8zh*fF1iK$w|61IiD3w`iNd`p&Qk@)yY_{k#imCFF>Qz|8qMK5u_kA0mKVtK~Y zVkCZC*-C-~PoJ>P*B6M`h)G}+!Hr!+v<-0q^}EEf^Ss1@T_NekWw>V%Om<}vOm<}v zOm<}vOm<}vOdW;E*w>P(7xZm`_E(Yk-caLR#t9*kOX8X0_UQN$Le^z8dZkkBSz0;I z^cmyzEpwj2AnXl=++r0h%Vy-p`ifE;;11IVDMe5}1rgK_1Jf4tKBpm*13;p#JN>%H z5?^gQ8LY~K46qwzB-M;ou9&T|f11M%PAIEPDK{0jCf>LZEwB9&jd8or0>8qrVB z--=t2#q23C)-Q6iWRx@IAT5ZOpq%CrUwQM-1G|j7eM=hEMk+zdS8sWzH$6sWI z#(B{B5UfB*RBPTA=*+t*sl>{`7pR&PV}7SSW3EWuif-PMWSd$efL ziB1sFqDP_z(ISGVD+EDAMEu{MbMBp;MM%ES^ZGxJ-|rWhopa~jd+t5we9osAJXJzB zxRci}l&Gk}Rn`Rm17LSzhSXp@UPMHTB=9VP9RX>U&&vGVa(b7Mxg7prCvYqRYm~47 zeRUPDTupurBg&$Qh2*Uu5FGPc-4VYE&P>aE@05&=oA848P2QlQE|CL7R0P3kwc@v6 zVv$hRXJ0Wl$eB#VUQt&QIvgk$I-!`SSWN>1sO0dpFcK?6Cf@|y$#=q7%)rS>PE?CA zyEwvi%vy)p7N=YZjZ4DMV*T-*Vg0%CgwIw~c|@-A!VE5~VR9AJ-Ng1M@e^})VyYxy zvkIE?#A4D(`fCc>0JRjx$~akGAoe+5fsry^kOYK@gSZF_1Y80QB2*i;?-fNajMI4J z%hD*YsSmNl5`)Tp1zii2Cct<)UO+{iaqe8CHz0tl4p}z&Tg{EY#Wm19405;;H;LZl z4V-F3tS1!g5?k{H@P3i_QNawspl6M~ zZ)5h!ksukHbRH3@`@OmuviKx2P*pdAZo?(!cb-09hB1OlD6|i3;*W57xdqvNIO>GW zGx)KJhBl(YzqU^dAyAyXD@Mi5P)U;3Ool_)8-EaSA2}pQ@sK7@&s&DMMvZ z-&9zL|6?rniprwuy?Tyc6P%@J3C>cq1ZOE)g0mDY!C8uy;4DSUHx(AT;s}2ibCww@ zi^_+wO+n-;6)8nk4#RC>4#UJ62U!mYREiO~J^@5sWhB9~d4%W=S{VQ$hJ;vwO#Tv3 z>>PSBW-Fn(;=52{Ed+=TU!g#&5WSg^M7Aj~n|K7KjHwS+#fJ(axDIzii;i;^AJzu( zqAKc?>V77;co?37c~yxZYJhvQU~vUcs2Ej#hL7a6fC?ryi0l+31mBXLiQf$TMk)jk3AAZKU2P`H0^XW%?ub6&(|HJ8r*$BH5|JZeo z!4WTzfMwBXOr&=qa7KbP9OFC+Cg7Dzk`CY8F-IPA)IPe_sjGy9t8$gFYxte9I%wgo z@h1E>%rSD*A)Y2riPd5Ud>0o~`zH(L5svAaKaPd3dUSx7ZDifJ zzt4v8muv=#_F^^=TH&*9*qj;m49YOrv1Esn!Ze`g0CQk*%KXNco^u2U2oa&g_Yc5ah61%~!A^=80oZuhZ zfkP!w=N9kqw}bh&K*-Q1(3)@>6@e*?7hVKF%sampgT%i9Ks!SpCSQwB5L2ch3#5|C z0ER#o9JQc=Vmd;85fo)0^*@0_Oc#olsajgWa_gBV$D_c+O1@lr{$%9KWm0Fsm+RFX zA_=gUGlvL`WssaXCJ{OefP%<&kJS>H{%jv9sxv7-gJW!8%Cs|JMtcbu?VVt>&qF7>(dI`7 zY&yDX)6;#F{~BjE(sD51qv4-^1D|y+6YYe5`T__D$Na5tmTfhI0vEjX>%8+~ixhq_ zhd$WJfuu{<;YzjaGyc{13SS$IP4#tfgE}AXHrg3qeY`yLqKGDL_#1&t(Gq7V)?Hv4 zNVmWUtE!Gwpu)2OEfLizl%vuhB7|ZSu%A)nApz(kX3(Omh)YeJ&DH8Xg^dC+7q%Q+ z30@33Octtn>vAFp)~!K%$BI!uXh6Zf@}=xB0&Rv`uf(D$M%8;oT&Wt`iB}TrtN2Z@ zuc9T`SJ6^KJ8_*F+KHBLXeSQcthHtKRl#dPF^XY99V;KkG=$Bbxg1KSs-Tdo37y0C!S zB6va-&$lk7!8k2>5TVVmku-Y2bGuW=r1m=VQC=|Ezzh!61}69Ot9<6Yn3jy1@v73S0IjlP&KS(>G^Q@*HAJ@pc@DUjdaQAnMJ{dCqXqwq$$ zSr&o)1Tr&v$})Vh=+BN6tbCI$973GeyiGWs8&~;7S(v+q$BE{BVP;&&HY9lpxDdP- zyykGIXRESsedRb|>}-yNgx?)vsgWW@#!~a8YSuJ%0|8dDYPe9n7rq;+C@)$97mAj^ zg`y>Jp=b$QC|Uv+ik85I7RG+!(2Ymy_z3nM#)TLbo+=;4yHHwOz<7$X645#p7lQLi zk9x5H7a|@A{Rv!XQE?&2fJivZp+(?Z1@{VB5hztuBoj&z;Z-g&gR@Vupd_3F5%Y$6 z#e#l-IrgC+YGi`QqytA3rXRQrlLz{NsgrZ&Ek&l@3rwQUnP`bQ6D=`kq9x``w8Wf= zmY6fq5_6_f40PodVHRS}eCUVzFqS{}J#2a2SC8Zvq}c0suTOgBt)5 z_L?5BBEg5Z+kY8gc#CV>?0*Pku+so(%yoeK(6U}(Bidd~_AUxK=Ouf`G_vQ_%gRDf z|B&u!?4?Q$RC(g1gl{zyz7rsPKl`CE(WIxz76Yw;ZvKrTeAYI}UAm-d0jQv7ujTVg z#l9GWDk4?A?f+?Znyy`XCU%kWY?^09O1ESr zhJg&BfrjSaAxNdR@)?2nTB35Ba6%otdbE6)^_zIS_`f zXd{dL23Cj=!tF|gjvUQeP@F1|6{5t6 z9uPqM1);UW3jvu7`Qfl_CW@$ij!0Exe;N8RCt|3gFJv*y(3eZ}1^q097@xlQZTR(= zprYy43;XlSUJhbLh7Khcz=}QX^`weYC##Agu_&ei{weAT>Qg-i%uo6vD%v8dOYU7l zMO{LuFwqyg?7;ddv|5~lmFLcg_MYS+_xCyJ=1Kf&&F$>K!hNi=P z{%&&XV2>BV0(zBMO|cMahhW)+R*xk*=&Plw6IZcfR5gR62Vug7e=8D7z|9rV#9k#p z%W%$=%0Q7vhL?r=F(c*x9y83JNCP-)uq2COXEqAw+#)}r_cV#q=pJw&wU!tJuO8Nk z)3?fqDn(Oj89ftq33AuihUpQJC!J+I{@6@Wh(?yD#3}$V!Tq=)x1)20P9~BVv^CG}nm zOy#jeOYm5tC3q~+5|XWaw%w&j2rirI>R_)M37>ttWX0T4N~-mQHp^~ z!y$oAgL~y~Q0;vJL3AaA&~FjuFyGHi+x#r1Z~PR~Nqny0GXyHV$x!JnvJia+n!VRz zF@1~Q-ay)odDh7HYiW0}5-&=v>v%Q&RKH4%T5H~vssQWtzVr&Ty3PL~1=q+alVgR+ zv9{PUsyst1oTTC}CE73XqZGGl-7~co-M^Hu8@;jXcLCp|-1eo@(2^S^sJofSa`X{z zd%K@IUw(r~{Q2`TbXByxEaoktHG-CcP2RpXkXizG8;^aCfZ`X8a-y?mAiC&WqaOh<1~?KyOzo_h6ZtYAlK$InA^Ljz zNJODSJW@?NEI0*L81h>=6Jh#9vlb{5zIs52W-Jc;1T$$O#vooI5l9tSR>*z8yo`*U zI-P>Ngh2MVkA-3pFNZEzIVy=8oOguf7w9ekbe1hX(51@DJ$yM{i3ueTHR?*s)le-~ zxPjBS0)b(z6gAN|V|GSxM$cHLo!k{aAyxQkVY<8&QxP2s9uAkYvCJh`QggBt+zGf9 zCfoQzb#q)J{P}o{Zhtn+;CC4GVIao9k@XL&h{Ps*25+n;j~$T0ufzmXzy_2cCfo!V zL-8a@Tx=e-QeTEUIN2<&VdqCYg8MLWalYq%vA^&Oj88~s&tY%y1%ta9Xf3}C6L2Sp zB~rX-@54MCN5AkZ2?CCDsI+nPk|<)SJW~+zrmDxgTw`gzrf= z6Nf})qu0vdhw(9^`)X{lXQ`CBY3 z=_WDRHoe03_OducA1aL*hhQxz>+@@!fpkl1PQCS zNLivofUwHwPXswuxqP-wGoljAy-`<@{{g`;*AHBaz&2o77SA~5O8vovAF2Vx0o}8o z3kY)$&!0$lq;zwGL<7q~4%foz(y0;Cd-R8!Sk%&}5m2Vy&6rMLLP5M35gU6j=2jEI zfVMCUtNuUYdOTD0w!kSSKH5okwZJP$o|`>*amu5pLKYsP)P#^{;`dmI8&0V0E_v-We5>z%u}CzD2x1)~nDlfUJoP1f-%*V8m*Qud zuY1GLW1-@)T51r1^j^yy7k!ClOK`^~FLx|=k*eW(fk}pDORe;N=0D_)HA@b(mhF1A zj!zYNmazR^q4yHo?zs&m5VuzxlUe43BXWj|rIu4Bk9d_*3(xmutNpyYbpe~smAPy> zPZ!ILyc1&pT?0vMP+>t9Rt{Od3EN2U2C%0{XlJ7l}O!iC^3R-k5Wysco4zO)yKyU5C7B91MwWP2l9!N zj%Gn}G!Z9h;^b%+BuC>Ao%G~r@ZPto%)iBha1ogv4Q3>Cr~c0Dl1cs!HGMR4P`S+* z6jXHLk$5O06$FBEK|p=Y2=;MA@fA&UXC~K`;OW{8UbmVMA_ofL-6S zF-+!@({%tG>!o&NexV~ZM1Z57S?vX%Qne#F+pK~YpXw3OYPbvc?Nx3Wp_WklR^&Q+ zUr|wC5o?2iqZdS8!%jU^0)tFeDU>k=RrP}j5&lq6ZU8QT#u>lsF(FV^L2IWIsu&ri z!1u8T1?vY#2VkNN!evhQX^1!l_CwNXilg)_m^M1Z&rjzgL}Z~ayQ%Fqi6&o2H1`rF z^E>X*7kdUW_6$`hS!cKdq-hv|xKGnLpv<3j2KrNHG%eCAv;mywJ|wohfMC$Sa6H~% zpoQQ-HyO+{(P%NvHojpf)+$g)+cuqJGhb<@scCv=z}t44u4bIAO;4+Mki1?&^A6jgX!z-N5$gQ6db+~pk^g}A?e00p0$4> zh4^G8^kG(IE~WHDh35sJH5U$%yhH+GqKv>i3jRSGDp*Tz&Mv`gGLs0djWr$2VM3^d zd6Fp;FdW~-kktu#R6rxbqoj*WI;s(%%p!}IK#S@6dzmGNLQUQvmr@f0ZL?_$w}K>jzP`>Qh*h&x{=UOX@AXOJ%- z>UZwawq={7&aqOK(9|Bt{k;&=5yMFtl$>wya8(V1E*)J0DN6$34So@1W^m9P$; z{W=pJ)R|4Ep@_PmvykD24)Ve;I@_Ctv=UQe3l}Q@D_ZA&#+{ceT3l5S`%vang0X33 z9-#h5nk$c*Wko|>l6g}VAYNuZgBDUnXI>AvqY&z6>qDd>QtfiNe00f$_uC`#URn9Vmfv(Yn z4-xdM{e+|i?Tv?XNetB0i0}k>!nrwcpcz6FHw-nPW$2MmfC$oAf~O@6XW+-JNShCR z4zh-!E7>de<+j1)LTV}eJeS$B#DQaM?jslyw1@jR<~m>sbtG~sFX5Q$fI*Voj=}dh zG=+?Cc)`umc>*X{Q*Jn-)%jrc2D>W5Fd-fh<$$48orys_VD*jMb`;o1ZINO4tbb@qg1LZS3`&@ZSk`s1x;dSAAhw{B5r-k>rbQO#6 z4;{d-Hy|Yn9z9rE;gkhN7LkxVk%%{T3TIo`iC}c@V1NL3B66l8Z3zyL zlZKaBN$jLPNUkmS86BJ$9U^b`J~YscAA{XN>XV{F@e+aVP+5fmC-DG&UsS^CgiDz8 z1%f4JXq90&ydGeNF^6h?3$$S@&K70uU0fs5#h~Qd-^-pzeAbo<*DO}w zS)*j7*q?MX{7qbsF4U6tj zaI#n?ozkNDQZ)rtpis?VxWSqq7hZ#$v#-2xEc)y2sUy-BFlhhZyLbpXUXksN8^4yxjSHUclDcL%Ww)SPaw5({s}JaH`$ z>`XxH2;TF!*t_E~aT;d84B=loX25hHivZm9>?Vn=kWzp_ina5Yq#zUw!SnIh*TN!7 zLi@s^AsrUsRmO=5@Tq~M#M*je9R|1!5-trYTr!H3aB0xslB4hec#HuJfFrH;h&dfD z8NsV?Y0%)3)#|ujg-a}s4_unH{+@%&AV4P6=KwCG5AGBdq_6m&&8Ju(Y;Sot;1~<+ z1IJh(kvLiRPZuZ%z8QYlHxl6^SruUap96zRFtF$^;;g?12EYFY41WU*|8hPv0K-c_ zVfeq=s|*T8p<-l|gq^{_K>rdL(m_FzB`*dr{J%wi)uO*RZ~tgh&tNXlJZy&b{D_A9^vD1cp?ZzA((B}^PxBv`~HD75^NXr8sH+pc1dkxvNTt~ z1&g^do#dQAj@^pjyqPN!5ycYU3bxAzwo9lap_P!2L*FhRo=w$b!eg7YmkJ&(-X{ob z7eG|9T{wvca5s!$1y2XWDA+C#SCt4cqrvm=KS6|oRU#DZB|^bkK`kF56bvF1tTHo9 zgbb27!c7_x3T7h21+@eb3f2m0nZZ${Ge=$`95`H@L&RTL zWl?hs(bnwL`0`Z-SL$Pw@?B+cFzhL*3Q1T4jO_X4W`g?4m1e>U6PZD*G=wPuK4PW$ zR=g6{9OLN(o`snx;dak{D;N%^<_Q5|O!f5ZrV50jFH8VG)rL`lZllFqxj19SQ*f4{ zmixwK$l@(dCCl;(Y*xm7%n`6yh9@&nb9dtTJY4T6bpUFyNuaW0pcao(0Kf8P4y;gL z2R|YNMeq<9YM^+DKsi+Kk9dG8tia5NDFg?n0yTCsZ*yi<<)#J+m%J;O6Oj+qDxlrV zyqdsqk>I!l11k>|ti8$=syS5uAp`3Tko})vVA-#f9S;(CM*M}2FtgxbY7601_KOiLs>a*uDgq|FY7h1)M$Qve?EwV})E>HYwFjC~ z?ZFLJd+1cP2fWN$GL%a-3A*D3lr20cs5hja@~b-1yi#;-tLzf_%(=^dcMli1j<(hT zX@aQFVt|AFGlh3E_Kn-ogJY>YZdj{WBz1^{mBRU%$1DX?N2=S!iEbcd4RBi}&yO(X zdRQd%Sj(XUL1cl9%RZaEr)xL>7zkkQA!5HdlALYq5R+LBSABnkoWcpHgaHfYShph; zc+G<$^Rx~me8W}G<#o!(wwH8|)6`fIUIrg>w(8><(xMM}jDxzZ{$u!d5d~xg5DQcR zb3r2X>jJy5SDuO>Ku6(L(gPjhG>nHVt-JMJ!~m^7V=4p&u)_d6;3eKMvIYwAeT=Hu zsZi|8r=aq zMg+tGSR5WV6od>V=muq%B|c(X4Ii@aKSPbg0(eiDMxfJ^YB!rFYXSfpP$G1Sh&ceX zqe}ye=A^HPKENsY$lPq@fiEb4Iit+YT@GcC$_%_C#bDfxr%6;LDI?xS%@fPB@0%wU z;ORwGK3(BWUbX0~NI_ac)|>F?uxb3qig#cL=)q_CpHF`bBEZL30$hBVV2<(*QAj?x zS{c&J%=*C1# z=*C1#=*C1#=*C1#=*C1#=*Dz1+XlLF3v3MC7+Vpb8-u?jI4SjEz>U03KpnB0HP%7` zD?@n(@MO9IJc|+X_lx&2Hk3EOSwpqPzHC?g_dz*_*BGKjFsja9@D_~72xH;5lfwbN zQvK0UJ=dcmC-6w=EXXQ-1{TB^gH1gUL-Dn3vrGq{Qd0u@<%N8i9or&r9s&m z3qOthS+Ll`F_Rrz(_auMj8p%K(qqEUQq43D{};|N@Tx@J~B47zo(Sa1#$XmcFTJBB9A<)S*aQLZXasF!23 z$tV|$+m_ozMB(_<$LAhC^L0cDepCYSDS!_Qpwg1v}xzdmeA=Wk-mea8=arw0WHyF0AwghK89 z7DCQCe;C{CWy|d~KTTW+atS7@tnAZ&_U|%;OvV%T{ zfqlQuWV(y?K$Jw8tT)qKy@kHiTT%MmMwj(=ngkcSb$(XbjUb0pes;rCT?SJ8g8u>7vJIk9OJUTbG5dx{!L$Wiu=Yz}3Iv z56ug-(8fS3eT9PYcVJBz8f2xZK{h%cWTD$ZcEj`#TzMUTXlkg17KhsDP^g1`2(=q# zX2zMD_(Lb%{`8C6PGh6|X?~QIK8v!^Q+y^x2bktWE2d@md=ae}4oBmTBiZq1a18z& z%wZ%NoiosIA~&XEQ69KN%AhAgsr`(Fh z9{H<>0eEGkVr25f%9uR)xdWIy!6TE&lNBa%e`b$R#725`J2mD=y%%LIROU#u z1bGrIL7qfQkSEa+q;SET#qoj?H=a;%H_zKFbX45JmA5_zcx7 z&Gg>w*MmcBJZ|*CIsjY&k2G+NQu?>B(+6jrHK_$(#RHJ0#%+;sR(Osi>M)1)5ij)VwmdspdaD%kdnoqcB6G*P?aU?JZsN3hxxzAG0)S ztPb7_(*}n;c)jv0gXLk3pWY3T6$WTX;cS5ytc?X=BOuC(5uyV?2kWl{Q2C32LGRWr zn%xBCjA1`HxQRLDe3eL}%mBr8Jg^{Yx^j{A(*ma!!S5jT4Fi-zBqA50n7;;6>fPu} z1u4-IASGG?q(n=AlxPW%5-kBzq9s5|&mbiZId7Z7M+#mHAce63q~ybRDkbX-<2etW zSvoNlKHH1ykjOcZ8%xXqZ!9YY52(Z7S+K`kprDEOC*ENC3>!?H58n;u_xuLKJ9xL4 zdN+XAJ0EDN^T9lsz+rq=oe#9s`9MpZ543#e1BblD)D7pe#ngw1vCG`AuUl%7;PoX- z?UUd&!&1wEDPmg0y<&9)Yb#p+4GZl}@Tx5|OZ$Lzf#&4U7+QJt`3+d{2}t$hrL*cP z;>{S8jZwhSkjDhdP&8ph5o&y~XV@7*>JoAI8_bYKWmBkTw-_9h0%!Y~{*e^&?(G7CzMRD0t3>r6S=!U(IaF-Kz z;h_qn8#}yUFhC!4W7PVyqd&XapQtlw6cwd`ErpZ?g)S%`&o5?PjdVu~yGm-aFaQJ& za=eMyn-Io(V7H={1JJXWN+Eps-pn(qm+8C3^keF!xXbVA#cEy>z?h%4i729o_0@Z~ zy4c!6!61Y|K_tApov|Sj9$`+UR0ju?C<6uo5MeCG@WG3YRRYw&=|$vbVl0QtAYlT_ zAs#}KO{gm51gQ67?A|?%mJ0f4se2kNbx)(E?rF5tJ&l&{p2ndY(?N{m__cuJc)Sed z{GvQq=sdj1jUcxS#B9KDlpr|`+kYg%-QsT2CAeLDXeKgf9G&1!A;P^@YE$EaM3D9? zC9WU%5xx>vkaTG_TW;k(_hCejN zWu#^Je2>p4e?OXqNXDh`jefJDGvIF9lI3De1bAH>V$s5dOSr{W^x)^$*vlkNu> z+=xLmSjT9Fxe9#0EClPB$CnALZD77%SYLs2fUv=3!9v9@zLG_PYLNf2i5PN6rf%Sg zkO7H3cfldSj07h^kGmUiDx0YN8P}kA2;&;4LRGXcTnQbx(k4ZO=sfMr=?kdB5yjO;={c}$wL5Xwz=U{oLmin5aY=Io;f)4f{z zI*`$x6Aq_9dk$3Y31zg0k~S|m8mf0Aa!W;gq9qWYXbHq8S_1KjmOy->B@mxz3B+e* zR3{GIcsL9oEWZRX;*(}+`7mZ(#dI5(=M)AKyU#?(@`^CkGmgY8@d{xO>C*{CATlf^ z!uu1IM>?_BFzk1tP=-(o$~$1ufW(295$pvRM7Pilvg;CBa%%BvJh76Bgo0K0N7ISR zGEQf@*QR$e@le4)iN~vxiQm-8L`$7awA9H&OPx%#d?yo!Jeew|{K8~18|9yf3QPek zZLu#n1Sbu^1aM;_guw~ZAz_WlCr<3{$}oj3)yw_7wcPUF0^93B@nZ8U_=Bftmonb{?ph z3iyzqpCC9>3bPb5VB%2xq>^uxF-^e#Y?2ncTunHDbrD|r(twp2CwZX&s?uJEBis}E z+&!W0Q0_y!Cy1+Y^K2Swp>%5?12HC*M~4-KGMsr+Fg$LQqGTha*fv-SEOZZ6J$T%h z7M7Gz$BX%2ULHOhn9BV+nN4FJHUx|Lp(-THAT0FG`g6P-qBCKOL~&Q1D5p9r4%wYB ziU$Hbf_PqF;pO)T(%wV(_yqNc3KZ`VB;Erxz4<*H>U+R>HxMIY=U@jk^RSMx8Uc)* z1VixxSR>!L$06QYokJc##yKba;xm7&PZ5d>OsgDepxe+*juCfqXBe8gAg}2wh!LAQ z^z$1!<{j@;b^>7G-*hrwjA`l4XDc&VWcw)2d zW41s~Fp=22Tw6Sm$7Ty`m(<2xzMLDjg|=OKvMB>UyKR}krBW0=t?;qyi8fkQ%gIh= zywdsZd)%{=$fBh`()w3?jUzhBwZGzq6L0>x@k7hQ?rq#A!X?zi-|T` zjC26)GiV>Tn&}#<5IwdTX*8-3eat05?PmH4Rf$gF_zI2(yL2?g>hMLT6A|?N1jT{pRuh;Egrb|Mj~6QZLDZClfWK>;5&CU)Jpql7V2k0a{2l z->!9X%g*gOcS-II*kn%pr98T~$dJxDgJDD$$h%I##=vHf`xfhkjX>M@bUGlf5)ehC zX!?H!WDJqvmUP;))E{M%dhp^I1VUt&alTm>2mqH$_E5T8|C#H(n?SV#bJ zxR!8D3n0d#3Pp&JaQ|j!J{Kb^HnCO|jNg?L{;Q#~LfY1@S5p&uOXVom+lb*HofUi7 zqfZ1|V7uU_Sdd1<$6b?YpC5C0(Mai~g}b6D4QAY6gBg3_p(`*%X4PHO?1`!h4n=sV zc%qn#vq;d&jNjO%16940D53>h4HTkY0LDdEkqNteDs*iFs096HK z3>`QcOgQs>Tt@-?45tu_!cENgvA-brK3oR&3;Yh=|2dnVdaro25Try)@O`2s_&(7R ze4l6uzE89S-zQpv?*o^^kH#oid1>M!ww;3SL!C(Qeez)tJDK5S3W90!CT(+*sJDZp z5a~UtAGUuSFAY$ScFg(@aR;Mh#T0|A1f^v7(NTU zPtxh)0Y3Bt#nlR1r6U`OK*^xx(@H<{g3>je`&-2Q`Djt~euk1%OtVJ(fU4-THklcV8ajgV>>Sj!8qJ14Gsxif^|j5K_z<|q*O zHv=E7;$O8mi+1^o=r?UB-iOrzfERYXhN{qZ#-Nxr3=FOc8=0|(QQ$&&Tx%GZov($< zg7Cry1{NrJAWNSn6$6_j24<;64-5>ml>L?N&szDtI?M4u5^p87l8-BlU67K3$1RVwaf=j?CiOHsA;3j3iGAra3>a2+`3Ql0)Bz*u1dxv$umygw z>BtAKCI_scp3@B2>8R&xK4jG6%R7iYrePjU@vdQ>@CYHcXD`0w?2r__r%vgYti>wT*zYDh;SAuxTy150E(`5UG$qe(+y^rS5h z+eKs+sthI+6+MYdz3PMRZP@056hhB;AWbEr1MN}I=NjD2=t|jPP@J4;4y*_m2y80_ zTSpZe*d(eR58^Rr_9(zRE_U%znIN=S&!UzdXI_OVC6e93hzzA5XV-_TmY+yu4dRPS z!K-jaS%D9D|9F(T!V6a@#ZbeA>joJG?up{e*H9>l;trtH*oUG#P&A4UY5C|l&t)Kv z5Y%Gg>H%O_q0K9#=#rsj6g&j7fFvd$zRxJbrdp>f6pz}bjbI#=9c5s$EbnY)Z_s8h~gyBVl%L0=k zFcT^t$?iL0d?>3>3+4(J6lq*<%B^tvT)U|FjmJ*tNGmMwm7yD$CG8k1GmtIp z>OG9j9UPO>33HwCPPvHB-H7lD`LMsgfw?C{ok@J^W;LE2%-t}4Zi0=r@^?BOS}6{R z{Cx3{j|>A1fxnW$p;xGI~LmFQTL@Hz}sDptF~hx3`mbF5F-1-*cOL>bq=@cmo`a@f~QUPdS#mE9o5c4FkRx!SSw8$J5Rl}pi!z6-$$B_32Knr%N_fSOx z+U4Txb0=*i5<#Z#>QA`~a2LjxbH>kYYN5#T-O*Ow(K!)Ssi!N7fi`1DU)LGwcb!5b zu%oA8M=!$n8@H2rpTzz{8KziVoMbxOK0Emno>xOFR{yC^9B8Oc9qO*ueZkiV)z9BB z6PowNOUQk?Q-t+P?gkU@CR+(ObBTI#*f%;^FVFyWf(P3XI|{o))$K^`6C#JkbME0j z(xGC5czYt9FRmAJqVk-2jj3U@Cr+rc?MsTGV8@iyzgZw4bcu{Y|Chpm#P0tCFd*jS zWiTL4{GSH{D2Rh3u>VY-T&jd7g81Np^o>OWFb@hu|*Z6WNV0)pJ(5Q;qUXx7xSJ2{vGrrgM3263IqHxvnyp0e5z|G;)= zo)@gL;2wwb(y{XfUk{!|Ue7+^bit@lt|i&_=h zwZiFN7TaXCvPVH&1>PUb68u##0@lnzRuZ}(oOk;r3thOb7C0deuaG|VepPJrG8KZA z$n2}Vl%TEdWs9%&Ql3#av$t%IH$rbOkJFb4a4}C`R!`7izGtA$Mw+1b(Oktus}(ct zK>LVdp&#*m3%@-9n=l&G>SF-I8^sn_Q*B*^=VyF3H)&Uvn5Q(6}5O5T!H(i>7|eFnadls^?HBt39?W{AOhz>)ii9v(M< z8>1(NGuBMpf$LNSB^=33Zf3R(p1a^5RA))g?^-(*Cmx6c$uUHM7l#53D=*YytVDc< z3Rfs9$(1D&_yjsZWDMkN&M1kzd!7L`BUFce=GVnW=l6okPofB>K(YaFE7qz2Vpbo( z!^010I@s!5Rl@ewy|p)}%(|d^ckkYH;lGFjopQflxwm6! ziS23m+eX>qb|=?c`@;$Ig}!&T5B0BPUKLS$QkC*Q`-RV*uq(c6dA}iF&MWk7*aPFy zs{Pxein%fJouIMhM|@|ve`fT&>H8ZSLZ;hyHF&Rxp;PTernsEP^*xv6x_rz!OaJ)Z z<^30T4$`j)Ez$b;q;mRml?&#JLd0iUwF-aO-n*!qzfjlm>AZ!y&g+WwvtJmgYZ6iU z#Plltbd^`;9@nv7TU|R#;`bdZG}BGmdCqnBx5~N!J1*SuHyd>M>Q?`zS=9&1=I*^s zNiBXpSj8g*GEd&(ztUi zlSV2z;_Exy$NMOKSGPIaBU_R(=l1XZhl3K73SB1uaw2OJ#WP{b#3>USD2@+<%8gu6 zTY0pz>YYy-)KHo?>5z2c8Jcb71$uI+*8a3!Cuzjc@TKN0 z$H_9MVyT9$k5R~v-Maj~?FhvWJhCJ8uYI)cdbZ#EdhMnYRWEjJaDE#-e7E7fieGP~ z`E7d59KLijH5nb4H+J0TG@*a$rhXrNM(6$B-x{@k4Xxjp7U=qUB@Os;&aLfPR#2Uz zo?BtPKcy;pcCLOJw3xbG7(Ap~(n4Ccd)?5`vh&DR`sePU9cNR4zlQ(u}1qvn74KN;F+EM@zn;f{gFM$+j)6E;VGG@SNib*1&~J&ei>IP>MoMnh=7 z>w0M2nuDp)z+_yJk`e*M=W44E9Z*a6HEuM3G z|H@Ch)03|k{I#-uDp_i~j&v=MLidN)Xqfk_WZLDJ-)R1nZWLeQ@~|3PIjMBB7rK;Y+ZKyg^pCM zXAeW|AKKHPav#t@eDeJe**@%6J1UX=(yp&-wxcQ&znwkoy|y%~Q;kV8lH+On7pM16 z$`MbkThrWUty)uoklgQYJlu-(H+GQnpe6O~H}R8CPQOo6N50deQvVj@$bUqM>+&8I z+I#xTOgWp=b^o>BHOTQUb-%hbYhs6HbnuX*rN~iDMZ`-n1Q*tGCjy+kq3AG5{ zHEHihjj2Yqz6+{mZA{8j^VQoW8`0tV7{}KQDWbyY0(Yu3pt#dD_jE7)4u#j~W-Xzs zPeT^|5)*jzZHnxX1wdUXGM$M;W_uSX$?HOpLe)T5rC`+c=KOI><; z=|t7O-_@qH;F{G}_o_`NQg37luT`7oW=b(kzFUjheVDIA*)26`Qj1UOwTiDvThDfS zt9;3tRPC#t*C+f`gRl5E)OjVlk_PT5p z?p2{2P4jn)UR;Ix#ut8;zgQI-6&R!}*!vbeI{dC{_rA(>c~pfuH9o9Nv2i($7YMFQ z*XRD$_q`RBC|j>}N2f+rqT7SU$9}feLjmK0=T5p`ky^anCx6C^|Dnk$NJe_@cMQN%v=X=}2=B4TE!G|&B?WJkJ)`L^x?v|uM zWgcv}b*dy~uUtoev{^}-wfSMH=TQmTIDh%qeGLEcZ%hDi@3Jnfi_Dk6~>L0u;=)@nz zD5^qj`_Nv+XwQ%ieNH%vQKORU^FFO#l%D-@ZE$kAqO@Y%mto_Ai&ClZ&HYxNEROEx~8nYjSw@$_UbotTB z!G5v%snDe#Ql)0rJXFR`J)Vcg zoXtM=olSXY$jE4=#GpKMlpa2L|ARaf;`!|B?v^~X%c5TucPBUX+_NwyFh4hP5!`gF?~|LJezkYz&Ca>$#O4{>cT~$woy!zEu*;mAz8O;avU6N6 z8n8L;{O}IBDBtfByVid@7uC`AKks=f7j0aVl)7tUPHNqvd+~Ok(5PJC=itjVC9KUX+8HdwOK=HY5ji3}3M2 zqc%AxTioGFw>>#1An$C$+m~W!|4hH~V|K+*(crWTeOJa%qpyyX_;Y>?mD=>I+rao3 zia0mCjjM1BUD#m$EBJnPn*MvGoee;?5QADL^%6?;3$>w*XsLJH(wOd?|qK%&qD<3&8idr^|52-mlist-M;9C0< zQIxVc<%7AAQS|e??pOOiaZ~TzA6yLl$xX&`8%D<+b5o(Y2SX2k?WX28cBk3Ca8rZX zKSXVw=BB8AzkGAOznk{l$W{BthHkpr`F!~2wcWHoZQ6p|F>X3MG~WpOt!#AX+SHO= z_GY7UBPM+O{mN`~sqejwVIO9rG1u)+-|dl&reAO6ck_d66dwF%wvsKg(UT&1cRwhZ zjdolw;TUGiM!QTqUC;E{XkA4=dxNjD(z(9+*k5*LrL-NtxK1q3N)K(d8|I#!mF6}m z+w9DgtaR4o{G)HztTgG1(c2d^$V&N!7wk7MC@W2#^Io&LJ0huNkg3J7b&*tHt~)7i zP9)`+)uY zF@hp@P1|cZ5<#5~j{RM?D1siB>{%tpM-eovN#;#8heyzw&W>@d21d}+6-Pf`mlQ#1 ztFK;t&?bWBe)Ng6Q~e04d~RIR*##qL()8YY8%IV^wRu&_|u)$&Sa+FW+( zvaqw6smsFy-URvM3-=~Q6s{Fcmmc>Y8e27-jyX418k#knEPKaxJZBB3kQOKU z1u5b5*i=6G+T~2te$et2MR#YS`Qe|x-*kBsU%q9)xM7_!dJL=&bI9A05m zCOZFc(BXW2Gtv6DCVri(b0!+F@m|L>@tJ5)+>y~mTV|p<@6Vfhr%@)#K5pWo(CV3J z*22+kHpOM4Tp<_xf0REHEn8-7ugjf@T23;Tc`tJ&no-JnZl^vI>E}JOReTmkbApPe zow^Z5Q+K{s+wXK3d4}Z*%Y7t_3T^x7_&aODsN>20+5683quUF%H~w%y7@h9mx>2Za z7+w9T`x zlnE>A2%|Cmu9sf*XDEg58aKH9-B4QGFW>Hn8=`Uf8LO{CWq3)dDAV;Mubx5f_wZ&^bDm5>*M?`#fQ@Rh$Yke)DET1-*0b|5F1KW z3Y{vrB~K{LI#3{UxvZhIEK`w`LxG_*xlN`4e>p?RwEJv@D&L3DsL?m_jy@GaKX0pA z@$sGzy6iFf#cd3sLJpXkoUFH_v!N=w93Rw^u6>LaPdG&eu3NgpO`ml*^(Ip<{=- zl$-u6n0D#kX^{U)FrBDe_etCr!8EsCsl|iW1=IZLV=Crd9Zc=cFTPM@W-x8-6;bf5 ziNRED+>E@-M+H;91+nXX?;cE>^Eme8PYkAR#UhpbErV(M`@diKtZ6W9Jp19!gSCRG z@8I*@=I0KkIfHIz?Vcl;MwNQ2pF3MHr8F)0+iwxU^yq>0RB*tvFqC}f=IdlX{SwVf@sCQKOJjV z2GJc)feN!{22sSmxO20o1kr_p)jrrTIEXHNzT@E50YNmR#;4|6U4v-xfy{j$cMhVE zB6Di>ZyZEB+GOeVQG*~_ljfJDaoHexI-^q)RYgiC{b7BY|F0UUr=uRM&$n74p;Z`7JFOts~c|DM-JpFxUgDZh#8^5po*?obeANE;?AGQRN zsnydby_N^k)Ty^C)?W}vj}~^yesD@4^`71LoktaVH;@{Y&~5au6G+eQm8q6e zGmuJMtg|qoTp%sARKHLwUm(TB#BG_BJ&-OvT-~%w)e zuDb$g(yy0}xwZt*`C~^8hgBw;E_`UXnXDRlWLC- zpvk#1F9{tHK=u1{YIiCzfJ}vgFKulXK%=Gyw0l23fPS9zS=s4L0w~rR{_oq(XDJbSEf9iSj zmv?sV@~2_DR;(y@_NSfi zeBw`)7so`+o#{^l))tD79p+El_muzb$IkxLdP@DPp4R?ko1J@8o|gU;_UYWdf4u8Y zIr9IxVpBtZ>RVz++1_>iY0eVcz7J~qQ%Z{^?Fv@)r`TnOI*lphPtDy_b3g%q>Nv1b zxt6*7so56|ZbgOplk3^Vdw~J|RCHn24vNvA8tv<5A-zAX$h?0jJ$2EYAGdXM-gD7~ zPWj4~x#XftDGmOre8EMl#zZb{c+N#b3Knjee9}dhAK$=Rw|O|xCqdX09``nr+TrjB$`oesN{f&*Ms zV&j>2RpdPmi>Ngxp)^9Xmamzd}|lgt7<%x zuc?dbmz+|(VPhAiY&iNTZygs>$F3~Crkaa-Th2y)P|-!Fb!&Sz%Hg7bi?@cf&Eldm zBhOZzmDxp&#&*rUDZoXCgRLB1397HoBt4x!?3R-jf3Plc z=5;4o#?3lb^1PGAo!wOB%5f+4tZtZ@|Cp1~axQLvc$bsrj_#0Y!!{??`rY&B?afX) zJN}ZV+y*C2=o~t|z#1oVa2<~dp68@|!)o8^@QIVE%=oQW@H8h)zSY{^XS9=A2bSGF zVwjT(BvpU6++Zh#4Q~?r@jxf(Ti@(mufLOi{@_9Q){ahcR9R=u(!oiw*JtGI@V=9- zck6m>ax*8L?)Jf!9kre0DtG$3_p3Uo#XB2w&+s^@X#JS9Gi9B$Z|vNiiwim_u41Wr zS)-kFA+2uX32rBiDKOa4Ez(Kh%bSecpUFu>viwrFbeNNl`R)B|N}!WQRDOTlJ%^Ka zJ-xB8ydTE>Xvm>Oij&SMH+S~>-9dA|>2~m1Pp}E_wTJNB~x8Be9(V>G`WxJki2Ii#Ie~x~Q3hMg+c9_Oo{! z)M-+cTkVj#b=-*e9&!NsrW(pS~$i*gYwVLoWt#)5|!d6MrLtP_I~foP6~HW zH%D6G1VoC@(q-!#6zo8B+VBz`kgKU>b^D}XJLVz#h?w4rgHkrvYd!I?oqm2`9#-#x zo%)aaDc86gcIsHRl>hy!cFNYFdw=IocG}Y~>Q1fi?R3@C*Q}hiQTkk5oG?d-loGFFM<)rRn3jnG@{P`lxl#wGMWwzoEaWZc96vESKAV z(cDf`hmYHyqp6)PuU)d>WIc>;Xw%uZYS`)Ex91D2_1Nk3m**QasbHtWUGi@Dp@5wh zIw6l%A_VW(YvT#x$L?9?gSAwyHEogUx1b@hRto#qaY4EyL08+8u8 z6IJ|?jhYnS6P@Wd8&&SopxzJnZFKVBh6!iWY&2l`v54(AY?N>Q(z?U1*{Dm$Zs)IE zuu->KCr2Lo(MGwpY#lf7oQ)<|pVznUSsTr{d-7J~K^vvC&pqwjej9oI*cLl$uZMKG8<);-^n) z21l|9=ABa-bwrZGQPnq9|G-AGdX^m(-2~(NX6G1pBOA3G*0E^T`Zk(zyQE*X+BT|3 zr=LdGz<8H_@5)uxMpJ`lw=7)AMn8XJxL2}*jS3Ymle11K8#Q0&KdEsE8+EiC%M@SC zMhzZDoaj*0Mp3KUm+e&;IR`)gE_o<&6Yjb6W6X5qF}(VDnfN)#ZMc8*tcE*t*r>+A zcNTmdgLzrn@VGS+^YUnM_MDk*H0Ij^spF7-a{7&RT^2bp{;dTz-!j{1S1)tlYC0P| ze315I$U`gDindOw`m2?y{aR=Hy&G0qU+Ci7A=j-`MPI?N^G7Rf@B7(g|8rKF++)x9 zx@WA^@~t&1d!4dUf!~KV{o;g``gWPw@14U|8uewS^V1Jlslu6h9nSB!Qt!_uPiVNu zN|#Ue&)a#omHKz=5tz2!N>PbA>ER*Fcj_Hl&;R*FkFIONnED@FE+dHnWdD~*V}KceeLR=Q95ZmyeX zrA`l$Ys8JS(&J`30%nf3(y)tNZ~r*bN>5|P{?>k&m6{AWyk=2eLv*v=7_TSf z>#uuQk%-cMxn!!91}q)Xw?>>bSoSIMUThUHm>YjZeh59mQ+*Zf~WH1*T`8_koqd zTvGx&w6RhSWNH1WCC1dg4veNA4_m-P@GgO5-M#KGP=(@l{!@bRy~35oIv`ceZiwZ5fYot{nOHw6PZIUw3uA)X^5Y-s@`5FGpGE;2-*2{f1en z%=kG;CkI%l=*8O!hW-|Mb|q)#*?lqY-t%Jz^~U&at@+W^#X_q_e*adZB#h72E%tnZ zg^smo7M&m8BSznRl&OP-?i)*&-SmNlcBKY>v$(B=dS=}eF{O=#)!8D(M>Vj}fJOP%_N-^2e6<#Rou#gY zx)~1~ZBqjYTPrOwHmid1|4@A6GmnKTe79@x(^3|4tT<5YSqTfpMo#HqEQax!`o&p_ zSg7NMRw=DwE#yjB-8(w3h4zQch#iv4LZylf{Axjzg(93~3%1E>p*#btRp^q%LenP~ z9eX{@LPK`f`fE-o)^qaCuYM1)(3A3O11-T83TbXgJC3Bd@hi}X@=8uN6E8#oRF{kzEJ!Z1( zTGMsWZnyxvlX~FHPBZOF&R(~v_Ynbwz@KgYDjOeghE>ULXgrV^Rr-ygWbOq)BL z*miTdnYLHCt$eT)WpxCS&~97F~*;WTqC^o`o(SgYgH?J3f50 znUtS~jHxgZ`Eu`!zcOaHnHD}R*0jSgGex}jeSFLiGcA4mab?|LGp#zD`+)01GYwfA z-s$~*W;%L9KdpRUGlis`d04-vnI0Flru>#-reQU&eSS9COlwL`n^6gc=Q?0~o3351(8f$%DtZ!Tw8A*IEgJpseKWPLaw2?Hb2H_5=)TmUshLuGoH;bB zp_x407Q3IkgK@3>dE2%6W_nbq`=#dizIS}MBsr#}mw$8Q8bTD*h{bM!EXO%b8ojX6Q4#KzhKhNFrw%LP~ z%Kl6I9{gk~X2c2Sv}XDh#|P@J?`W*Qc0VW8m>h+?31q(g?T7l<)(>OgYD%3FPtm4B z@9FlmI!ob~k18`y!*>BLsM%T{&fe+P+;0$%Lb;l@F*@$7GTz%(DKy}>8sX>GC|Mo2 zX5l11UG?Qd9&w!(Rh8 zP}W_U6-%xwhCE*kGlb%r*7qM1 zId{ts_BL;-;F==`)_D4MYE$d8vNJMoo;bMJ%xPnT^WvI-pVrdA!h--IL`jvKk$atj z9LrHOJFXp_DV|6L;Tsb6^&#w6Q$@a};$Q}S$ginOgEN7ceKBRYkKe{h6K z`7-Nl`u^%KROogY>YQtvQjYr>AE8U!e)cM_X~$0<)65@(=<$`(O1mo)DPehcs)%dW z)ETS$?)ZgCe9fYzvC88UN9fqDmNYbWiQ?Dx1Xad07W_5VlR zTYy!yZTIroMQ>`jA6x(P)^kWfHC0SQ6H?f^*zX)v%G3&F!`8vB~0-%w%D8o-r?! zsV`_NIui3X@~t9&!4xK#xwey->(+G&W*Q|^?mw$>K%K!NiJ3L6j`pDge21tP8ONV% z=1h2n{iluPV`m(}q@~~G(Zu{%IbSDin0l~aDjwdAp*t^dW%gy+mucSGh2Nui95JI< zuChqgDpoK)H{-eQ$$ngMGfk1Zy@A|?%>23%^D1qtD&)<>K*6*M9Lg>~xyx>Sjg)!! z*e$CXv`mpiOqTT;-Rg^4Itk|Ki#6I`-iE^9;5{v$pckqhTb;F2h^gD;x!$_;93#QJ zJ<)`RDF?IBZ)eFDBz4ryDqN*2Y^KKhxETb-KKmr<^5F5-x<*E4R7-Am*Vp{`Q8^^v z%pgm=k6(`A(QaqY3+CnWNaZHyDA{wDB*md87qq$uXz2DNrbndG*j>wUwP5sXC2MUz z`bECpDoWL7SPL{Qjxow1CTdG#Q(4%IL4q0Eu`6bp&c^c`Ywb@JHyb@w-7@J%Oa{*} zThS7o1vBMQi0Os%)8)o`$2GrxFEN>TtD|BdF*{p0oA-6^5+az{#XfS2t(iu43sTXy zW`gG2;9x$4m>UHp7E`j%))b8I<5s%6f0SrwE}5him)TqX%LRAM;l%jgsApq15e33-hgH5&w6v-i#BT7sLqzPm(zkNe6cg8b=Dot$lI(EK`9>ao7gLdDpIF6V~n^GzVP2E`}n9%Jh zm1-K!QFv_`#N-!NRO;?_UNxSW{cU$SE(@+VQ!uH&j50i?{av=Br-mBxmpIg|zV;+y za`W3(4`2Js5W!rW|AzJNvsG{X?2T(zJndp_ zV|h|Tw_swt@?sOqiqnbFzg_IMv7?7ri1(RlbBUQYbep$Dr_*Y|%>2dFdhvwzwa$L= z(d`)AtJ;plYi0`s(`Tojx8F`(i80mDRX5Bq+ju5d`%c=sN&_1y3>FiU*y)x3>N)kL zzM#{%`WX2z%FAwCq)UWP6X&!c-`tlGQ*)GM(3Rwdk40aQ6}QUMzHY<1O;4??WiTno zp~tqB6;~4DR%=PSf&Tg_r+iGwpMhhwJSk zX2uLtEOx5YS4oVw$`t)JkUs))WRNq1_7x&o*)N$W853UV z+6ty&Sg3XT><`AK=`|X+Z@(L-yHqtgOw8W(1${!lwO0ye!1S9s*~J~q?*9_qS#O=Y zziqyS-Z5e<{mhYBI4@Ydk9mED>uWW!&Db1o-AOiGO#>(CeYTG^M{dn|0fK4&254zz zjO=P!aDp7pi}Y}sn0q(O@x*I`pJ09=`Ss%?6|jb`N8D1tcZoU95@X%O0xJxYN$LTd zp*duGXCvfZH-JUmir9X{1m}s#-ED!-vx3O$0{zgG!F;_o>Q9lOS1y@@+E>6u!Ngk8 z{I@_YnEUJX&|`@KZhBf^%pN^#sH=g?#H@QsI_yafmV)_UFUPzO74Z4I5p?`5ai9-y zm6#8tKleS|k)$QS1P2Rfq?7!RWQtp>>ETdoLtH1u`l}5FdB&0ih5C0Z89bhAW91H# zE1WY!N7BRIBu3Z260V)Ap(&W5Bnxa-uM#RJDllpc@G)Bhw~5($fX?M#V1l{Z)fE20 z`luc+!P$6&-&S+1N#;0x+Z2z9 z`El45-idGS3ufX>3-lvd=He~d$bX}S7S~Mhlo+onc1WIg@RndUkCH);^nEKv*utS$ zA04mg;W;rO*7g{uKlQ9&^hj>%J%VKVEA8+mR0GqXis`c=(2IdX2Gm~ zB*V6O3K){D!lsW344Z9&cf{PeQW^P6u99SlHt8k3OAY&qq?5Nr!aHjewl+cuF&-1E z;D+P&rGnYE#2$~=+TwEu87{OkMz9pA$QTP)%~s=f9PpKxd}UQkkFuX87zaDjOS@D;#5DzO z9yP;I-zxY{%%cTW5xTlENw=sCe_@8FDZ0qsUKuy%>*DSx8htW)A60c6KDLx3T0p`H z3oK~Iar*=5MLIJ)ad8AEMnAhcYX0(KuwbU<*g)}_>;oQGfk6*ztlQ!MIWapgI-#&& zdk?|z6IC&?rwIz$I%1t6*>s$&22Eldn~%!}RaO3dZfQ85XWG!1#DOG}c$c zo_cf@G1s=aU{SM~k%F1O(gcsYF|1s#g1(6%TIbn{?YQ`>bv2QzF^r^ZK)oLv(|xos zqh%$un^Osf@1>=?+ymYz+ruhHCg= zz@9D^f(apeqtH4uXJ4U-kJBu1d8!?%5aTt;7cGo`7zyUyW*@AsRTKSJy5j3%jw8u3 zR3*kTg={G04*G&w$?S0bzCH$%etd_kD;BJFM0H~JKk>sV`%fgrq&anrCw7wjuhqW=NgXDvI*2Tg)<8=gcaWv_B+f%!;!3jBUeGs$E2`y9pbN5Uo z7|eFT%$GLkX6=Z3q0Vq6W`)`xU005h31;zVYI76J5oKeAmkVu>lx+-mVj9g2z)TaJ zFWSVste}B{+7{UGtp>IYs)0Jr3e+N|Xni1d`4qnqjG2Z#j0ZSl;->(_T=mEK7h3Qn zrgiK3IG^_Ig}$u#my_gV-xLt_=D1q4`=8gpM5Ab^+;38APkFa3;Q z*1xHXS}+@N-uhfDFSA3#J*g;Jr5p`{JtLe2ydDlI}d1m=M>7 zIN4*(R>80#mKb!V3i@}Eq2PccrlwOnNX+0L4dM9X=|;hrt*eJOUivV3Ukycub;w@R z7h%N6QX1oC%HEZNd2iqd-6rl}C#_I&B^1BZtAd8a%+ra$J^xnA1e03ij^T;kh-z08 z?we@e$8ZBQCPu%16NKIGH%~BjlN)3GQ_`7_bAtWDhBzMKh$h4wv1*D_-`r*k=Kcd4 z+?!elCPT<3aHTDV>@q?#Vz$ehVN=ZDX@c2(gLc~d;)o$U7={!4kg-4?Er_}Cq8XlT zc`!*ZGnxh9L3c|$ved(=wG}aEM+jOGb1b+8PW%!<5@;G9R&+;6Dxe$ZhPn+s@xvns zZHUp&Yl(*1ZX*R_z}4vVkXBm9IAfdK8c(e(L4p|mz^xVRYr9daL;Z538f%>GaAunm zdiC_ed@DnAAm&y`Ygo?<86+6Qy5PM5A9w^T@N*OK~#Y8XXjHfCQ-#E5X7wL=e$Vd;XYe2n9Hm@nq9jX=vD9%z*Ai8x}; znRkG!>+0@;Ikt@AHIZy<*M?zWZapNvwnhRmxeguC+HFKv!CdMl$HAexn5kDES`N+e z{hcAGi{a}EI$`R;AJKww?%D~nqv~MTtJ*lTh|18Y21p{NcJI#E^mam|U~XO1g&*zj z5dKY#GhPPByX}l*V%CIpf&227tpro`RXxm)t%8g1+|YD%Jw&Y@!zHIG=yb#l-XA(3w!jzZ#B6^YgS@atjRccg!v~|Dv_ghfAWTS3G>L$Vv5(+SzcM3ls1=;^3H!8~ly7zc)j!_Dvb0hy!90$zK)ZGoFnNbLPQJ9jc`bYNBWCD{?zj|JQd2Oo zn_{uap$+!$4aUeb45ydqVE{49MkeEB{io!W4R}HMt9sQIvVLSkyuJZ$hJ|AgFr)9G2RfqN zh-Mfj!g-vEUpi!yMuWx@XX2oHm&P0)H87~q8yV|6U<5HmpVJU)J=Z}nu@$WlK|SJ= zQ5CRrWEw)6cE(6z6#41M8)joKm&C~p$8sbm87Ev4ZDHD%t!CEjQYSK9AZ8$3MRH)9l;!AaJj3Y+hFB=2r zJ~0=J>{%2-YczzM!uXJ7h(lA8Q9z8fOHb&I2_el3#jADzz9lB(yGMJBdmVvM@@|+w z%r)y?IMUC|STF;wnPSd`)|jA-gwnqWO5&X`iJ1Mzdm;YXa6`eg?W=*bgPpMaV{O=c zOU6vg)|f(!$MqZ}e|tb$91?1qN26k1cWe!>fSi7f(J0FYg~WIn^~H_(0W<;wHdd~O zMQ7{cc5O$zYiox1SuvPS%#84UxKyx6A(&@54mhD3gf5|-Ve&|U7p@A-B*u76e?)HF zEEi1c^`3aWIs(h@xFV@xEo^h6dP_{N*#l8w$$kiCR8|laK?7VvaQ!0{KR5(l(Jy=CvHYdrYx!UJK-r zJ}Is^2@8oimof~dF}Gg|=AuzH4p*y%IUD?7yoq$M+G;E&=EK_Ic;H*>sbG8>(0sE& zCsdy6g^($3*k^5qrNk^K9D%BR9zPV!IG;YKxZDIf$MsQ?o`zsKmS&w^Y%lNGY(jg+kuv` zf^VoW7CPO|oD)p1shK2WsE)fTE2L}nfquOdtR?11pF9|R^g1P&92y&Su9iy^+lJ7r z5e2qlAl4J(6_5{|J^hae=1k{Me9Cf1!!uDBJ4uh`pq|)BOvL2^%sQQ2EErYA`WRXz z1^bWWqY}-9d*u1i-pt@VMo+-S7T&uBQ&d+Cj}iWu;MD-n+BQX{#dWh7Db-4u46EDV_qc2&k?jvT}@L34=R?Zbnmq(f~ zZkB;IlZT^HcUo^Y#~j7PL~odlOD6AT3g&*(spw!Z8nrDQP}EHZHnu$u5|bY}4;7D8 znj#oavelifn}!N2!*JTNCu--_!eL_UKg@%*$2`*b0mWbAF=+U%nBUrmSM*g9<- zC8o#Hg_sd68z&eG3l5iFtsswTfZUWQ%$d>&$BFTpuo#Qw8KVRukF?UvC*bNiXMgm@BlNXwlj7D8N5VbfOKk7!~ zGBI0|SK}?;Mw&_*XYL$;oCPWP*eC#j3k%^oKMGfg$p~MI)g^mLi%I&O@x!4h&q9k1 z6A@xXcG{O_<2o@n4zGu-OF^n&bk4^iVOT4mlQ}foOono2GA#`U|Map5*K2u`wv%=P z|HTmvn@z*VJ^8fup*{MwQQ%o&@MG3--y|U*y^*Q1T#1#6OO0H;q!)>WcREE zbrWAaB*wD)4s`2qmb9xt*R#`6z0Xo?+|vwk7M;+)w-z1~mX4Y(qxjDKQ@o??R`OgWC#5e`gm|bWBG_YH&Th7h#8?7A=XV^0Rn1TGxBu zS};2cH^Y6LC$`k>ij~Q!q-R@l1H&bBag-Gtc>BJr9S zNA-TRo_nLIU_LxwiYlJ7;q@R9jm@pl{qAhM5$}^$jKMwTLldb4S4Fb~uta z0U;y3@s5}oR}Z4`*zw_lIiZ(9W7>-7PEzfau4$O}occLp6z>mVyZ)XAg3*^xfohmP z99GuE{dotF+}a)=iP=8*2prG(ga~F@gbPLw9Eo|oDq}#;+0Zcx!)Ic`^D>44NP9VJZNJ;a&YgGz5C}{hD@og}<=n&b~Zo+qB zZdEu1+t{9dBAgw?QE1hyIVNVMpzqF|aPXyGjdm+ubm%m0COo9sHW2h^I}Sc;k0)a{ z<5SThG#H`{PRz5Mv+&#z=_Qz<_aboBc_*G`2czosSe&T26f}J0zKzafWzfc2f|2*1 zjIJ6L;O;dVgTnjc>(Ml565}-SA|_N%b`#8jWgV~~Xf?*)BWs~~p|p-z6I#UhFT9NF z!9!dGv$}37zHJ$ReoIDSM%~>wmplYI#CUAJiq;PoI0+_AF&3f6$)0LyA^cX%#-~na z$TK9BpElQFI5e%AVB9`OAuXf`pXzC%+N4~3th^26Y>NjyxCuo!jVglCE0W`7wM$@> z0f9RCxNv)%*td~djyTmz^_C+ zL`91NE5QUW7!2j2+Bmt>2+yZqq4kv^AlD0ga@8jY3oS68Zk$Cc8BhSgQX=AB1YoTT$812elr}7yD`P4;4#LS0_S8Fdg(8;_``BSZ!7pe$P)r zbz+{_af5rAd_dcJ^|S?JXzYi=fHp{V(M8PDIGh<-3FMKD2Zen`w(}JY!K`a}9z7;& z@z2%Xe^2I|;$DqtK(mdbkkNdhU0uD~J|$ z8d#wdjo~ZIvGUAHO#A#1`xecHD={B_{D2rh3Pu`8qB*V2qT^)`@iy!ixD#{c4rk+! zHI{4-vd&jQm&v3zeeeYDeFnp({!@_XjUR}Uv)f6XK9JOwd`GWC?ac?U>EK2*oZ*P& zo)^h$F!;o9O?FSd?X6%m((l53=}BzzZiJ)#z$`a6g*P#>QwpYPe)+XvD)vZ&-PETT z?4f}Sms-%7(iA?#)Y+?KOAicxBAAsIjv=g0Rcw4Y3NJ=4gpcA1{D|pTqQ^Ej*>+Db ztxcZ7NvAf+D_5Z@&HW2pLr{;HNB#z^`@!@(f=M?k#>2f=;V_{E=IuOzN|9|5KuoXW zhAgc2=9_|fWEF!B4XS~4_9FRXUlg^thWf-fb}(iq4dmAav#Tb@i6_sXul|HwEPVaUbArixbq7~^dSb}P^SC~GG0vU$M?+$wiY(cXQ{PVr zX0ghWP43r)IY%@h}-bf8Hw5TTH*GlC^RAF z7h7AFsNd>UQ{$9p;q) zNBHZyqXjY7rdMIk(T{fsroyJ-7j2JG>@q7=Lk%VCGz_z-~sEv0Z(-Y<-MbWo)`1~*r3B=@Hs>`&- zN6!>Yeb!^a+sT5NZsNoziW82Q+C{3ITdjMU)Vc4QNym>mA2a^WWW|8567(h(t$j)Cbm@qyI%K5ieP550A?Iz%uI5uu%@>uCQRvrk;HWDm&D#qo=RF?8b=kV z*}?94=uYe8K5w~zv*QfdXkt$7PhnGv+9wDms6qhFE}e+}m&3_UY&ROlw7^(mR`f_` z9}jMe70iK!_1MHwYtVB?Ph3|NAUZjOjUz_CdKP=)Y#%L{wWjB=?t5b#F|G_Z-jG%C zJ&pomawD@@?85I+g4rCM#m>oJfoVD*sdEcf;_izH#LVd1lcnqNNWqYq5t>CdXSMz8 zS)kWTl9NTUNyPY1@67^sXm=8fOEm?eGW();t`ABoXtIw>f58-DqLTZtx!RpO2(rvU+E+xx{2V9?o_*t=3F1mwQyg z(a3h#B=cemT6L#gNL6e;F?q8`u?hFTH5SYS*Zt^!L%|kWZGzjwEEea|77K|fIy#1h zf2r0;Fm2mEM88WKh@CtiZHhi2PA7~lCg#JSJeGB1N4Q{$quaC5C$1rFbrEKLQ(!Tb ziKWCSy5zGJt=+-|GpuhF)bDx;Ce>9;cbq>fep`g)#Pr=TiK!RfB54+|s8V01m5_r0 z9s^kjTZ4x^4B1LzIL04^rtiT)eHOu zlUu17GmpLmrAZ;%H`IjPcxjBa#2hf1#kx5+tt*(MBt16kBlYFCf-o|rE9{Il*m`2( zJ?F6{Vby#DqrcD=*_O%JJu{!FGGf`ikZssV%p#}xY`j)R9l>OGb!I0W*U&^@0o?oh zqWjBb*hEZ7<0UM_a8Yf+46y0M-d(e0%No>11^q|3Iwy*4A?8QyGPcvQQZ2zuzif^r z^INm#C6{oiX*Zm0JpkK?$(_BDO?!QuENCcCZw+RyuRh~+pY_P|9l@ICoyQJhZq;7H z3Wk-`6ilx=OW4dS0|9Aqw-8dp2B4=YEpnf+6d*nc1N zJRajRF;l;tXLSwxm?$!|wp?a6eM3wIvp%c_(~cU% zX5`g}^>r^iz4;y2iP<~#D(gJl*+eiUZq*TVxqxkM;m*dy^kr?s4zQcVWE9@KpKZ$0(_b0Nu z#8|(0$Ziz5=nCfS-Ae3n>m_gq&B5Rit_af&WA};CEqTOVkDI9yjC<|LDD*nTVn-CS z?W>&Gn3C%3Au*4JK4E9-?NbWoTkq9ucZZFv!h&F|O(L1*FSYQPn2s%9u#l5$wFP6M zF^|m}uV%GR+$XiZ&^{vCu>qI`D6XWat zhSj}frVz}jMh0wH@EEqE*p=P;Mt06MH1U#{qJk3EsrgB{U@8ndirTJ9maKZgIwrq> zebFwwCT9E54{X{VCyCL~b;89}O>psfKID%`KD8=~y%FKO`NmWm6-ciM%puN~PtVm=g78|2ybhp>O{WxbKLb!Ip-emOfzdsaRBFcBrC@}4 zg7Njt!HYA?So3=|nW?WGRLWxZQG}DP!FRS9_*pQi4neHfcG4fw{$o2fPhd4nGudZi zW=+xJ*-P_22&Qe1lWb|QE<3w17$+;=VGfJ>;wv!=+;sTxCagp-iTgE}D)R@6+~dQZ zO}oYF-h9Ts6BBYm$tRrX`A#rR5BQ=GCGox>>^Q@`pQ1U$z!`Ed( zt7HYVhusyXY@SChY(dzl=2QyRwF@jKNI-V))|94X^V z$?nOQ_r>g|G~b&TBfL^_=MPnQe#4{J1XJHohhMHc6xvT7V|DQ(gkEHv%!IgM7biZ! zNp@K<)k!&U_|z5lMRPiyH4ldQ?cU6Qn2;&X-0g<_MZxrHQJtv?{JPbW=j`2w$02GM z5fjzXl{b5F`kY|i6;|M#^`^58bmfdUpd!48jSfhufu{Er+I!n!{g`?!CdtLOPsNQZCQ7aP3nIdOS-#oD`J$l z>+#S;92Sg)FA%fK2?M9kMYBO)nX!2YY={}2UY~3k-3|z*QR|gh{^ct3+5+R>2TiaWeZFyCAYSvOrL z-s5CF?!7$?^#l4d2VyKeBKU=NPj^Vqx-wa5YqBcDj1O<4h+0nGVs4{EP=qLv2S3wP8zRYXKiyLHa6pXD_5cVrBp~Eem%P4=S}2_|swOEgV&;FF6#U^|V)pFZx)>k+eeZziu? zD{#JG3d5t>v1MzSvFUUexbJ7p&mCa_#5iU2=112Km@SwMy+*TFy^pe4&+4#Q`_lPN z8feugX7_=9+}(5)Sv!;MLG5rpvR*FpzrC0xH`&fYj&UALjJfR~{;B)0X@b!?{RWHs zkH_AFb1*+R5Y?>4Ae0!{t>Jt{((TEDIU}pdCa&(lTqC>k^unbqcJpT8f`c2^8_Qp% zKN&BWNqfB5;m!xx`?F!Rze_&5a59QFB*tGSpEuTUFAz-Jk4jiS;XAw7crf;xeq!b` zm!L5*GcJwi;j{aX6O8_xX{?}*IonY6GJ>`1;d^6a)`S?}%!xd_-|#%a)I9eYTPDZi zViQ9)cU24@sA<8Q5wl_G6h5V5;TXa6>E4pd9t1J%QA625`)*jfNCPd1F>N%1&n&(? zQZOZfc~}w{hm^iC_;mX$t25mft%#{pJdeN0Ga4?Ku8TLK>fM=0I5dIpT78r?-k8VR z5Tk#3AvdbuVyIxce0JlGV+`5hV@q)CVRuX$UzN8bCf9H&|2DqYV2Mfjg!km;;{Nyp ztkMh{_IA1k$lR3=eZHLE{d9GpU}AkI@J<0~*p@zkwHn!o^;YVj6EQ(uR&o3Iz5@hf z-(VSg<1&C(k2B&d&VV0Xq0J+SQC?WXukE((FPLYqccY!M2Cpz$hohq}uI_lrx)9UZ zVI!YhXICG=TwQdPHA@J@hW799WBq9Ee9(o(5OZ(CRz5dpYcIi!T0Dy1D(J$8MkV2h zM?6&4H4sOPe)3MPNZZ~+FnPObvaYXZvASE|A~9(u-gchO5{U7CyqlXXP0SXI^}I0j z`S5|}T}N3B8eeBscIKpN=OvCl8P1!(-^A02xmW!(zhT6Z1=Dmd>GD?$ z~F1>pEo}yo|KC{ds48%4RO_ zP0X>ocleDyL9v4I*6F|xs3Td^ACpi>dZ>q1_0flzTz;Q#%BUA3m_pk*tlo*$us*t( zHFpl-T6z6=KVrVvJ>>oKeWC@k<6{#bE7RMP;BbQ2N9Fk>lsffDvA`0Y1C&{59;vav;bBZd*9yZa4ac(i3l5zhQGS-j=ZM#!AuhPd6G zX|J#^Yy>eL2_<~QuqEvUb8~qe7V+XDGWMUrv*R1txfXBPNMgEA_`Nnk8HpYln7r>5WeciLY$%wEJ-@T~!XRd}?kSek(2-w?srDnH_gt`F;d z&PZ1Ec_fQAJ%HK7D5p5fB7zC_3LBNgR$fd zhQ@x)y=8}DWc37-b$2$)*nNh(INV~-w@+ZNzjS7ciCGrrFWcqP-d8X~u5aenugCE7 zPb_6``rPL+b2G@}5Y4}Kgvu;ljPVvs=*&#S)rrPd>*{RpnRh(R%1pMLn71YovM#0` zo`QL@{xo~pu@g3pZpLp%FlIn{gO$V#-O^0vIOAq5!Au*p1(_O|TxW|FXGae6F0G%l z)x?|_+*Mg5pT#Ml#{s(Xxl1ce@DYMMz7ox%(t{jCjbLKh)>_xeeb! zj90ff*?#Mr&VsquYckt&up)b;mCgGroAI^tD#^AH^QU4d z=r}xxKW`K++d<6EqC{CuGwm88oOyc{v?Y5b{>{&aXL$#*sHF3J7cq*>$+9(Pn3G^W zn@!|akDIbyCqMAP)+#oB=ML;4W`QD2)~c>|b-~;{`iKRG)n%HWBAG?lOIE|NifkV- z?+0hfe4>@r1mlwS5KVL!vFbJZ^7pq7^OLl-vdKRvHjJ1?6RF;aGOJz0@8w#GrN6l{B>VAqL>TD@8p+tIXwVB+zN zMLCvm`y1Er_>!5dN5>zyNzCxD^|GSQnx=wr%zlGJ{i^6)yN>MSoB8}@MLBL0b7JcT zS(oJLCW6`hY#hGbf5BSVHsS%5-?QiIC*UqIAA+{Zx;+1GB$&82NBCOvUYKR;!~9xD zv$J<|*?nTBUEL{rzjl?OU^=}T&$3&D$YS0u$DCc+{L0~d{2?*l_U@4-zPw@}nB%>V zqlO}jX{@@;Y+Jp>H^+f^Ow9hcVp-nQv-*PhFn5~lnZqEKSlLPzvs@3I&OgOdVlZy- zpg})*Rw@>b669o0RqpDs+^YoR`s6$%Dm^nXB|a-EJv%yvf%aB_0e*iaj;@fYa6OG8 z5fV3Z$xMrj&W?8Z>1Kh*@mE(wu=MbS;?|!$c*r&7_Dn7JVUUw1PTrEq(Sgec%4mo! zNbPibMvvI|%q*s&!`S$&toS(Rm>i}Nn;f0mwT+v%i>r&Px@x!V?DQ<3nl-y7W_Rlm z;}V;eQZqTZXXzhjx-ls}He2mgySA%aLTwLE_gZoBb=;$)6Jq1t6WrpWJ?nVKxYw!^ z?d4v_BQDmf8YG8<`q|N$UE{N(65^w?dt}CEaVPzh9u$k@c;~LkX))2sSx#D6iCt5j z<9lc8Bxk$1)^^T}Pf6<;FT8ZPs(<@edR+R~vsS6|Pj`23k5b|%4;_m{lr_5i=IQO>KUn#Rtc)^e#TEZ5gair9f58glok zt=1r?$0_8`hnz?X_Z~WdgTAvyy5s^xtrMu96qugT-A-8^0J+swYXz#3)H-DzMU+Yr zPzd4V_#DCmu@o>lxS=iV)Jj_&afhtTi#lD>6@Jw9f4xMWK@0??=C+11;X$1Io|7L= z;Xsf4?+K6UI%-4VQC+1r6du(HQyYlaCYPKIB;V$GfePB3@3(s?DB?Xi`6LlXl1Fvv zNb;yI9Z4S5r6b9sx^yIYRF{qx%@^CI6A)R;|DS zia!04JhAGF*D<6-q_7(#*~)l8AiX`sB1x?&%BBW+@Rm|UEu$?OrB|jxMJXjxHE<9W z5Z&L3v2J-Wmj7Ced08>mEi1-yk!5lUR`|Y^i$jqOl6y?Gwyp4GLvAYRWlGauyptVe zI8!PE2mG42ly)M6m6T@MRA}VlHW3Y~M^wwC>=w>)#Y>jP-;lifP@)=&WYCdZ`sjzz zewIvan5|YO*^wt55mmj?GD4-0l8`*;O6gRJQza-XD*FGfsL;j#pr|yUG9l$=S)tJH zZYOFQ6$&abQVOg7?+b+im3xDqQq@)_l~2mvhU7&^MqWn6k$5d76<j z3^grWifHM>$Z2S~3rMZ1TxF*tRVo9inHOcZfG3qT>2l>n#$@G&cn)tH2L_JW52ENQcy{)E_l8#Z~lZpDF)-)I{Lb0G!Chuk{ zI}Pz(Wp3KUod#vErNmLe{pO5P@@MWLTleaY$1G&lEDu*Oudo zQd99z$rSJC^FzrnMWs*_sTdBZIIgR-@QX@Q@r{1}v&Ko$M!9{kP+!S{}8D z690Z0Cyf-T%DR-fD=d_L{i~sn)EqMC%n}18HeHlDs$g;|3e?VJh=M@%i>jqsIO)rv z+7`&DEiJuF9T8m>ji8-IlC36{C;H-4u;_~ht<-d2@Xh;I=b zU6qNN`Y*21ok?~Obx4W1A|k&PzVTALKnroo22N7i{qyoW_2&%#yK!;3-@5;GelM2t zd%<7kx5#QK(`kV5zs>TptS-;`vJijD^?w2UobmI1pYapQGrqjlp^T?Q{DL055 ze?`v!R?{h?{*NnrX^21N{2yC`GT?ub^QDRS56k()w9KEY{C`;+pZR~A?IO5;o#)ck zpEG>!@2mQs+IT7L{(1TR-`&RlZ?pW*P52*j{a*k-XZ+u_@s#oZz&8F5RsFxKjnDi) zZ{y2C{5SRe|D}!pC)WAi|J7~$|8dtYg8SEbE?xb(s{dUZFQwf-tc~xT`uhz3uc+z2 zj^nfb_ci?wO?X*|Kjr$r0DjK+ziZ=56Y(FG^Ra2^If?(18N0WeG++PS3{H{_lO>VR zU-18I!hT$uz#U;sK9FYPlB`Tf!la2diPc1Q*wXG>wz5DvO%rhe1HF`)5hu0&>ZD4V z=>K%PklFpG^Lr_!|AD0=?tfA`ygb#V|9+C^{6CbALsID|E-xKIqd>(#$lOayfxJ|Z zsv*u%)`~nQiK`^a`F&QBtd_*$YWW|^Lb=!{u-_lES;+B8?x`V4iN>!5i^A_uCq?o6 zefT0E3gfSzOrrAtMDQaDM%+KEVDyR4O#7)={Ougjqn7ud%LQo#2Z0MEXsPOx4djxF zl>aMXAE`q%Q{q#y;(}Sb!QhQ!jW2wcq)u2{flRgTm@`}co>TtgdTP<;pKH5?RR*1T#BWj(b zN0ORzQf|pJ?UdrA^0%s}6R7o9Csmn$xLrYQGby^XMH8*9)+*DVP!ai8&r^u*L!s6b zO@?M!_d)MWbz5qE#5)VE2t`SkzIe8+9(~EfZAmd`Ye0cAwI20ZQY@wR%0MlraYmAq z0NQ1d6{2U-3jX{GcBD)ZIw7s{xT_7R4MLcmrsYqmK>ZOZondQ4SD9K%B!}8a{To7Q z@^^@oLVxwN(oo9MODWPzsaBPymr$Jk?qxN_ODJjJRF+Ys4;3#fy=qwkYKsKaR_m6A zP^KD}Nxzg>`uoZ_O)6`kWlm+4@pmQopH=yE$f_bnRKMi-EU9t)yV~dF@#j|Y-wvOc ziuy&e@=*?_)(>(7LOGT(O1<(A8P-62^y%YFA78p4KE_Hink3H}rnIHKKP^l2INAyE zxuf{AmwHviXU2_hBeIS@-!)2eqSGq%tt)P;BW_vtYg3p~<-nQ-Sxxm{1@0SQ-~LA0 zx`cMeFP%)9(lOOsr**IXQyXQuwG*Ee*P|jkF6kUhmK{u4RlH64TO`u)I{GoADs2g% z&tXX0m)V}uKhmtS1>cTsHC>Dui{v(x(fntlj84(^pBP# zk}cE^3X3*)0tE##`iNMfL<|*vQ>#3Z5{SV_Do;^qad8RJQk$3@58Bg@q11v!TyX#O z3KP5DmR+Ee?y+PwBjqC(+Xb7J29=zc5|f#hmYr34Nk$`u&(gyz$}Oe-{75-0|8()U z$NuT+@18A(_3!Wf!wbm&VMbKZaiklJ%IXnQCO!VU+TrF^yR3TrG?tWHV&Wm-l0q9$KcEf+nZn8=8(PD^S^HAPpaP4+6JRiZCp$w6OaouSt3PBtPJ zgjLT49%gB$S7r&KPnI4!)b85pQp0a2j8P~oLlGW5lB{Z)3JVQeEi%iXE{Kd1ENzYG zw=O+QS8WukOD#2pNM<5r$74Xjh~`{)*QT(aF5m?XNipPx&H18V&wdU->7wAA}v zAeAYl8}+$lY$5tfR+^|Z?fRFAN|V6fC#tG6QT6{SQKdH2*7y(cq68?johpl;h{T`c z_}5ALmr)a$BrFxABvq;PDM_WW@^g}wcgQM3hdNQI#5r=_T12Q5w>hNJH)47fj8vh!_*E@yCLx67l{u zLQ*QykV*`zs9=(DSXsf;5d~A@KPs4%iehX<6~>5CQM0UI{!}aeP%wXcTvXsS*NJoKp(t6}rPY;_?HNUmJ_<1^yseW|+Bk}6WUCeAuyu`S zD}U>(=Zc?lfS2~xsZl@m5oK05WO1`vP(RPhv`ejQkVd;uGZ|U#)2`}rj*(ho^~JwjR%n=U+u{Ukb(evqMfVrpDsCW#56=)GdI6Vp;l$F(e-@L^K%q1@3qCT1G4 zzGPP=HD|Ovpo(Ox^rc0{pj7oWBB)`bpK@E7u+tObGnQ>f#?GQNi1XBm$OGwsLL3A` z=`We_3S(#yh%js=Kuqz=3XVnTeOeT_C#S#4|9_q>4GRAB?B*12DHe82dflWz;d_t= zh#x9DE}auiv>2I)C{UUILsV@=qEHv9X40@tSvsZttqGLoD>S#^WwVU(dJsifmzJ5s z49d=D#!F`W(b@4*eu3mwkd;kYe!V9%K0OQ6VnSXzo&L2}MI|JrMkiyH$b+A2m6j}+ zL9-#PX6CXzj1CXd&G%?8iZz^m2w!XeDDjt0T$-q9$7)a(vm;qrARK5>Rm^wp-b< zj8a>%gea1IMr9?IuEi*qg-UcOkWmh3h)0&5>r;MCTEL-9O^y<4YZ6lv(n{w$hNaWi z(xi(@Nl$QxrntMbVeS(p7Rk`7(8~W`PiFl7WLaS=3qh<$=^CF|+UWdEJ5$!Tl!-NT zCX#FxtiYHVmiIBI(cMm7*2z#);>jBem5nD4qd^9ZRZIICQ3FZBSl-4+RhedDzm60Y zbdS6$5A&potFWa>llV`D!Iev`>Fu<|U`|fGl^FYwQGH+yF|?5fRuyK@@<2anWG0Pk zG-N{cR2o*WT3%nri<6WuP-@jYc||%TMU)kNsePcP>mq));l&;3n0xUW0`P%%Dd#6f z+QQ`#Qdd{0HnG)Lsg!h@ zC_Vb3E`B&Me*4OJRG)VvZe@sbZbET$Ip;T&>ho)10Abrb}a;1hi(o`z7r8D$bZ6Ym% zQRzrWrI!9GZRv+d0}>bzK=MTujrZwjr5CvkBjfzCyC}NlC#B^pGE%BiZi-0DMJbn+ zfs{D1z)C&r^s>}?G^7kjW&s>I(`okd<2ei;lQc>Q@1JlKkN*qzKs3G2;S{SONVl|RfoE%i*^`+7o z`2V%{9q?6D+5dOit0^x92uBPnEr|J2vD`!`fp7#yBf<2I8D$Ox8VM$+tDOYFA|jP3 zL6vX|HuoWbCElApsAMqLfnWm4K`H5wArV?i=uF>03*%079lRSYiP2Z4yryAtI|&wbv#(`7}D&RrP5; zpW(CqJob(CD|`yw={}!}Q`}fVF{+HDN<4?96(g628g{$`N$hm}s3rmB+sja=`G%Z~ zR%0?Y{8)in6#*&m5djdbL;{xtd;y6^DoGGA>Y$YX2hcHOMO}b6QvP7mPvcL-P#+bL zxL@NH#M5F8zZ_`SAL$Rg)MEC>u8%Ni0Fv1nn2JPJr34sWx3YdYzSc0tfdMxgOESW$(C7mkJXo8= zwbV~@lyLLG7-7!_>W17}lH`ue>9mZ^=|q!A^!mFqrdEX^V74FCr1OtwzY)yD0u3GT754c6ZBLYbDiGW`TSh5as zZst9ev6&`LPq4KvR((n!I-yIZsFQ@_?P}-B7K&I*optQD^mdlysiRfY(T*e| z@wa5%eM3qk6QxLK2@A>^v^&Yl&#Jq>TT0Vxgtu;TgU8-x*xOn16*5Xu=h5`JtkpSR9f3|Rc@W?Q7Xxu(}?gUNs3>b8$I{Psxjr0uu0;rp{Ht`6adOS)*sn38NPWp zp^?gs2}-iPXWD>0lVPo0ay$>Ym^$M&4epo3lYmPgr2vs~c9ep?#YOnvRRtB4X;fo- zfDP5&-(hd(HZfW?jNFBpItCO#PxqREiRr#E=`aJJI~N$>-zl$m%qSoe?-(SG!iRy0 zFcUyF7m9#{$Ax$PGg`v4AM#_Sw%jZdrvr$=E?`F{>moOv=q7Q++z1bfn_gwMnTP_x z-e}ZNTe;vN%Fadz9%6@ZM;EjX9>}G^HuiuEABrY6T_WamkJKeV`9=uU>|B!W8x8A2 z54p#~1HQB95Q?wO0Ra2bs79I%AJh(Nk90rWTu}|KGh3po(Dy+bfG$%Dr}txA@9Ia6 z@zguu_b|&FN<@)fm@yKM763;E28?(zqz2>;l`wt4d<2?;1nOA8JOg(`1`@!ID5Fee zB0T-I-a%J7s~a&PC>}K1HHvzbfjtWGaB_4_wy~o37?>ojH%h^0sK9Gxf~g0GOFp&K zBb1!(2d|26kttkcdVt!QK<)I~?M#TYGlARbr*R!R$2Z6o z*AfrtF!8JglKeFIiB-WwXf%lkyJ*&3#W3X|3mbz(0Ua^8mJ@L(1)K!G!T+e3s51(| z#r5D*tc20nB&w7P!$%x>58Sdogn+_7npLui^ghLp#zLtAWthD#+o5mCkb?3~pNG!P z&rsO9pl(3{3~^dX%Tb7%fk#}JJz~qv-<1m1Ei;_bW&o98|3O~_LG!^6TKckhi~xPw zGL(u|fX5Ft!7r(iSyP26#wV=^tThE{UTSI*s@E$SU(kxJn_Z+gg`z0It7`HOMs=pj z&1qt?vo-61sfu7zb3D*Z`0bm7Rqz%cDAosCWfFkR9v3te8ySQYz+xW-jV1tx!ZEl< zji$DCBE=iVfml=Ou@b~C2P$rs$|kW}I>9OUEN1O_s3gzi+W;^F%j25?F1;(Nv{YEB+yA6hSe}Pgc(*yIlduSGC=73 z?K3j7vU76t@(a2R89Hou*@(-p7&&V6n6cx^$5&KVRZo~WY4Vj*fcM%vbDDh$i;7G7 zo_@xeXZ7oU_JD!soIB{e^DnsYqKgM3=NrPWWlYA+n{;y#Zng@)nt`xcGf-(nw0}K4 z#tWg>m9T=}RRXr5$$iKs{jT)-gucn^7p~iUnrjWNy|`}lYpy47y^HHtTo1-+uC2I^;9455x!#J`v>)Q* zgzM*c-90CvQF6BtZ;Xs!x|U`E=z9-V|t=oU`>I@VC}$fG68h$y$Rr6RJO8NCcHabI~4PCraVcfH+B_4+adh9&hn1yNPFJ zDB>cmBT`2+4akn!Ptu9vIW6dMP<%ut8V!m@G!KD_9F!*^3d6@S+9p!LgKXjA4aA!E zjmikdlv?i!#zE6T`7KgFyp5CYh4H(c4{SB@V?mBC8KP{E z`iusa2b=6{hSgjJ?3OR;g+=VU zybheN8qZN-+MmSY;uZSZiJue18HzYx)tA7KMqjJwLf@AUFVo23kMPLOV)45Tw zG&nryjcbAU%7;#j8le9_KG88i34Z>F71#f3@Dl|*SUC;BPfotYygD)L&4hGR%g*LM zguADZU4Y1;o6A zM+V3Qg#;h}JVjA$Iem@lG@vEGs!{pBGg?|Z99`|LVqXJ>pX4CY!cq+>FaZJ|%Cb&{ zzM=olXld6Wd3wd1p`MORcsC7Ri5w3XqENO#Kz18~!OGrAaEJB_KUoe65O)D!lYcX* z7h!_td7FV9T8dSoBTz@SmDrY{l z=swEh;6)4<3?AHRn!BAQPSwSD#k~;xEBD08Rb-xLx-`}0Qhh>&exY&MG1>|t+mf+C zT$&fd?_L6?EeZHHv8fSz@U1*=XGdXC-9n5A;6Szo*uIesFI((c8*M{mn zj88ScSWl%!AdYP@brCibw+DtXs--Qq(;DVnI{}osYwpt<85X4u{t?b2Gc(^}T_c>U zayJdEUTg0nb)T&4{F&Y#3!m1ri}6mh$6sPv+lG~KXcT@uCPLLUNQ=-w;2qV=_8g2- zbxk*1Hcs6DfsD{+t1!xLi_A5`tmA@U)+iL$8d#Hd`%s6eP^4j-4>J+iYm=P{OdjYR z31bx7fHa*q`ASgmS3uX0Oip*p>R_WUm5}ll%hb%#C@S=;WIRiA1#$b5RE`vNOK0cLu92Gep+~{ z)lImlQ#ZL=K=sskNYT)3kcD(h|6|#4@^mu|ukvvOtU;%Vwmm^c%D(x)7Uc zDUhioMHMft=rPMKCUcQ$$%a1cCmczp{W78f-%Ajw)bjU@$_4Dh(i$gDA%JxuUsiR7I>(U1BB-L!4eQOyG39P<@7);8v5pjg7|D+AuUs z1LH(_haCG^`~&PIj=ikQ-XW*q&~30ougeo>_(!W+h{Lv^A`j)FV4} z2U}@4w(484goJv4f{oSBR;nRg>n(X2+wl(!A{3W89f$$GkQhF2b#b_7&I$}-gqdTq z06M|?ERWDJpHL zbW$rqSxLsoXoBrQ>EIew{}r)m7$gFch@p)F50RELdJ!SuBrQctY17&Nf9Xn*8!oI?Tl^<0+m2Ly0P2odj|+;s;(>81T;1|Q?$mXVVQk)w-|g^ zOqu}^*ohX3>yoRdA4;fY_ z1?`gBg+oH{!jx&@C=eX+L8gVHKyW_K$g0W1N8&hDSybJi5Vi{w$D4rDok2~f##EP& zkq;8fjwl^FVN7XO+2rvuCWW0!$Ad;vWocHk?9ybS)h;{H)*f(u$5a?Z6jAqqjtgZ` zn&z6WOiQ)*a2d4%M|23X8mgTw^M{Klwp!RHVHPnp*n-puN1$35s-}A&yoOCD$4ArP z0kd3sY^c5Qpr&&KELDXs<_25FF7s1FY7K^{aH6IS5^cq-;%$E;@`IspuXq(_sRmjg zuohyqd8MZb#ZZgK1z+xmVBfuFw;XlWBYNAR{iQ)eY!)+ugoI@C}B2}SoO*CNL?TSk@;u8J*9_~lf zYI3tuFf<pB6?YnWoa3zuLsZz%QkOpzedFQi0<|~!Z^2(4@do1AYS?3L z!T1Cd(NPaYYlw&cKKzSNBs_EAEuSvqE3_lE55A8zUcvYcXb1VL=PEuGPTK6K?PhOn z{O7fA_*a7`H~V@clXUg=U|4OkUEU;XF%O&?6lzR;UC$uySl;~`d-}GQSU_%_>Faj8zIEG0% z=@>uXn4q?Sz5n6b#?v46^q0eiad(sJ4GdQqo`M=V;gL@jD&aWC3_i#}^TQK@QT-5O z4ZTuvJOQW1XLIt5;J{D}B{HN!8e%Fzt=gP1Z-bx%_$VVU2#zZ72NncAOa{c%H>=42 zsGt(Py2z`UL^0FyaCj}IA%T`uiiwEPI7agoQIek8GSmc}`3*s3-NCq)p{A&$8Ac(^ ztijo+_^%E^pvB)D7fxjlwZzpb7zni{fRe*TAZ?y+yG-G!IeZ+^2AnJlC$kzdY>yN< zTjCf%4Y_W4gUv^oodG7n=Co81^CXRaVG|xq3pRy$HPuEg>`|SB1$iC_tw_)S4zQ(w5eB+u}DfP$ahn;UzHfxsy<(RV8WCI^sW&!R+JRy`OTb=;_Mw;NXSS@b~bdHOh z^c=m=m?mIk@Dd)IXkG%A22+Z-+TGwf(NKbDt0{1w!vxT>#}67STaOW?))P9V)+2Zd ztqg?jlyG>AW>Woin}^2vQ5?Z9fg`OWc}Lj^rM1Gzn(;d7pf%Mu-H)nUvbQSEa7FNr zYYEEJ{XioaV@yy>a_@|cM{`;@|Fh;bFNrtm9W`z&SD&7S`W0EfCz#eZ-bV-vy&+F0v8G54MuEU<_K-hAvc2P}B+^vfClG&sw#B90}*g+a6Z!%QXh7$~3i! z(8GUEBVWpbD7p>4N*ozR!p(sKCOrnH%q|#7Uf{M5eez-w`#qkpAaDg_c@X`g>$SO;6-RBg(;)BI7t@nWTK4> zPF{$=W@9WALs~_<05XIjTP=_EHN^_SGSSG85dOdLBSzzJ??XO~2(BLHS;3s3Q*g^B z7n&;a*am*Ec{D`TvUxOw*`hV2$ppC!l_=VcF(6kY3k`+`okkOBFr6guUPJ>7oA-Bb~sRP9vQg7j8IjiS5mRTS|sexHYF$ZYsYz5?sV z58;fl!mWrkZr!!nt-5}7E81oczS-tcw8dVJa6RBPT>HF=_NWgJD}09QJD;L$^5bE% z-*C;0Q^Y%QUhQ`rHSL-mZ@6BMSH#EhUhSa-BrH!b#Px|jZBrs;Pc&S=Co0;`Bs_eW zWVn_ggve*fc=#&W5Swtczy~RD;;WQ+@q0>wxGmK$mZm0(RjC2j?o?I#GBruKzD?D{ z>L$sq>zW#_O}M^ps=C%RQ(Rk{soJ$^$S@bCoC^?YzflQUd?N^CBEd)+l(OXH#;|z* z56Rl7Y1rHY!mu|MzJH5PQ7o;A4ndo>gye9rn9cHdmMINetu#`PBH6vL(Mp5!pPQK( zlz*3nJ&F`oLg>y@kQ|aEbuY~y3qv4TiEZW1Kq%!n#s~!K944d4xF(F_2bT97Q<9?F zP~x;!5%5B^tyOsY3FOm&?H)BXB94EATaLEqRn=wV6%hj@$o`wG!^sLs;W<@37VR$H!|E&3w1OIJ2`nVG^Q~%Z!gop|4+p9wNS?^RNlYITjr%` z7+EP{1W`leeDk2xgFuvk0biMs;|OH#r|+DE^S{7V##dDfBpQ@S=l!oylURy8&0@8{ zA^uT&$Oh<&92h59$drcZN+Z?b$?hFLUCGamVHwLOmdMFB# zV+X2c_!Ml6)c`%=U5G9eHOc@IR?T7esHce=*M~)%p`tDMIeudt1wf#9O0ccv(6Mo} zV-O*1k?0L#%+o9UNaGGWL_{r5=tO!;-vt%2rS!K$ooa7RNmn4GNLR7@pN^QY$bj7% zm8SZo`8sWSkQ$_eXtAlIua8Xv4@aXn>B}NiMW>;YdkX|dWr7I8sDVDipweJM9VU=Y z*oNI>OuFdEQ;RN2vq$T!gn_F2(s~VzVD_l1VBi}S%RNzY1h#U!L8_T;JHj-q-9CPU z6`D*3Yken8x)R&Yh|T?L@kC^2WLv7p?kIs6%n``ke~p#VAEa#A-D2Rgn7q!Pp0wkz zGOEwK#MAXr(^lb z5&1KmNh7r@sT?xSc^q_u_&4T`*Wsrjq^G~SjYjrQ>{(jMeFHUXv*+*dR< zX&Lo+*qF-W#vj?amcxRRb~9(GfRhy}?;6JQ@MJVPg;#IL6V@u7t*Rb`H%C!XqC4{N%*I?~eIdL4$X!`LUQDdnJ^P zt;XiUUb3v5QGA#cx$yk*@S@0qVuv7bze>}{WH1guABIdA!yz@8+BoF|if}cuWy7Nb zD=d3j8j=cR=f#jQvPxEA8RNfg+3+DON)uW(3hj`vaN@!XhfU)mb0za);aKMM;VGx1 z-0Mz~3%qZm+LrjJLt}ZI?^)xg~S=rs{dSkJClO@5CIOH4xhj#8lJxc58Sfb#1 zHty1;YDy_D4%?oOUAStm9E*C&MJw6dDWwv@Y4*aDGT~(31JHj8<$g$sZG$`P;8iID zvUI_UnFK|$iDuV`kYWbeln7gIq{F_zWY!qz>5=pl%FlQM>Fpfpl>arWoD(DIO(_3f zE4@P`olH#3Lsoi0Bt1mwN38S>WWhu_cr+-RUR*;m2~>Q*@!};xZ{}HVYLv()Z}Xdl z)|-WnH~aa`!`7RPjyIq3808 zbEusNUo7b)$|=(J3~UVaqmBqgi0`rvI9VivVe!AO1hEF+$3;Xegln&LpN`+pt^2n4 zJ#5{#!|ze+zCC_bd`RD(h|6!?pM?8V>%If-Pq6L_aNohY?~QxJi{o#H;~o(>_`U}B zL#_LTxSwU+Z^Zp$*8OX^-(%g=M>s^BzeRH7&wO9;d$PI}mgHvV3cv)Oax+Wv^74xC z^f{i)?4tZ^lb#MMes5+@esOM}0?K+6k68sJ`B}Mz^f*)Xdvi03i?dz*0`33pKeTuTPv$~l@`NeQ-&MnR=q4)b#e<-KG%+D#w&dV<` z^ZVo$7MO*7`ef&I%gD^mC@3+x{j)TGhkRr!DJm)|%mMn(?30_7UzlBzS(Klbfp3d* zi}Fhf^9ysRfsbka%$&?VW>#@#Mh<$JQ<#_62aU}rEY8o!GjsEDx)l@^=N083I#*^f znvzpOpY757**V3zW>!vNc0r$R1)0TWNpV3=VNtiDj6TJMIR(W9+1)ZTv-7eFGc(cP zjEwv&9?qL#tYl&y`k39avv8MNU}ofJmJ}6~WaQ^$nccdX8HM?I-3qdb@^T7tGrD!l z&o1gykdc+0f!MYMW@b)dAJqRWfpCPJJUbmdId`IMzOpR#q~IDsU`a6aX_oKJaf=Tp8%_#!nFc%4t(d?Ha% zz1FEFnHhdKE=L|S<3tO`V^%z{ROD@T0+w0iF(*-EIv#TaBHQtpmn2N%a~i+oR?)h) z=rPj8pNueCJ18`cL8+aDIMKC}a_c7L)lJH;n^aIYshd!e?5>3eG)5YZajBCJ=eX2K zLl5etp$m1=(1$u{=!E!!=#7I3)l;Oqs1EIfewv!5pRZ=K5p(gKgVL99U6MxXnLiehg71}($)*svRJZ=us?`_ zlbHD|=3i;K)#LlYe3;E@5r>u~xi33#63axSY(R2wQgtKw=qaTm$j_oudRj1RXggI{ z$HmIn7uH5=NL5u?C64B{OMjpHNGLEtUQDaXI72t3*a0kY8FSgUh@{CWok!bXL?Tm?Po` zlCD@rF)TI0T&|jI8z~K*h5tMV%1A-xNvDS3CYY{&P6#4JAS2Nbh=j-M%_0k^o~awA;U5e%(YHK7*y#q6j>4SQCg5o z#n7;Gf=+Sekw`|o+C=jgE*AFYT&V{iu`3XaNJZcl8Zqft0+U4~xltQ~7i=35PMlvs zA_#MAgd#UXXTYdY<8w=pMh(>LLdaIs1-s9niX*hy_LM?6pp}tokU)nDVZei9;gg{N zmg+PQ=LlKNV`mpSwa$xX*o~ry4M+n-aHDkdvI^K#8r29GF@T$ffcbd9;i?w&^c-dO zV#{#?A{slkXC+rC+#!@?Jd!-7yCR*=pTkh%upxFnu{5y=ur`WD6FV1dYvQnX!MMiZ zDIM7efN?5O5cbmOF$_iBs7b?OlUiJ~JgnBm9oj^#$6cJXD8L;Z+bPph$p)6+rqNNb zeAkNLTccBa`7wy9z4U~`6A}79-NUuY%4nB_frF_lL#$(5)7fqo3SaVKnO;>vO9*|& zQAK=;9wuL!BonNK#l6eDIOU+NTuzaVFzwwu>6*170p)TfhX4`;_6GgncrN-0;*bM! z+M-3kV26+&7&E{rP>_!noS!@f$PyoZOIQ(@2eb-@+I*8ppsivwtrg+Mim-O#1aKZ& z5%JcFfblc@%*fJK#n8wFiv-7l#V072-tnZFHNRnFO67a0{P8i$_D0H9g9e}t3&}FJ zMoH*fTDn5Rtm2<$w!)4!z|uWA^yJ^-ho6KOaDX#%WYZLC8XW-!AY_oC1x4z444n(# z0eEmMjC0Zy8f%&~w>@b*I*fYRi~znQH0BDD5yl_uj;i+)M9cBk2&N5cX2^vxU?ic2 ze6m$kJ#3%}t`vf7CFrA>^J4q~*{%>B8jXq3gNB6cI2*FjBW^nNgbfzZehaesjv<@x z7_#|}A)D_QviXi78!{9g0D=}T))JloI|SJp4~eXdrjP8UUBJ;mjeJrAk`NPYB0)S2 zA5R63F>r-TTA?F86s>p{XWbwO1t`>GLIDbm4IR#aQ31Zs7u1L zmqrEI&^U|=oZRH7==P{s-=ZDXsPG-HcfR9M;X57`zT;8hJ02Cj<53Yb4*VFzaH#a8 zqQw{$=yCukvNBo;luU3%kis4H5+JBFAYK9l>Z%&mRmIs=m4-u&)m3C`u&X4-VS3L< zflwO;*g|c5XLS{6R#$OnbrpBcuHuopYJr1FU4;=#xT^#J9>P|Hp+RlK5NgxTdrqSQNjXwPt*-hToE@PVO>H2or`kW67U57&1n|Ejhm0xhTQ;t&a!7S~B@}^S z*?~M=G%P_Nky!X-(o6*rjRJ;H6S*T*Wo0CRKtyPk6~poePpta`SDK{ajXa%HO^%~} zGoMWP1Kt>}18NGFIg*6Al!uNpg_8kX3XC^tPLAtzkoNW-xqyBQLj0!q#NCK_v{}{Nd)0XNm$;q-s(MXJ z5clheVznL+|G@7YBT;NN0^%W0l6$2m-n|~z>$u+V#)}WU3E~&8?taJ@FIM{!#OuCh z;xk{G_#wWzcqb{zy%#4oAI2f4KPRPVbCOeq>!xH?dk6tFUCWad{n=zRadUE0u^U$m z`{5J)YR5RWOR}2Pq!DTy#)h>*4Qm{7GIK0*QOC}9Awi2l+J(pt*4p7(aSL8$c#0jj zfcLJp!#?lnj=2ldG*&|yLJ?~0sOhS2Ke7m89xUc~0|Mj%ilc%C1HUusW=T2PG`WJ4 zh~`o{5PG^I-Fho3LFj;upN^x{DigRB{)(f`k3U)R+LaYmM6+~YaoyaHGk<84)Ipu= zMm_ss0r00P`hIc)6@8=2im0kcGwEq<3h%%s%QhonMO=&quTAlWsld25`M9H<;i+hzmKZB}fC9)eR}Y)*>Xd-kjyIPVRGt+sorK-jo{h*(~XGY+5K%KmE&PY-y-{Wi>y7aV5=Vt(_R`Bb7M**8}Gk~;SuJy zmX#^?(I9TjM*>!8D%9$9L9t#10RasHW!EdyNpXYlfR02@ti-s=TA!14hsTLw2H;LJ zNrU4*i+AM=FsLXHtEp&4xT%s3o2*?mH>61Y5wuKPmVeJ}SZLsv5%gc+Pr(IDDKvU8 z1O5#u*(>{Q|Mua*i(4-EDY3@8dC@6}!Rn%|6CeC|@Zp0$yjalW#T#Z^{QgCY-_F|m zi?`Q^R->-}tm!#F?Oipp?7dsZE?EEY)|_WY{_BdC%gt}w>cg%dedAd>$8LOiYIV&8 zH}@Q0xLq64z1NqYp7GMtA8c-W(}IQmudk{;d4JL^gIj9%uBmwA(2=u$>-g2Hp=-W< z@^8z(i{JHxGGJ%tlu`3iAL(`7gh@wc{r>uW9R{}E_;k|7-A`P-Y-{DU-j|l0e($Hj zS*54>*Iw&cI-$e1y+>;%JZbh{b5GkDJ*K=eZr#__J)Tk5p7Fr6N>_*LM}M$l&_&;8 z?Oiwf^tNvm4~fs}Wo$Wp`^Md3e%rzCmfvH1vd!q(YWUS<-XW{6-kQ^8!MI5~w~eg` zeDzh?uZwoR^^te5 z0d1$G@A>%GpT?g4*`1dU7*-zF`lnluzCQk6{W5=@>U!{#rOQ6vwR3LH=1%i32)%as z!~Z({-O!=G=s)}0eYfm_e|@yc^HE{fquV|hz3IgKyTA3O_TAR?_J!3au6ZtV&*LNC z-#X~GbD!Tf_v7@-s|W8&@A%A1Q{OE=)Vlw5Ln~juw9iOU!D`Jwv^b8eTtRW)z+II@25BLlA*dePU$TZ?Ckxp&+@ zci)n;*H^u8Tc5U9m6yHWw90&Y=jBD+{~^*}8#ph}cYVJZ55MzNo^jigd8zXt}l&hKM(n0^27m7iz&*IXDF-aYS^QG<3}AIMqKf6>LabdGD&;`&z4 zkBG}0A9(b--?Lu(AU&thmweH;Q?}l7W9NhI2j8`POji5d*Ay<@61t|}p(fgZ#lt^8 zxx91Lvi&=5@6vnef~nR0ukQBI(~HXPK6`3)?lrr29o&6!$)>SAGxzA*PJVt&`n@aC zx)xtCaP8K+mh`*k?2}KKeASox&O9<<;{!=450Bq+L(j9Ge?e3%X31@MY!a8#)EnWKCaj@wyMTj(&Xh^Ow8!eK%w3&INscn$mpv!JE!m@@d>B z9Xq|Poc83>9c8})P_k|vp)4KP>YQ6nTl4*n^KRRE<GIpV0oPS+9-KG&Cv)C) zoBq0CYL~1wz547vZRj^OSudS&>)90x9zU@9)e+ZZZcP3z-`z{}=-;Nzmb=H^+N!i- zS*d5qtifrEnml?m3l7|cQ*JuCe%<0XPu@IFS>0<_V1EDWyPJa_8c{y6=K-_F`boow zU9qPBU3r_YTT*hxkCUcd@cxa>^8WeMKh_Q3^UdmZ+8s0d_A>gk`t+U+LwEM^PVaOy zcgUfsd9!xyA9wwakM8c<>CzMb^5WAs?aW%4J!x9Xie=q;FZuNuh0DMNB7^O8Ew-Ok_X-0y=#m4>po08;es?J z<)$lrZ=UL3+~nRdyO(TD{-MLEa~D5xP3Y^cht3fLe#~n3#fV2&%(*f7{DM>8|8eF` zPxOCp!Jb~`4u5Iu^+lDFZ+iOGK^c8J2fO^Ouw$FV=kGYZ|G7`C4Ro2&IlteV1AG3Z z%a$Q;Kjv+A+b>V7n(^1(2fNJ;{5JhauNMXkJn)$7gdZ-M{_C6jA1EJ_xcj8!yPKT< z)xF)Pm;1NR+H&yc<|AegfAYC=UtHlDzvz`qnpS*$X4Vs(rf)y_+F-vc_x+`)dP|d& zCtrKTTkl-`#NV>!|MR0kU;Q}S6z!g!leEX%WA&r^*PeOXgi&|xzkKD3-^Po54|Z=p zsd>+z{*}78*@Asvo#67f8M%D&fajVHdg-P2PW}D&Syjb;tip48Cf;XE*#7LhJGcC` z-}x7@a{^aFzGusq@ zdh+~hrcGJB?t^K6eet}Cmoty-Z`PvpH(%5AKJMIgo0e~Bck{JBtZ4nltq(lj@4TKxy$-(nz{c_K z`3~>Bw#UI1W%GVpn)T_2A73>5p>ryxK2|!ZOTu0E2427S-8*mW_w8F%2j`sq>W0o0 zYHqXd^(Cnnclmkc_ZQFl)z6%VCt|9%TIrBm}mC# zUmiOAO-je7zUuPiz>_{R`>c9pZ^i5BD}d<-ATwar*2| zTR*$v;W^5QB8us+- zC*OI|xV7>7N1mTJr|G!G!MFzxExK^Z0`8~V$nv&0jd&w6IW z@(=zwEo1q+doq4pw`SS=!2@@+nX_oiozFh5ZomKb>6Z?gzae-ibHS83PmLVd_oeSn z{qdp8_a3PDXyk(>83!KU{_0S7`S%k&KlCxq8Pu~?wbm|u;GoO;fBJrl$BKHCoH9RW z(ZerR@4aH@&OOFI@;`2Q+9#on=L}qb;oddkIB&Gxoc8pZQ|fWe0c6 zNg2I*$Ld3~Zdku=(~~E6IaJYqV&QFnq{B5p^!)k|DM4Q&@R_@twwfBr+U!A=& zWzSt3@0vgAv}rr9=sqd+*#T4TeCqA5bDs;G)A9Bv5AS>MBk!VHd&voi-!YLaj4cVdZJUH-|53YQxoA6D$<$M2>Z??UE!z0`K_i5hd z<8HT?{Md10&(C*19^WQ?_Pm}K6rX$Oj(P2`nlowmWe2Wr@oeF`3!0zz!lJiFROL6j z>Fd`|TK3Fmt0oS7WFt)(pvZcJ*PbGTPr;h=V&(Q}@C?wQf&CGX3=;OX1G zoj$~S$-v)BL*Gu@b^2ph4$s~A;UnWpPRflheCvlLtL{H>WsfgTPI>w2>?x;xvgMge zy7#=`=9|tQ^!i;X7u-7R;!oOV9$sm-^dC$^M_wTEIwc`6b zD+hK@x$NTGH=aBBmJ=`ORXyp*(#1!n4DQhDgJxsT*>&*UmtOj%!?i;W^bL6Q(%lE% zZ>ksU*_VCB+(G@_cXZZPJoSY-V@qN3@QP7izPF(G_21?d7v6H;RPC|y{tLe!pK!^G z#`Gtr+&U!j_WR2x?EUTDye3Dww-l25QXro&)Q$|S~C#}G(_kGLk;1&bvpn;px0%$V|FL#oTjT@Ruh!%`J;RRxhm5{jjaxwHa2M6n3&bS7-n;k>yP%jK&3xhy~^;kmMT4RuEs@USa7=koIBI9wabP$pl&MZn66XnAOnk*gsc~ zg!4xzNVOfmkwO#Nx5te#_uZp}4Jbcx+~XBJvXp>x%Iq&JwBqxT9)Xjj+FjnlLahcu zDm!2f!P%YdAQh4x$q{-fsn zjY?6Gv4h$HG8Ov7dLsqv^n?nZMJrjEU*}u?(oz#BRS+Oii=cyq0HlHhVGxs@MUQxc z+le71XizehDh&hp1M8NCa4%ZLiaeMTm~E;__#qS7!3QEZ$UwMF(@lgdGVwNW6LkWb zCRvK?O*=^LNM>Yy!$&EQiY6Umlu`H`U#(3EiqQdf{%Zm0QHWYZ9_HvE`6ER%i|}hzY~2q<75v_Y3!y;y z8WyfC}spBfAU`bZ^ymPj&+U{t0@$= z@%zts%RtZ%Zy6ExmRS-#zYxvV2*87IxC#<~{9ofKQ#E|T$m6xh%*l>%BCvCYHqvPQ z3D?ougBx)@W1W{$3~_s1gC3B6rgI>XWJ3q5H!`Y=0}&;`y~T#85ly>b5B12}WsMu8 z?23c9ux@z5Na+b0g-I!zgQi>29P-pgcdQ%hx`#$4yTQFfPAu;=%U>A#25W~P{9Rv(ceYF!3T=|Oo%tq$M$dEAh4?sd*zKy#byGUmEG{Vd_BwQwhdWdGr zwkfU^Bkfq*LF+^@Y`I1bFDo5-W$Bc%%5u3MJ5D&+Pn@H&SBY#jBDQ~EZprEmT1DcO z!LgG4CRtQf6vL{}R7@|PYH&cSnPfJn+nO2=z=&>iI&^jvrPP2q59$*~bryonleFGJ z3-DO~3n~%?aOp-+A%oN7$)iyuWew48S<#3OM~4tl)d8@O7_zLTrbGbuaeCB6 z7>ikeJ5~a&5|Frc9DE0-lvWQJN(M8_=o1Hjs<|yMh>LM(R*j;#9>8f?+rhZ(Q5xCN GJO2l3g94WT literal 0 HcmV?d00001 diff --git a/misc/builddeps/emscripten/gmp/lib/libgmp.la b/misc/builddeps/emscripten/gmp/lib/libgmp.la new file mode 100755 index 00000000..c674f82e --- /dev/null +++ b/misc/builddeps/emscripten/gmp/lib/libgmp.la @@ -0,0 +1,41 @@ +# libgmp.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='' + +# Names of this library. +library_names='' + +# The name of the static archive. +old_library='libgmp.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libgmp. +current=15 +age=5 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/home/gitpod/opt/lib' diff --git a/misc/builddeps/emscripten/gmp/lib/libgmpxx.a b/misc/builddeps/emscripten/gmp/lib/libgmpxx.a new file mode 100644 index 0000000000000000000000000000000000000000..61df092f104a8c30e03ae43e29a217ca1ce3f7fa GIT binary patch literal 31428 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 literal 0 HcmV?d00001 diff --git a/misc/builddeps/emscripten/gmp/lib/libgmpxx.la b/misc/builddeps/emscripten/gmp/lib/libgmpxx.la new file mode 100755 index 00000000..71a5bea3 --- /dev/null +++ b/misc/builddeps/emscripten/gmp/lib/libgmpxx.la @@ -0,0 +1,41 @@ +# libgmpxx.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='' + +# Names of this library. +library_names='' + +# The name of the static archive. +old_library='libgmpxx.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs=' /home/gitpod/opt/lib/libgmp.la' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libgmpxx. +current=11 +age=7 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/home/gitpod/opt/lib' diff --git a/misc/builddeps/emscripten/gmp/lib/pkgconfig/gmp.pc b/misc/builddeps/emscripten/gmp/lib/pkgconfig/gmp.pc new file mode 100644 index 00000000..f38255e0 --- /dev/null +++ b/misc/builddeps/emscripten/gmp/lib/pkgconfig/gmp.pc @@ -0,0 +1,11 @@ +prefix=/home/gitpod/opt +exec_prefix=${prefix} +includedir=${prefix}/include +libdir=${exec_prefix}/lib + +Name: GNU MP +Description: GNU Multiple Precision Arithmetic Library +URL: https://gmplib.org +Version: 6.3.0 +Cflags: -I${includedir} +Libs: -L${libdir} -lgmp diff --git a/misc/builddeps/emscripten/gmp/lib/pkgconfig/gmpxx.pc b/misc/builddeps/emscripten/gmp/lib/pkgconfig/gmpxx.pc new file mode 100644 index 00000000..44b01fa8 --- /dev/null +++ b/misc/builddeps/emscripten/gmp/lib/pkgconfig/gmpxx.pc @@ -0,0 +1,12 @@ +prefix=/home/gitpod/opt +exec_prefix=${prefix} +includedir=${prefix}/include +libdir=${exec_prefix}/lib + +Name: GNU MP C++ +Description: GNU Multiple Precision Arithmetic Library (C++ bindings) +URL: https://gmplib.org +Version: 6.3.0 +Requires: gmp +Cflags: -I${includedir} +Libs: -L${libdir} -lgmpxx diff --git a/misc/builddeps/emscripten/gmp/share/info/dir b/misc/builddeps/emscripten/gmp/share/info/dir new file mode 100644 index 00000000..3a2d9903 --- /dev/null +++ b/misc/builddeps/emscripten/gmp/share/info/dir @@ -0,0 +1,18 @@ +This is the file .../info/dir, which contains the +topmost node of the Info hierarchy, called (dir)Top. +The first time you invoke Info you start off looking at this node. + +File: dir, Node: Top This is the top of the INFO tree + + This (the Directory node) gives a menu of major topics. + Typing "q" exits, "H" lists all Info commands, "d" returns here, + "h" gives a primer for first-timers, + "mEmacs" visits the Emacs manual, etc. + + In Emacs, you can click mouse button 2 on a menu item or cross reference + to select it. + +* Menu: + +GNU libraries +* gmp: (gmp). GNU Multiple Precision Arithmetic Library. diff --git a/misc/builddeps/emscripten/gmp/share/info/gmp.info b/misc/builddeps/emscripten/gmp/share/info/gmp.info new file mode 100644 index 00000000..91caf890 --- /dev/null +++ b/misc/builddeps/emscripten/gmp/share/info/gmp.info @@ -0,0 +1,179 @@ +This is gmp.info, produced by makeinfo version 6.7 from gmp.texi. + +This manual describes how to install and use the GNU multiple precision +arithmetic library, version 6.3.0. + + Copyright 1991, 1993-2016, 2018-2020 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being "A GNU Manual", and +with the Back-Cover Texts being "You have freedom to copy and modify +this GNU Manual, like GNU software". A copy of the license is included +in *note GNU Free Documentation License::. +INFO-DIR-SECTION GNU libraries +START-INFO-DIR-ENTRY +* gmp: (gmp). GNU Multiple Precision Arithmetic Library. +END-INFO-DIR-ENTRY + + +Indirect: +gmp.info-1: 863 +gmp.info-2: 301246 + +Tag Table: +(Indirect) +Node: Top863 +Node: Copying2941 +Node: Introduction to GMP5288 +Node: Installing GMP8006 +Node: Build Options8738 +Node: ABI and ISA24450 +Node: Notes for Package Builds34296 +Node: Notes for Particular Systems37383 +Node: Known Build Problems45134 +Node: Performance optimization48667 +Node: GMP Basics49795 +Node: Headers and Libraries50443 +Node: Nomenclature and Types52054 +Node: Function Classes56262 +Node: Variable Conventions57797 +Node: Parameter Conventions60151 +Node: Memory Management62103 +Node: Reentrancy63231 +Node: Useful Macros and Constants65099 +Node: Compatibility with older versions66090 +Node: Demonstration Programs67000 +Node: Efficiency68859 +Node: Debugging76461 +Node: Profiling83236 +Node: Autoconf87227 +Node: Emacs89008 +Node: Reporting Bugs89614 +Node: Integer Functions92311 +Node: Initializing Integers93087 +Node: Assigning Integers95463 +Node: Simultaneous Integer Init & Assign97076 +Node: Converting Integers98723 +Node: Integer Arithmetic101663 +Node: Integer Division103399 +Node: Integer Exponentiation110158 +Node: Integer Roots111655 +Node: Number Theoretic Functions113372 +Node: Integer Comparisons121149 +Node: Integer Logic and Bit Fiddling122587 +Node: I/O of Integers125385 +Node: Integer Random Numbers128378 +Node: Integer Import and Export131002 +Node: Miscellaneous Integer Functions135018 +Node: Integer Special Functions136932 +Node: Rational Number Functions141105 +Node: Initializing Rationals142298 +Node: Rational Conversions144771 +Node: Rational Arithmetic146793 +Node: Comparing Rationals148205 +Node: Applying Integer Functions149674 +Node: I/O of Rationals151380 +Node: Floating-point Functions153739 +Node: Initializing Floats156790 +Node: Assigning Floats160882 +Node: Simultaneous Float Init & Assign163472 +Node: Converting Floats165022 +Node: Float Arithmetic168287 +Node: Float Comparison170440 +Node: I/O of Floats172011 +Node: Miscellaneous Float Functions174700 +Node: Low-level Functions176702 +Node: Random Number Functions210955 +Node: Random State Initialization212023 +Node: Random State Seeding214889 +Node: Random State Miscellaneous216289 +Node: Formatted Output216931 +Node: Formatted Output Strings217176 +Node: Formatted Output Functions222572 +Node: C++ Formatted Output226636 +Node: Formatted Input229337 +Node: Formatted Input Strings229573 +Node: Formatted Input Functions234233 +Node: C++ Formatted Input237202 +Node: C++ Class Interface239105 +Node: C++ Interface General240056 +Node: C++ Interface Integers243125 +Node: C++ Interface Rationals247358 +Node: C++ Interface Floats251382 +Node: C++ Interface Random Numbers257398 +Node: C++ Interface Limitations259798 +Node: Custom Allocation263373 +Node: Language Bindings267592 +Node: Algorithms270905 +Node: Multiplication Algorithms271605 +Node: Basecase Multiplication272694 +Node: Karatsuba Multiplication274602 +Node: Toom 3-Way Multiplication278226 +Node: Toom 4-Way Multiplication284650 +Node: Higher degree Toom'n'half286028 +Node: FFT Multiplication287316 +Node: Other Multiplication292651 +Node: Unbalanced Multiplication295125 +Node: Division Algorithms295913 +Node: Single Limb Division296292 +Node: Basecase Division299180 +Node: Divide and Conquer Division301246 +Node: Block-Wise Barrett Division303314 +Node: Exact Division303966 +Node: Exact Remainder307130 +Node: Small Quotient Division309380 +Node: Greatest Common Divisor Algorithms310978 +Node: Binary GCD311275 +Node: Lehmer's Algorithm314127 +Node: Subquadratic GCD316363 +Node: Extended GCD318833 +Node: Jacobi Symbol320152 +Node: Powering Algorithms322061 +Node: Normal Powering Algorithm322324 +Node: Modular Powering Algorithm322852 +Node: Root Extraction Algorithms323634 +Node: Square Root Algorithm323949 +Node: Nth Root Algorithm326090 +Node: Perfect Square Algorithm326875 +Node: Perfect Power Algorithm328962 +Node: Radix Conversion Algorithms329583 +Node: Binary to Radix329959 +Node: Radix to Binary333580 +Node: Other Algorithms335668 +Node: Prime Testing Algorithm336020 +Node: Factorial Algorithm337204 +Node: Binomial Coefficients Algorithm339606 +Node: Fibonacci Numbers Algorithm340500 +Node: Lucas Numbers Algorithm342974 +Node: Random Number Algorithms343695 +Node: Assembly Coding345815 +Node: Assembly Code Organisation346775 +Node: Assembly Basics347742 +Node: Assembly Carry Propagation348892 +Node: Assembly Cache Handling350722 +Node: Assembly Functional Units352883 +Node: Assembly Floating Point354502 +Node: Assembly SIMD Instructions358281 +Node: Assembly Software Pipelining359263 +Node: Assembly Loop Unrolling360324 +Node: Assembly Writing Guide362539 +Node: Internals365304 +Node: Integer Internals365816 +Node: Rational Internals368282 +Node: Float Internals369520 +Node: Raw Output Internals376925 +Node: C++ Interface Internals378120 +Node: Contributors381441 +Node: References387669 +Node: GNU Free Documentation License393588 +Node: Concept Index418730 +Node: Function Index466824 + +End Tag Table + + +Local Variables: +coding: iso-8859-1 +End: diff --git a/misc/builddeps/emscripten/gmp/share/info/gmp.info-1 b/misc/builddeps/emscripten/gmp/share/info/gmp.info-1 new file mode 100644 index 00000000..a30265d0 --- /dev/null +++ b/misc/builddeps/emscripten/gmp/share/info/gmp.info-1 @@ -0,0 +1,7025 @@ +This is gmp.info, produced by makeinfo version 6.7 from gmp.texi. + +This manual describes how to install and use the GNU multiple precision +arithmetic library, version 6.3.0. + + Copyright 1991, 1993-2016, 2018-2020 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being "A GNU Manual", and +with the Back-Cover Texts being "You have freedom to copy and modify +this GNU Manual, like GNU software". A copy of the license is included +in *note GNU Free Documentation License::. +INFO-DIR-SECTION GNU libraries +START-INFO-DIR-ENTRY +* gmp: (gmp). GNU Multiple Precision Arithmetic Library. +END-INFO-DIR-ENTRY + + +File: gmp.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir) + +GNU MP +****** + +This manual describes how to install and use the GNU multiple precision +arithmetic library, version 6.3.0. + + Copyright 1991, 1993-2016, 2018-2020 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being "A GNU Manual", and +with the Back-Cover Texts being "You have freedom to copy and modify +this GNU Manual, like GNU software". A copy of the license is included +in *note GNU Free Documentation License::. + +* Menu: + +* Copying:: GMP Copying Conditions (LGPL). +* Introduction to GMP:: Brief introduction to GNU MP. +* Installing GMP:: How to configure and compile the GMP library. +* GMP Basics:: What every GMP user should know. +* Reporting Bugs:: How to usefully report bugs. +* Integer Functions:: Functions for arithmetic on signed integers. +* Rational Number Functions:: Functions for arithmetic on rational numbers. +* Floating-point Functions:: Functions for arithmetic on floats. +* Low-level Functions:: Fast functions for natural numbers. +* Random Number Functions:: Functions for generating random numbers. +* Formatted Output:: 'printf' style output. +* Formatted Input:: 'scanf' style input. +* C++ Class Interface:: Class wrappers around GMP types. +* Custom Allocation:: How to customize the internal allocation. +* Language Bindings:: Using GMP from other languages. +* Algorithms:: What happens behind the scenes. +* Internals:: How values are represented behind the scenes. + +* Contributors:: Who brings you this library? +* References:: Some useful papers and books to read. +* GNU Free Documentation License:: +* Concept Index:: +* Function Index:: + + +File: gmp.info, Node: Copying, Next: Introduction to GMP, Prev: Top, Up: Top + +GNU MP Copying Conditions +************************* + +This library is "free"; this means that everyone is free to use it and +free to redistribute it on a free basis. The library is not in the +public domain; it is copyrighted and there are restrictions on its +distribution, but these restrictions are designed to permit everything +that a good cooperating citizen would want to do. What is not allowed +is to try to prevent others from further sharing any version of this +library that they might get from you. + + Specifically, we want to make sure that you have the right to give +away copies of the library, that you receive source code or else can get +it if you want it, that you can change this library or use pieces of it +in new free programs, and that you know you can do these things. + + To make sure that everyone has such rights, we have to forbid you to +deprive anyone else of these rights. For example, if you distribute +copies of the GNU MP library, you must give the recipients all the +rights that you have. You must make sure that they, too, receive or can +get the source code. And you must tell them their rights. + + Also, for our own protection, we must make certain that everyone +finds out that there is no warranty for the GNU MP library. If it is +modified by someone else and passed on, we want their recipients to know +that what they have is not what we distributed, so that any problems +introduced by others will not reflect on our reputation. + + More precisely, the GNU MP library is dual licensed, under the +conditions of the GNU Lesser General Public License version 3 (see +'COPYING.LESSERv3'), or the GNU General Public License version 2 (see +'COPYINGv2'). This is the recipient's choice, and the recipient also +has the additional option of applying later versions of these licenses. +(The reason for this dual licensing is to make it possible to use the +library with programs which are licensed under GPL version 2, but which +for historical or other reasons do not allow use under later versions of +the GPL.) + + Programs which are not part of the library itself, such as +demonstration programs and the GMP testsuite, are licensed under the +terms of the GNU General Public License version 3 (see 'COPYINGv3'), or +any later version. + + +File: gmp.info, Node: Introduction to GMP, Next: Installing GMP, Prev: Copying, Up: Top + +1 Introduction to GNU MP +************************ + +GNU MP is a portable library written in C for arbitrary precision +arithmetic on integers, rational numbers, and floating-point numbers. +It aims to provide the fastest possible arithmetic for all applications +that need higher precision than is directly supported by the basic C +types. + + Many applications use just a few hundred bits of precision; but some +applications may need thousands or even millions of bits. GMP is +designed to give good performance for both, by choosing algorithms based +on the sizes of the operands, and by carefully keeping the overhead at a +minimum. + + The speed of GMP is achieved by using fullwords as the basic +arithmetic type, by using sophisticated algorithms, by including +carefully optimized assembly code for the most common inner loops for +many different CPUs, and by a general emphasis on speed (as opposed to +simplicity or elegance). + + There is assembly code for these CPUs: ARM Cortex-A9, Cortex-A15, and +generic ARM, DEC Alpha 21064, 21164, and 21264, AMD K8 and K10 (sold +under many brands, e.g. Athlon64, Phenom, Opteron), Bulldozer, and +Bobcat, Intel Pentium, Pentium Pro/II/III, Pentium 4, Core2, Nehalem, +Sandy bridge, Haswell, generic x86, Intel IA-64, Motorola/IBM PowerPC 32 +and 64 such as POWER970, POWER5, POWER6, and POWER7, MIPS 32-bit and +64-bit, SPARC 32-bit and 64-bit with special support for all UltraSPARC +models. There is also assembly code for many obsolete CPUs. + +For up-to-date information on GMP, please see the GMP web pages at + + + +The latest version of the library is available at + + + + Many sites around the world mirror 'ftp.gnu.org', please use a mirror +near you, see for a full list. + + There are three public mailing lists of interest. One for release +announcements, one for general questions and discussions about usage of +the GMP library and one for bug reports. For more information, see + + . + + The proper place for bug reports is . See *note +Reporting Bugs:: for information about reporting bugs. + + +1.1 How to use this Manual +========================== + +Everyone should read *note GMP Basics::. If you need to install the +library yourself, then read *note Installing GMP::. If you have a +system with multiple ABIs, then read *note ABI and ISA::, for the +compiler options that must be used on applications. + + The rest of the manual can be used for later reference, although it +is probably a good idea to glance through it. + + +File: gmp.info, Node: Installing GMP, Next: GMP Basics, Prev: Introduction to GMP, Up: Top + +2 Installing GMP +**************** + +GMP has an autoconf/automake/libtool based configuration system. On a +Unix-like system a basic build can be done with + + ./configure + make + +Some self-tests can be run with + + make check + +And you can install (under '/usr/local' by default) with + + make install + + If you experience problems, please report them to +. See *note Reporting Bugs::, for information on +what to include in useful bug reports. + +* Menu: + +* Build Options:: +* ABI and ISA:: +* Notes for Package Builds:: +* Notes for Particular Systems:: +* Known Build Problems:: +* Performance optimization:: + + +File: gmp.info, Node: Build Options, Next: ABI and ISA, Prev: Installing GMP, Up: Installing GMP + +2.1 Build Options +================= + +All the usual autoconf configure options are available, run './configure +--help' for a summary. The file 'INSTALL.autoconf' has some generic +installation information too. + +Tools + 'configure' requires various Unix-like tools. See *note Notes for + Particular Systems::, for some options on non-Unix systems. + + It might be possible to build without the help of 'configure', + certainly all the code is there, but unfortunately you'll be on + your own. + +Build Directory + To compile in a separate build directory, 'cd' to that directory, + and prefix the configure command with the path to the GMP source + directory. For example + + cd /my/build/dir + /my/sources/gmp-6.3.0/configure + + Not all 'make' programs have the necessary features ('VPATH') to + support this. In particular, SunOS and Slowaris 'make' have bugs + that make them unable to build in a separate directory. Use GNU + 'make' instead. + +'--prefix' and '--exec-prefix' + The '--prefix' option can be used in the normal way to direct GMP + to install under a particular tree. The default is '/usr/local'. + + '--exec-prefix' can be used to direct architecture-dependent files + like 'libgmp.a' to a different location. This can be used to share + architecture-independent parts like the documentation, but separate + the dependent parts. Note however that 'gmp.h' is + architecture-dependent since it encodes certain aspects of + 'libgmp', so it will be necessary to ensure both '$prefix/include' + and '$exec_prefix/include' are available to the compiler. + +'--disable-shared', '--disable-static' + By default both shared and static libraries are built (where + possible), but one or other can be disabled. Shared libraries + result in smaller executables and permit code sharing between + separate running processes, but on some CPUs are slightly slower, + having a small cost on each function call. + +Native Compilation, '--build=CPU-VENDOR-OS' + For normal native compilation, the system can be specified with + '--build'. By default './configure' uses the output from running + './config.guess'. On some systems './config.guess' can determine + the exact CPU type, on others it will be necessary to give it + explicitly. For example, + + ./configure --build=ultrasparc-sun-solaris2.7 + + In all cases the 'OS' part is important, since it controls how + libtool generates shared libraries. Running './config.guess' is + the simplest way to see what it should be, if you don't know + already. + +Cross Compilation, '--host=CPU-VENDOR-OS' + When cross-compiling, the system used for compiling is given by + '--build' and the system where the library will run is given by + '--host'. For example when using a FreeBSD Athlon system to build + GNU/Linux m68k binaries, + + ./configure --build=athlon-pc-freebsd3.5 --host=m68k-mac-linux-gnu + + Compiler tools are sought first with the host system type as a + prefix. For example 'm68k-mac-linux-gnu-ranlib' is tried, then + plain 'ranlib'. This makes it possible for a set of + cross-compiling tools to co-exist with native tools. The prefix is + the argument to '--host', and this can be an alias, such as + 'm68k-linux'. But note that tools don't have to be set up this + way, it's enough to just have a 'PATH' with a suitable + cross-compiling 'cc' etc. + + Compiling for a different CPU in the same family as the build + system is a form of cross-compilation, though very possibly this + would merely be special options on a native compiler. In any case + './configure' avoids depending on being able to run code on the + build system, which is important when creating binaries for a newer + CPU since they very possibly won't run on the build system. + + In all cases the compiler must be able to produce an executable (of + whatever format) from a standard C 'main'. Although only object + files will go to make up 'libgmp', './configure' uses linking tests + for various purposes, such as determining what functions are + available on the host system. + + Currently a warning is given unless an explicit '--build' is used + when cross-compiling, because it may not be possible to correctly + guess the build system type if the 'PATH' has only a + cross-compiling 'cc'. + + Note that the '--target' option is not appropriate for GMP. It's + for use when building compiler tools, with '--host' being where + they will run, and '--target' what they'll produce code for. + Ordinary programs or libraries like GMP are only interested in the + '--host' part, being where they'll run. (Some past versions of GMP + used '--target' incorrectly.) + +CPU types + In general, if you want a library that runs as fast as possible, + you should configure GMP for the exact CPU type your system uses. + However, this may mean the binaries won't run on older members of + the family, and might run slower on other members, older or newer. + The best idea is always to build GMP for the exact machine type you + intend to run it on. + + The following CPUs have specific support. See 'configure.ac' for + details of what code and compiler options they select. + + * Alpha: alpha, alphaev5, alphaev56, alphapca56, alphapca57, + alphaev6, alphaev67, alphaev68, alphaev7 + + * Cray: c90, j90, t90, sv1 + + * HPPA: hppa1.0, hppa1.1, hppa2.0, hppa2.0n, hppa2.0w, hppa64 + + * IA-64: ia64, itanium, itanium2 + + * MIPS: mips, mips3, mips64 + + * Motorola: m68k, m68000, m68010, m68020, m68030, m68040, + m68060, m68302, m68360, m88k, m88110 + + * POWER: power, power1, power2, power2sc + + * PowerPC: powerpc, powerpc64, powerpc401, powerpc403, + powerpc405, powerpc505, powerpc601, powerpc602, powerpc603, + powerpc603e, powerpc604, powerpc604e, powerpc620, powerpc630, + powerpc740, powerpc7400, powerpc7450, powerpc750, powerpc801, + powerpc821, powerpc823, powerpc860, powerpc970 + + * SPARC: sparc, sparcv8, microsparc, supersparc, sparcv9, + ultrasparc, ultrasparc2, ultrasparc2i, ultrasparc3, sparc64 + + * x86 family: i386, i486, i586, pentium, pentiummmx, pentiumpro, + pentium2, pentium3, pentium4, k6, k62, k63, athlon, amd64, + viac3, viac32 + + * Other: arm, sh, sh2, vax, + + CPUs not listed will use generic C code. + +Generic C Build + If some of the assembly code causes problems, or if otherwise + desired, the generic C code can be selected with the configure + '--disable-assembly'. + + Note that this will run quite slowly, but it should be portable and + should at least make it possible to get something running if all + else fails. + +Fat binary, '--enable-fat' + Using '--enable-fat' selects a "fat binary" build on x86, where + optimized low level subroutines are chosen at runtime according to + the CPU detected. This means more code, but gives good performance + on all x86 chips. (This option might become available for more + architectures in the future.) + +'ABI' + On some systems GMP supports multiple ABIs (application binary + interfaces), meaning data type sizes and calling conventions. By + default GMP chooses the best ABI available, but a particular ABI + can be selected. For example + + ./configure --host=mips64-sgi-irix6 ABI=n32 + + See *note ABI and ISA::, for the available choices on relevant + CPUs, and what applications need to do. + +'CC', 'CFLAGS' + By default the C compiler used is chosen from among some likely + candidates, with 'gcc' normally preferred if it's present. The + usual 'CC=whatever' can be passed to './configure' to choose + something different. + + For various systems, default compiler flags are set based on the + CPU and compiler. The usual 'CFLAGS="-whatever"' can be passed to + './configure' to use something different or to set good flags for + systems GMP doesn't otherwise know. + + The 'CC' and 'CFLAGS' used are printed during './configure', and + can be found in each generated 'Makefile'. This is the easiest way + to check the defaults when considering changing or adding + something. + + Note that when 'CC' and 'CFLAGS' are specified on a system + supporting multiple ABIs it's important to give an explicit + 'ABI=whatever', since GMP can't determine the ABI just from the + flags and won't be able to select the correct assembly code. + + If just 'CC' is selected then normal default 'CFLAGS' for that + compiler will be used (if GMP recognises it). For example 'CC=gcc' + can be used to force the use of GCC, with default flags (and + default ABI). + +'CPPFLAGS' + Any flags like '-D' defines or '-I' includes required by the + preprocessor should be set in 'CPPFLAGS' rather than 'CFLAGS'. + Compiling is done with both 'CPPFLAGS' and 'CFLAGS', but + preprocessing uses just 'CPPFLAGS'. This distinction is because + most preprocessors won't accept all the flags the compiler does. + Preprocessing is done separately in some configure tests. + +'CC_FOR_BUILD' + Some build-time programs are compiled and run to generate + host-specific data tables. 'CC_FOR_BUILD' is the compiler used for + this. It doesn't need to be in any particular ABI or mode, it + merely needs to generate executables that can run. The default is + to try the selected 'CC' and some likely candidates such as 'cc' + and 'gcc', looking for something that works. + + No flags are used with 'CC_FOR_BUILD' because a simple invocation + like 'cc foo.c' should be enough. If some particular options are + required they can be included as for instance 'CC_FOR_BUILD="cc + -whatever"'. + +C++ Support, '--enable-cxx' + C++ support in GMP can be enabled with '--enable-cxx', in which + case a C++ compiler will be required. As a convenience + '--enable-cxx=detect' can be used to enable C++ support only if a + compiler can be found. The C++ support consists of a library + 'libgmpxx.la' and header file 'gmpxx.h' (*note Headers and + Libraries::). + + A separate 'libgmpxx.la' has been adopted rather than having C++ + objects within 'libgmp.la' in order to ensure dynamic linked C + programs aren't bloated by a dependency on the C++ standard + library, and to avoid any chance that the C++ compiler could be + required when linking plain C programs. + + 'libgmpxx.la' will use certain internals from 'libgmp.la' and can + only be expected to work with 'libgmp.la' from the same GMP + version. Future changes to the relevant internals will be + accompanied by renaming, so a mismatch will cause unresolved + symbols rather than perhaps mysterious misbehaviour. + + In general 'libgmpxx.la' will be usable only with the C++ compiler + that built it, since name mangling and runtime support are usually + incompatible between different compilers. + +'CXX', 'CXXFLAGS' + When C++ support is enabled, the C++ compiler and its flags can be + set with variables 'CXX' and 'CXXFLAGS' in the usual way. The + default for 'CXX' is the first compiler that works from a list of + likely candidates, with 'g++' normally preferred when available. + The default for 'CXXFLAGS' is to try 'CFLAGS', 'CFLAGS' without + '-g', then for 'g++' either '-g -O2' or '-O2', or for other + compilers '-g' or nothing. Trying 'CFLAGS' this way is convenient + when using 'gcc' and 'g++' together, since the flags for 'gcc' will + usually suit 'g++'. + + It's important that the C and C++ compilers match, meaning their + startup and runtime support routines are compatible and that they + generate code in the same ABI (if there's a choice of ABIs on the + system). './configure' isn't currently able to check these things + very well itself, so for that reason '--disable-cxx' is the + default, to avoid a build failure due to a compiler mismatch. + Perhaps this will change in the future. + + Incidentally, it's normally not good enough to set 'CXX' to the + same as 'CC'. Although 'gcc' for instance recognises 'foo.cc' as + C++ code, only 'g++' will invoke the linker the right way when + building an executable or shared library from C++ object files. + +Temporary Memory, '--enable-alloca=' + GMP allocates temporary workspace using one of the following three + methods, which can be selected with for instance + '--enable-alloca=malloc-reentrant'. + + * 'alloca' - C library or compiler builtin. + * 'malloc-reentrant' - the heap, in a re-entrant fashion. + * 'malloc-notreentrant' - the heap, with global variables. + + For convenience, the following choices are also available. + '--disable-alloca' is the same as 'no'. + + * 'yes' - a synonym for 'alloca'. + * 'no' - a synonym for 'malloc-reentrant'. + * 'reentrant' - 'alloca' if available, otherwise + 'malloc-reentrant'. This is the default. + * 'notreentrant' - 'alloca' if available, otherwise + 'malloc-notreentrant'. + + 'alloca' is reentrant and fast, and is recommended. It actually + allocates just small blocks on the stack; larger ones use + malloc-reentrant. + + 'malloc-reentrant' is, as the name suggests, reentrant and thread + safe, but 'malloc-notreentrant' is faster and should be used if + reentrancy is not required. + + The two malloc methods in fact use the memory allocation functions + selected by 'mp_set_memory_functions', these being 'malloc' and + friends by default. *Note Custom Allocation::. + + An additional choice '--enable-alloca=debug' is available, to help + when debugging memory related problems (*note Debugging::). + +FFT Multiplication, '--disable-fft' + By default multiplications are done using Karatsuba, 3-way Toom, + higher degree Toom, and Fermat FFT. The FFT is only used on large + to very large operands and can be disabled to save code size if + desired. + +Assertion Checking, '--enable-assert' + This option enables some consistency checking within the library. + This can be of use while debugging, *note Debugging::. + +Execution Profiling, '--enable-profiling=prof/gprof/instrument' + Enable profiling support, in one of various styles, *note + Profiling::. + +'MPN_PATH' + Various assembly versions of each mpn subroutines are provided. + For a given CPU, a search is made through a path to choose a + version of each. For example 'sparcv8' has + + MPN_PATH="sparc32/v8 sparc32 generic" + + which means look first for v8 code, then plain sparc32 (which is + v7), and finally fall back on generic C. Knowledgeable users with + special requirements can specify a different path. Normally this + is completely unnecessary. + +Documentation + The source for the document you're now reading is 'doc/gmp.texi', + in Texinfo format, see *note Texinfo: (texinfo)Top. + + Info format 'doc/gmp.info' is included in the distribution. The + usual automake targets are available to make PostScript, DVI, PDF + and HTML (these will require various TeX and Texinfo tools). + + DocBook and XML can be generated by the Texinfo 'makeinfo' program + too, see *note Options for 'makeinfo': (texinfo)makeinfo options. + + Some supplementary notes can also be found in the 'doc' + subdirectory. + + +File: gmp.info, Node: ABI and ISA, Next: Notes for Package Builds, Prev: Build Options, Up: Installing GMP + +2.2 ABI and ISA +=============== + +ABI (Application Binary Interface) refers to the calling conventions +between functions, meaning what registers are used and what sizes the +various C data types are. ISA (Instruction Set Architecture) refers to +the instructions and registers a CPU has available. + + Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI defined, +the latter for compatibility with older CPUs in the family. GMP +supports some CPUs like this in both ABIs. In fact within GMP 'ABI' +means a combination of chip ABI, plus how GMP chooses to use it. For +example in some 32-bit ABIs, GMP may support a limb as either a 32-bit +'long' or a 64-bit 'long long'. + + By default GMP chooses the best ABI available for a given system, and +this generally gives significantly greater speed. But an ABI can be +chosen explicitly to make GMP compatible with other libraries, or +particular application requirements. For example, + + ./configure ABI=32 + + In all cases it's vital that all object code used in a given program +is compiled for the same ABI. + + Usually a limb is implemented as a 'long'. When a 'long long' limb +is used this is encoded in the generated 'gmp.h'. This is convenient +for applications, but it does mean that 'gmp.h' will vary, and can't be +just copied around. 'gmp.h' remains compiler independent though, since +all compilers for a particular ABI will be expected to use the same limb +type. + + Currently no attempt is made to follow whatever conventions a system +has for installing library or header files built for a particular ABI. +This will probably only matter when installing multiple builds of GMP, +and it might be as simple as configuring with a special 'libdir', or it +might require more than that. Note that builds for different ABIs need +to be done separately, with a fresh './configure' and 'make' each. + + +AMD64 ('x86_64') + On AMD64 systems supporting both 32-bit and 64-bit modes for + applications, the following ABI choices are available. + + 'ABI=64' + The 64-bit ABI uses 64-bit limbs and pointers and makes full + use of the chip architecture. This is the default. + Applications will usually not need special compiler flags, but + for reference the option is + + gcc -m64 + + 'ABI=32' + The 32-bit ABI is the usual i386 conventions. This will be + slower, and is not recommended except for inter-operating with + other code not yet 64-bit capable. Applications must be + compiled with + + gcc -m32 + + (In GCC 2.95 and earlier there's no '-m32' option, it's the + only mode.) + + 'ABI=x32' + The x32 ABI uses 64-bit limbs but 32-bit pointers. Like the + 64-bit ABI, it makes full use of the chip's arithmetic + capabilities. This ABI is not supported by all operating + systems. + + gcc -mx32 + + +HPPA 2.0 ('hppa2.0*', 'hppa64') + 'ABI=2.0w' + The 2.0w ABI uses 64-bit limbs and pointers and is available + on HP-UX 11 or up. Applications must be compiled with + + gcc [built for 2.0w] + cc +DD64 + + 'ABI=2.0n' + The 2.0n ABI means the 32-bit HPPA 1.0 ABI and all its normal + calling conventions, but with 64-bit instructions permitted + within functions. GMP uses a 64-bit 'long long' for a limb. + This ABI is available on hppa64 GNU/Linux and on HP-UX 10 or + higher. Applications must be compiled with + + gcc [built for 2.0n] + cc +DA2.0 +e + + Note that current versions of GCC (e.g. 3.2) don't generate + 64-bit instructions for 'long long' operations and so may be + slower than for 2.0w. (The GMP assembly code is the same + though.) + + 'ABI=1.0' + HPPA 2.0 CPUs can run all HPPA 1.0 and 1.1 code in the 32-bit + HPPA 1.0 ABI. No special compiler options are needed for + applications. + + All three ABIs are available for CPU types 'hppa2.0w', 'hppa2.0' + and 'hppa64', but for CPU type 'hppa2.0n' only 2.0n or 1.0 are + considered. + + Note that GCC on HP-UX has no options to choose between 2.0n and + 2.0w modes, unlike HP 'cc'. Instead it must be built for one or + the other ABI. GMP will detect how it was built, and skip to the + corresponding 'ABI'. + + +IA-64 under HP-UX ('ia64*-*-hpux*', 'itanium*-*-hpux*') + HP-UX supports two ABIs for IA-64. GMP performance is the same in + both. + + 'ABI=32' + In the 32-bit ABI, pointers, 'int's and 'long's are 32 bits + and GMP uses a 64 bit 'long long' for a limb. Applications + can be compiled without any special flags since this ABI is + the default in both HP C and GCC, but for reference the flags + are + + gcc -milp32 + cc +DD32 + + 'ABI=64' + In the 64-bit ABI, 'long's and pointers are 64 bits and GMP + uses a 'long' for a limb. Applications must be compiled with + + gcc -mlp64 + cc +DD64 + + On other IA-64 systems, GNU/Linux for instance, 'ABI=64' is the + only choice. + + +MIPS under IRIX 6 ('mips*-*-irix[6789]') + IRIX 6 always has a 64-bit MIPS 3 or better CPU, and supports ABIs + o32, n32, and 64. n32 or 64 are recommended, and GMP performance + will be the same in each. The default is n32. + + 'ABI=o32' + The o32 ABI is 32-bit pointers and integers, and no 64-bit + operations. GMP will be slower than in n32 or 64, this option + only exists to support old compilers, e.g. GCC 2.7.2. + Applications can be compiled with no special flags on an old + compiler, or on a newer compiler with + + gcc -mabi=32 + cc -32 + + 'ABI=n32' + The n32 ABI is 32-bit pointers and integers, but with a 64-bit + limb using a 'long long'. Applications must be compiled with + + gcc -mabi=n32 + cc -n32 + + 'ABI=64' + The 64-bit ABI is 64-bit pointers and integers. Applications + must be compiled with + + gcc -mabi=64 + cc -64 + + Note that MIPS GNU/Linux, as of kernel version 2.2, doesn't have + the necessary support for n32 or 64 and so only gets a 32-bit limb + and the MIPS 2 code. + + +PowerPC 64 ('powerpc64', 'powerpc620', 'powerpc630', 'powerpc970', 'power4', 'power5') + 'ABI=mode64' + The AIX 64 ABI uses 64-bit limbs and pointers and is the + default on PowerPC 64 '*-*-aix*' systems. Applications must + be compiled with + + gcc -maix64 + xlc -q64 + + On 64-bit GNU/Linux, BSD, and Mac OS X/Darwin systems, the + applications must be compiled with + + gcc -m64 + + 'ABI=mode32' + The 'mode32' ABI uses a 64-bit 'long long' limb but with the + chip still in 32-bit mode and using 32-bit calling + conventions. This is the default for systems where the true + 64-bit ABI is unavailable. No special compiler options are + typically needed for applications. This ABI is not available + under AIX. + + 'ABI=32' + This is the basic 32-bit PowerPC ABI, with a 32-bit limb. No + special compiler options are needed for applications. + + GMP's speed is greatest for the 'mode64' ABI, the 'mode32' ABI is + 2nd best. In 'ABI=32' only the 32-bit ISA is used and this doesn't + make full use of a 64-bit chip. + + +Sparc V9 ('sparc64', 'sparcv9', 'ultrasparc*') + 'ABI=64' + The 64-bit V9 ABI is available on the various BSD sparc64 + ports, recent versions of Sparc64 GNU/Linux, and Solaris 2.7 + and up (when the kernel is in 64-bit mode). GCC 3.2 or + higher, or Sun 'cc' is required. On GNU/Linux, depending on + the default 'gcc' mode, applications must be compiled with + + gcc -m64 + + On Solaris applications must be compiled with + + gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9 + cc -xarch=v9 + + On the BSD sparc64 systems no special options are required, + since 64-bits is the only ABI available. + + 'ABI=32' + For the basic 32-bit ABI, GMP still uses as much of the V9 ISA + as it can. In the Sun documentation this combination is known + as "v8plus". On GNU/Linux, depending on the default 'gcc' + mode, applications may need to be compiled with + + gcc -m32 + + On Solaris, no special compiler options are required for + applications, though using something like the following is + recommended. ('gcc' 2.8 and earlier only support '-mv8' + though.) + + gcc -mv8plus + cc -xarch=v8plus + + GMP speed is greatest in 'ABI=64', so it's the default where + available. The speed is partly because there are extra registers + available and partly because 64-bits is considered the more + important case and has therefore had better code written for it. + + Don't be confused by the names of the '-m' and '-x' compiler + options, they're called 'arch' but effectively control both ABI and + ISA. + + On Solaris 2.6 and earlier, only 'ABI=32' is available since the + kernel doesn't save all registers. + + On Solaris 2.7 with the kernel in 32-bit mode, a normal native + build will reject 'ABI=64' because the resulting executables won't + run. 'ABI=64' can still be built if desired by making it look like + a cross-compile, for example + + ./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64 + + +File: gmp.info, Node: Notes for Package Builds, Next: Notes for Particular Systems, Prev: ABI and ISA, Up: Installing GMP + +2.3 Notes for Package Builds +============================ + +GMP should present no great difficulties for packaging in a binary +distribution. + + Libtool is used to build the library and '-version-info' is set +appropriately, having started from '3:0:0' in GMP 3.0 (*note Library +interface versions: (libtool)Versioning.). + + The GMP 4 series will be upwardly binary compatible in each release +and will be upwardly binary compatible with all of the GMP 3 series. +Additional function interfaces may be added in each release, so on +systems where libtool versioning is not fully checked by the loader an +auxiliary mechanism may be needed to express that a dynamic linked +application depends on a new enough GMP. + + An auxiliary mechanism may also be needed to express that +'libgmpxx.la' (from '--enable-cxx', *note Build Options::) requires +'libgmp.la' from the same GMP version, since this is not done by the +libtool versioning, nor otherwise. A mismatch will result in unresolved +symbols from the linker, or perhaps the loader. + + When building a package for a CPU family, care should be taken to use +'--host' (or '--build') to choose the least common denominator among the +CPUs which might use the package. For example this might mean plain +'sparc' (meaning V7) for SPARCs. + + For x86s, '--enable-fat' sets things up for a fat binary build, +making a runtime selection of optimized low level routines. This is a +good choice for packaging to run on a range of x86 chips. + + Users who care about speed will want GMP built for their exact CPU +type, to make best use of the available optimizations. Providing a way +to suitably rebuild a package may be useful. This could be as simple as +making it possible for a user to omit '--build' (and '--host') so +'./config.guess' will detect the CPU. But a way to manually specify a +'--build' will be wanted for systems where './config.guess' is inexact. + + On systems with multiple ABIs, a packaged build will need to decide +which among the choices is to be provided, see *note ABI and ISA::. A +given run of './configure' etc will only build one ABI. If a second ABI +is also required then a second run of './configure' etc must be made, +starting from a clean directory tree ('make distclean'). + + As noted under "ABI and ISA", currently no attempt is made to follow +system conventions for install locations that vary with ABI, such as +'/usr/lib/sparcv9' for 'ABI=64' as opposed to '/usr/lib' for 'ABI=32'. +A package build can override 'libdir' and other standard variables as +necessary. + + Note that 'gmp.h' is a generated file, and will be architecture and +ABI dependent. When attempting to install two ABIs simultaneously it +will be important that an application compile gets the correct 'gmp.h' +for its desired ABI. If compiler include paths don't vary with ABI +options then it might be necessary to create a '/usr/include/gmp.h' +which tests preprocessor symbols and chooses the correct actual 'gmp.h'. + + +File: gmp.info, Node: Notes for Particular Systems, Next: Known Build Problems, Prev: Notes for Package Builds, Up: Installing GMP + +2.4 Notes for Particular Systems +================================ + +AIX 3 and 4 + On systems '*-*-aix[34]*' shared libraries are disabled by default, + since some versions of the native 'ar' fail on the convenience + libraries used. A shared build can be attempted with + + ./configure --enable-shared --disable-static + + Note that the '--disable-static' is necessary because in a shared + build libtool makes 'libgmp.a' a symlink to 'libgmp.so', apparently + for the benefit of old versions of 'ld' which only recognise '.a', + but unfortunately this is done even if a fully functional 'ld' is + available. + +ARM + On systems 'arm*-*-*', versions of GCC up to and including 2.95.3 + have a bug in unsigned division, giving wrong results for some + operands. GMP './configure' will demand GCC 2.95.4 or later. + +Compaq C++ + Compaq C++ on OSF 5.1 has two flavours of 'iostream', a standard + one and an old pre-standard one (see 'man iostream_intro'). GMP + can only use the standard one, which unfortunately is not the + default but must be selected by defining '__USE_STD_IOSTREAM'. + Configure with for instance + + ./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM + +Floating Point Mode + On some systems, the hardware floating point has a control mode + which can set all operations to be done in a particular precision, + for instance single, double or extended on x86 systems (x87 + floating point). The GMP functions involving a 'double' cannot be + expected to operate to their full precision when the hardware is in + single precision mode. Of course this affects all code, including + application code, not just GMP. + +FreeBSD 7.x, 8.x, 9.0, 9.1, 9.2 + 'm4' in these releases of FreeBSD has an eval function which + ignores its 2nd and 3rd arguments, which makes it unsuitable for + '.asm' file processing. './configure' will detect the problem and + either abort or choose another m4 in the 'PATH'. The bug is fixed + in FreeBSD 9.3 and 10.0, so either upgrade or use GNU m4. Note + that the FreeBSD package system installs GNU m4 under the name + 'gm4', which GMP cannot guess. + +FreeBSD 7.x, 8.x, 9.x + GMP releases starting with 6.0 do not support 'ABI=32' on + FreeBSD/amd64 prior to release 10.0 of the system. The cause is a + broken 'limits.h', which GMP no longer works around. + +MS-DOS and MS Windows + On an MS-DOS system DJGPP can be used to build GMP, and on an MS + Windows system Cygwin, DJGPP and MINGW can be used. All three are + excellent ports of GCC and the various GNU tools. + + + + + + Microsoft also publishes an Interix "Services for Unix" which can + be used to build GMP on Windows (with a normal './configure'), but + it's not free software. + +MS Windows DLLs + On systems '*-*-cygwin*', '*-*-mingw*' and '*-*-pw32*' by default + GMP builds only a static library, but a DLL can be built instead + using + + ./configure --disable-static --enable-shared + + Static and DLL libraries can't both be built, since certain export + directives in 'gmp.h' must be different. + + A MINGW DLL build of GMP can be used with Microsoft C. Libtool + doesn't install a '.lib' format import library, but it can be + created with MS 'lib' as follows, and copied to the install + directory. Similarly for 'libmp' and 'libgmpxx'. + + cd .libs + lib /def:libgmp-3.dll.def /out:libgmp-3.lib + + MINGW uses the C runtime library 'msvcrt.dll' for I/O, so + applications wanting to use the GMP I/O routines must be compiled + with 'cl /MD' to do the same. If one of the other C runtime + library choices provided by MS C is desired then the suggestion is + to use the GMP string functions and confine I/O to the application. + +Motorola 68k CPU Types + 'm68k' is taken to mean 68000. 'm68020' or higher will give a + performance boost on applicable CPUs. 'm68360' can be used for + CPU32 series chips. 'm68302' can be used for "Dragonball" series + chips, though this is merely a synonym for 'm68000'. + +NetBSD 5.x + 'm4' in these releases of NetBSD has an eval function which ignores + its 2nd and 3rd arguments, which makes it unsuitable for '.asm' + file processing. './configure' will detect the problem and either + abort or choose another m4 in the 'PATH'. The bug is fixed in + NetBSD 6, so either upgrade or use GNU m4. Note that the NetBSD + package system installs GNU m4 under the name 'gm4', which GMP + cannot guess. + +OpenBSD 2.6 + 'm4' in this release of OpenBSD has a bug in 'eval' that makes it + unsuitable for '.asm' file processing. './configure' will detect + the problem and either abort or choose another m4 in the 'PATH'. + The bug is fixed in OpenBSD 2.7, so either upgrade or use GNU m4. + +Power CPU Types + In GMP, CPU types 'power*' and 'powerpc*' will each use + instructions not available on the other, so it's important to + choose the right one for the CPU that will be used. Currently GMP + has no assembly code support for using just the common instruction + subset. To get executables that run on both, the current + suggestion is to use the generic C code ('--disable-assembly'), + possibly with appropriate compiler options (like '-mcpu=common' for + 'gcc'). CPU 'rs6000' (which is not a CPU but a family of + workstations) is accepted by 'config.sub', but is currently + equivalent to '--disable-assembly'. + +Sparc CPU Types + 'sparcv8' or 'supersparc' on relevant systems will give a + significant performance increase over the V7 code selected by plain + 'sparc'. + +Sparc App Regs + The GMP assembly code for both 32-bit and 64-bit Sparc clobbers the + "application registers" 'g2', 'g3' and 'g4', the same way that the + GCC default '-mapp-regs' does (*note SPARC Options: (gcc)SPARC + Options.). + + This makes that code unsuitable for use with the special V9 + '-mcmodel=embmedany' (which uses 'g4' as a data segment pointer), + and for applications wanting to use those registers for special + purposes. In these cases the only suggestion currently is to build + GMP with '--disable-assembly' to avoid the assembly code. + +SunOS 4 + '/usr/bin/m4' lacks various features needed to process '.asm' + files, and instead './configure' will automatically use + '/usr/5bin/m4', which we believe is always available (if not then + use GNU m4). + +x86 CPU Types + 'i586', 'pentium' or 'pentiummmx' code is good for its intended P5 + Pentium chips, but quite slow when run on Intel P6 class chips + (PPro, P-II, P-III). 'i386' is a better choice when making + binaries that must run on both. + +x86 MMX and SSE2 Code + If the CPU selected has MMX code but the assembler doesn't support + it, a warning is given and non-MMX code is used instead. This will + be an inferior build, since the MMX code that's present is there + because it's faster than the corresponding plain integer code. The + same applies to SSE2. + + Old versions of 'gas' don't support MMX instructions, in particular + version 1.92.3 that comes with FreeBSD 2.2.8 or the more recent + OpenBSD 3.1 doesn't. + + Solaris 2.6 and 2.7 'as' generate incorrect object code for + register to register 'movq' instructions, and so can't be used for + MMX code. Install a recent 'gas' if MMX code is wanted on these + systems. + + +File: gmp.info, Node: Known Build Problems, Next: Performance optimization, Prev: Notes for Particular Systems, Up: Installing GMP + +2.5 Known Build Problems +======================== + +You might find more up-to-date information at . + +Compiler link options + The version of libtool currently in use rather aggressively strips + compiler options when linking a shared library. This will + hopefully be relaxed in the future, but for now if this is a + problem the suggestion is to create a little script to hide them, + and for instance configure with + + ./configure CC=gcc-with-my-options + +DJGPP ('*-*-msdosdjgpp*') + The DJGPP port of 'bash' 2.03 is unable to run the 'configure' + script, it exits silently, having died writing a preamble to + 'config.log'. Use 'bash' 2.04 or higher. + + 'make all' was found to run out of memory during the final + 'libgmp.la' link on one system tested, despite having 64MiB + available. Running 'make libgmp.la' directly helped, perhaps + recursing into the various subdirectories uses up memory. + +GNU binutils 'strip' prior to 2.12 + 'strip' from GNU binutils 2.11 and earlier should not be used on + the static libraries 'libgmp.a' and 'libmp.a' since it will discard + all but the last of multiple archive members with the same name, + like the three versions of 'init.o' in 'libgmp.a'. Binutils 2.12 + or higher can be used successfully. + + The shared libraries 'libgmp.so' and 'libmp.so' are not affected by + this and any version of 'strip' can be used on them. + +'make' syntax error + On certain versions of SCO OpenServer 5 and IRIX 6.5 the native + 'make' is unable to handle the long dependencies list for + 'libgmp.la'. The symptom is a "syntax error" on the following line + of the top-level 'Makefile'. + + libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES) + + Either use GNU Make, or as a workaround remove + '$(libgmp_la_DEPENDENCIES)' from that line (which will make the + initial build work, but if any recompiling is done 'libgmp.la' + might not be rebuilt). + +MacOS X ('*-*-darwin*') + Libtool currently only knows how to create shared libraries on + MacOS X using the native 'cc' (which is a modified GCC), not a + plain GCC. A static-only build should work though + ('--disable-shared'). + +NeXT prior to 3.3 + The system compiler on old versions of NeXT was a massacred and old + GCC, even if it called itself 'cc'. This compiler cannot be used + to build GMP, you need to get a real GCC, and install that. (NeXT + may have fixed this in release 3.3 of their system.) + +POWER and PowerPC + Bugs in GCC 2.7.2 (and 2.6.3) mean it can't be used to compile GMP + on POWER or PowerPC. If you want to use GCC for these machines, + get GCC 2.7.2.1 (or later). + +Sequent Symmetry + Use the GNU assembler instead of the system assembler, since the + latter has serious bugs. + +Solaris 2.6 + The system 'sed' prints an error "Output line too long" when + libtool builds 'libgmp.la'. This doesn't seem to cause any obvious + ill effects, but GNU 'sed' is recommended, to avoid any doubt. + +Sparc Solaris 2.7 with gcc 2.95.2 in 'ABI=32' + A shared library build of GMP seems to fail in this combination, it + builds but then fails the tests, apparently due to some incorrect + data relocations within 'gmp_randinit_lc_2exp_size'. The exact + cause is unknown, '--disable-shared' is recommended. + + +File: gmp.info, Node: Performance optimization, Prev: Known Build Problems, Up: Installing GMP + +2.6 Performance optimization +============================ + +For optimal performance, build GMP for the exact CPU type of the target +computer, see *note Build Options::. + + Unlike what is the case for most other programs, the compiler +typically doesn't matter much, since GMP uses assembly language for the +most critical operation. + + In particular for long-running GMP applications, and applications +demanding extremely large numbers, building and running the 'tuneup' +program in the 'tune' subdirectory can be important. For example, + + cd tune + make tuneup + ./tuneup + + will generate better contents for the 'gmp-mparam.h' parameter file. + + To use the results, put the output in the file indicated in the +'Parameters for ...' header. Then recompile from scratch. + + The 'tuneup' program takes one useful parameter, '-f NNN', which +instructs the program how long to check FFT multiply parameters. If +you're going to use GMP for extremely large numbers, you may want to run +'tuneup' with a large NNN value. + + +File: gmp.info, Node: GMP Basics, Next: Reporting Bugs, Prev: Installing GMP, Up: Top + +3 GMP Basics +************ + +*Using functions, macros, data types, etc. not documented in this manual +is strongly discouraged. If you do so your application is guaranteed to +be incompatible with future versions of GMP.* + +* Menu: + +* Headers and Libraries:: +* Nomenclature and Types:: +* Function Classes:: +* Variable Conventions:: +* Parameter Conventions:: +* Memory Management:: +* Reentrancy:: +* Useful Macros and Constants:: +* Compatibility with older versions:: +* Demonstration Programs:: +* Efficiency:: +* Debugging:: +* Profiling:: +* Autoconf:: +* Emacs:: + + +File: gmp.info, Node: Headers and Libraries, Next: Nomenclature and Types, Prev: GMP Basics, Up: GMP Basics + +3.1 Headers and Libraries +========================= + +All declarations needed to use GMP are collected in the include file +'gmp.h', except for the *note C++ Class Interface:: which comes with its +own separate header 'gmpxx.h'. 'gmp.h' is designed to work with both C +and C++ compilers. + + #include + + Note however that prototypes for GMP functions with 'FILE *' +parameters are only provided if '' is included before. + + #include + #include + + Likewise '' is required for prototypes with 'va_list' +parameters, such as 'gmp_vprintf'. And '' for prototypes +with 'struct obstack' parameters, such as 'gmp_obstack_printf', when +available. + + All programs using GMP must link against the 'libgmp' library. On a +typical Unix-like system this can be done with '-lgmp', for example + + gcc myprogram.c -lgmp + + GMP C++ functions are in a separate 'libgmpxx' library, including the +*note C++ Class Interface:: but also *note C++ Formatted Output:: for +regular GMP types. This is built and installed if C++ support has been +enabled (*note Build Options::). For example, + + g++ mycxxprog.cc -lgmpxx -lgmp + + GMP is built using Libtool and an application can use that to link if +desired, *note GNU Libtool: (libtool)Top. + + If GMP has been installed to a non-standard location then it may be +necessary to use '-I' and '-L' compiler options to point to the right +directories, and some sort of run-time path for a shared library. + + +File: gmp.info, Node: Nomenclature and Types, Next: Function Classes, Prev: Headers and Libraries, Up: GMP Basics + +3.2 Nomenclature and Types +========================== + +In this manual, "integer" usually means a multiple precision integer, as +defined by the GMP library. The C data type for such integers is +'mpz_t'. Here are some examples of how to declare such integers: + + mpz_t sum; + + struct foo { mpz_t x, y; }; + + mpz_t vec[20]; + + "Rational number" means a multiple precision fraction. The C data +type for these fractions is 'mpq_t'. For example: + + mpq_t quotient; + + "Floating point number" or "Float" for short, is an arbitrary +precision mantissa with a limited precision exponent. The C data type +for such objects is 'mpf_t'. For example: + + mpf_t fp; + + The floating point functions accept and return exponents in the C +type 'mp_exp_t'. Currently this is usually a 'long', but on some +systems it's an 'int' for efficiency. + + A "limb" means the part of a multi-precision number that fits in a +single machine word. (We chose this word because a limb of the human +body is analogous to a digit, only larger, and containing several +digits.) Normally a limb is 32 or 64 bits. The C data type for a limb +is 'mp_limb_t'. + + Counts of limbs of a multi-precision number represented in the C type +'mp_size_t'. Currently this is normally a 'long', but on some systems +it's an 'int' for efficiency, and on some systems it will be 'long long' +in the future. + + Counts of bits of a multi-precision number are represented in the C +type 'mp_bitcnt_t'. Currently this is always an 'unsigned long', but on +some systems it will be an 'unsigned long long' in the future. + + "Random state" means an algorithm selection and current state data. +The C data type for such objects is 'gmp_randstate_t'. For example: + + gmp_randstate_t rstate; + + Also, in general 'mp_bitcnt_t' is used for bit counts and ranges, and +'size_t' is used for byte or character counts. + + + Internally, GMP data types such as 'mpz_t' are defined as one-element +arrays, whose element type is part of the GMP internals (*note +Internals::). + + When an array is used as a function argument in C, it is not passed +by value, instead its value is a pointer to the first element. In C +jargon, this is sometimes referred to as the array "decaying" to a +pointer. For GMP types like 'mpz_t', that means that the function +called gets a pointer to the caller's 'mpz_t' value, which is why no +explicit '&' operator is needed when passing output arguments (*note +Parameter Conventions::). + + GMP defines names for these pointer types, e.g., 'mpz_ptr' +corresponding to 'mpz_t', and 'mpz_srcptr' corresponding to 'const +mpz_t'. Most functions don't need to use these pointer types directly; +it works fine to declare a function using the 'mpz_t' or 'const mpz_t' +as the argument types, the same "pointer decay" happens in the +background regardless. + + Occasionally, it is useful to manipulate pointers directly, e.g., to +conditionally swap _references_ to a function's inputs without changing +the _values_ as seen by the caller, or returning a pointer to an 'mpz_t' +which is part of a larger structure. For these cases, the pointer types +are necessary. And a 'mpz_ptr' can be passed as argument to any GMP +function declared to take an 'mpz_t' argument. + + Their definition is equivalent to the following code, which is given +for illustratory purposes only: + + typedef foo_internal foo_t[1]; + typedef foo_internal * foo_ptr; + typedef const foo_internal * foo_srcptr; + + The following pointer types are defined by GMP: + * 'mpz_ptr' for pointers to the element type in 'mpz_t' + * 'mpz_srcptr' for 'const' pointers to the element type in 'mpz_t' + * 'mpq_ptr' for pointers to the element type in 'mpq_t' + * 'mpq_srcptr' for 'const' pointers to the element type in 'mpq_t' + * 'mpf_ptr' for pointers to the element type in 'mpf_t' + * 'mpf_srcptr' for 'const' pointers to the element type in 'mpf_t' + * 'gmp_randstate_ptr' for pointers to the element type in + 'gmp_randstate_t' + * 'gmp_randstate_srcptr' for 'const' pointers to the element type in + 'gmp_randstate_t' + + +File: gmp.info, Node: Function Classes, Next: Variable Conventions, Prev: Nomenclature and Types, Up: GMP Basics + +3.3 Function Classes +==================== + +There are six classes of functions in the GMP library: + + 1. Functions for signed integer arithmetic, with names beginning with + 'mpz_'. The associated type is 'mpz_t'. There are about 150 + functions in this class. (*note Integer Functions::) + + 2. Functions for rational number arithmetic, with names beginning with + 'mpq_'. The associated type is 'mpq_t'. There are about 35 + functions in this class, but the integer functions can be used for + arithmetic on the numerator and denominator separately. (*note + Rational Number Functions::) + + 3. Functions for floating-point arithmetic, with names beginning with + 'mpf_'. The associated type is 'mpf_t'. There are about 70 + functions in this class. (*note Floating-point Functions::) + + 4. Fast low-level functions that operate on natural numbers. These + are used by the functions in the preceding groups, and you can also + call them directly from very time-critical user programs. These + functions' names begin with 'mpn_'. The associated type is array + of 'mp_limb_t'. There are about 60 (hard-to-use) functions in this + class. (*note Low-level Functions::) + + 5. Miscellaneous functions. Functions for setting up custom + allocation and functions for generating random numbers. (*note + Custom Allocation::, and *note Random Number Functions::) + + +File: gmp.info, Node: Variable Conventions, Next: Parameter Conventions, Prev: Function Classes, Up: GMP Basics + +3.4 Variable Conventions +======================== + +GMP functions generally have output arguments before input arguments. +This notation is by analogy with the assignment operator. + + GMP lets you use the same variable for both input and output in one +call. For example, the main function for integer multiplication, +'mpz_mul', can be used to square 'x' and put the result back in 'x' with + + mpz_mul (x, x, x); + + Before you can assign to a GMP variable, you need to initialize it by +calling one of the special initialization functions. When you're done +with a variable, you need to clear it out, using one of the functions +for that purpose. Which function to use depends on the type of +variable. See the chapters on integer functions, rational number +functions, and floating-point functions for details. + + A variable should only be initialized once, or at least cleared +between each initialization. After a variable has been initialized, it +may be assigned to any number of times. + + For efficiency reasons, avoid excessive initializing and clearing. +In general, initialize near the start of a function and clear near the +end. For example, + + void + foo (void) + { + mpz_t n; + int i; + mpz_init (n); + for (i = 1; i < 100; i++) + { + mpz_mul (n, ...); + mpz_fdiv_q (n, ...); + ... + } + mpz_clear (n); + } + + GMP types like 'mpz_t' are implemented as one-element arrays of +certain structures. Declaring a variable creates an object with the +fields GMP needs, but variables are normally manipulated by using the +pointer to the object. The appropriate pointer types (*note +Nomenclature and Types::) may be used to explicitly manipulate the +pointer. For both behavior and efficiency reasons, it is discouraged to +make copies of the GMP object itself (either directly or via aggregate +objects containing such GMP objects). If copies are done, all of them +must be used read-only; using a copy as the output of some function will +invalidate all the other copies. Note that the actual fields in each +'mpz_t' etc are for internal use only and should not be accessed +directly by code that expects to be compatible with future GMP releases. + + +File: gmp.info, Node: Parameter Conventions, Next: Memory Management, Prev: Variable Conventions, Up: GMP Basics + +3.5 Parameter Conventions +========================= + +When a GMP variable is used as a function parameter, it's effectively a +call-by-reference, meaning that when the function stores a value there +it will change the original in the caller. Parameters which are +input-only can be designated 'const' to provoke a compiler error or +warning on attempting to modify them. + + When a function is going to return a GMP result, it should designate +a parameter that it sets, like the library functions do. More than one +value can be returned by having more than one output parameter, again +like the library functions. A 'return' of an 'mpz_t' etc doesn't return +the object, only a pointer, and this is almost certainly not what's +wanted. + + Here's an example accepting an 'mpz_t' parameter, doing a +calculation, and storing the result to the indicated parameter. + + void + foo (mpz_t result, const mpz_t param, unsigned long n) + { + unsigned long i; + mpz_mul_ui (result, param, n); + for (i = 1; i < n; i++) + mpz_add_ui (result, result, i*7); + } + + int + main (void) + { + mpz_t r, n; + mpz_init (r); + mpz_init_set_str (n, "123456", 0); + foo (r, n, 20L); + gmp_printf ("%Zd\n", r); + return 0; + } + + Our function 'foo' works even if its caller passes the same variable +for 'param' and 'result', just like the library functions. But +sometimes it's tricky to make that work, and an application might not +want to bother supporting that sort of thing. + + Since GMP types are implemented as one-element arrays, using a GMP +variable as a parameter passes a pointer to the object. Hence the +call-by-reference. A more explicit (and equivalent) prototype for our +function 'foo' could be: + + void foo (mpz_ptr result, mpz_srcptr param, unsigned long n); + + +File: gmp.info, Node: Memory Management, Next: Reentrancy, Prev: Parameter Conventions, Up: GMP Basics + +3.6 Memory Management +===================== + +The GMP types like 'mpz_t' are small, containing only a couple of sizes, +and pointers to allocated data. Once a variable is initialized, GMP +takes care of all space allocation. Additional space is allocated +whenever a variable doesn't have enough. + + 'mpz_t' and 'mpq_t' variables never reduce their allocated space. +Normally this is the best policy, since it avoids frequent reallocation. +Applications that need to return memory to the heap at some particular +point can use 'mpz_realloc2', or clear variables no longer needed. + + 'mpf_t' variables, in the current implementation, use a fixed amount +of space, determined by the chosen precision and allocated at +initialization, so their size doesn't change. + + All memory is allocated using 'malloc' and friends by default, but +this can be changed, see *note Custom Allocation::. Temporary memory on +the stack is also used (via 'alloca'), but this can be changed at +build-time if desired, see *note Build Options::. + + +File: gmp.info, Node: Reentrancy, Next: Useful Macros and Constants, Prev: Memory Management, Up: GMP Basics + +3.7 Reentrancy +============== + +GMP is reentrant and thread-safe, with some exceptions: + + * If configured with '--enable-alloca=malloc-notreentrant' (or with + '--enable-alloca=notreentrant' when 'alloca' is not available), + then naturally GMP is not reentrant. + + * 'mpf_set_default_prec' and 'mpf_init' use a global variable for the + selected precision. 'mpf_init2' can be used instead, and in the + C++ interface an explicit precision to the 'mpf_class' constructor. + + * 'mpz_random' and the other old random number functions use a global + random state and are hence not reentrant. The newer random number + functions that accept a 'gmp_randstate_t' parameter can be used + instead. + + * 'gmp_randinit' (obsolete) returns an error indication through a + global variable, which is not thread safe. Applications are + advised to use 'gmp_randinit_default' or 'gmp_randinit_lc_2exp' + instead. + + * 'mp_set_memory_functions' uses global variables to store the + selected memory allocation functions. + + * If the memory allocation functions set by a call to + 'mp_set_memory_functions' (or 'malloc' and friends by default) are + not reentrant, then GMP will not be reentrant either. + + * If the standard I/O functions such as 'fwrite' are not reentrant + then the GMP I/O functions using them will not be reentrant either. + + * It's safe for two threads to read from the same GMP variable + simultaneously, but it's not safe for one to read while another + might be writing, nor for two threads to write simultaneously. + It's not safe for two threads to generate a random number from the + same 'gmp_randstate_t' simultaneously, since this involves an + update of that variable. + + +File: gmp.info, Node: Useful Macros and Constants, Next: Compatibility with older versions, Prev: Reentrancy, Up: GMP Basics + +3.8 Useful Macros and Constants +=============================== + + -- Global Constant: const int mp_bits_per_limb + The number of bits per limb. + + -- Macro: __GNU_MP_VERSION + -- Macro: __GNU_MP_VERSION_MINOR + -- Macro: __GNU_MP_VERSION_PATCHLEVEL + The major and minor GMP version, and patch level, respectively, as + integers. For GMP i.j, these numbers will be i, j, and 0, + respectively. For GMP i.j.k, these numbers will be i, j, and k, + respectively. + + -- Global Constant: const char * const gmp_version + The GMP version number, as a null-terminated string, in the form + "i.j.k". This release is "6.3.0". Note that the format "i.j" was + used, before version 4.3.0, when k was zero. + + -- Macro: __GMP_CC + -- Macro: __GMP_CFLAGS + The compiler and compiler flags, respectively, used when compiling + GMP, as strings. + + +File: gmp.info, Node: Compatibility with older versions, Next: Demonstration Programs, Prev: Useful Macros and Constants, Up: GMP Basics + +3.9 Compatibility with older versions +===================================== + +This version of GMP is upwardly binary compatible with all 5.x, 4.x, and +3.x versions, and upwardly compatible at the source level with all 2.x +versions, with the following exceptions. + + * 'mpn_gcd' had its source arguments swapped as of GMP 3.0, for + consistency with other 'mpn' functions. + + * 'mpf_get_prec' counted precision slightly differently in GMP 3.0 + and 3.0.1, but in 3.1 reverted to the 2.x style. + + * 'mpn_bdivmod', documented as preliminary in GMP 4, has been + removed. + + There are a number of compatibility issues between GMP 1 and GMP 2 +that of course also apply when porting applications from GMP 1 to GMP 5. +Please see the GMP 2 manual for details. + + +File: gmp.info, Node: Demonstration Programs, Next: Efficiency, Prev: Compatibility with older versions, Up: GMP Basics + +3.10 Demonstration programs +=========================== + +The 'demos' subdirectory has some sample programs using GMP. These +aren't built or installed, but there's a 'Makefile' with rules for them. +For instance, + + make pexpr + ./pexpr 68^975+10 + +The following programs are provided + + * 'pexpr' is an expression evaluator, the program used on the GMP web + page. + * The 'calc' subdirectory has a similar but simpler evaluator using + 'lex' and 'yacc'. + * The 'expr' subdirectory is yet another expression evaluator, a + library designed for ease of use within a C program. See + 'demos/expr/README' for more information. + * 'factorize' is a Pollard-Rho factorization program. + * 'isprime' is a command-line interface to the 'mpz_probab_prime_p' + function. + * 'primes' counts or lists primes in an interval, using a sieve. + * 'qcn' is an example use of 'mpz_kronecker_ui' to estimate quadratic + class numbers. + * The 'perl' subdirectory is a comprehensive perl interface to GMP. + See 'demos/perl/INSTALL' for more information. Documentation is in + POD format in 'demos/perl/GMP.pm'. + + As an aside, consideration has been given at various times to some +sort of expression evaluation within the main GMP library. Going beyond +something minimal quickly leads to matters like user-defined functions, +looping, fixnums for control variables, etc, which are considered +outside the scope of GMP (much closer to language interpreters or +compilers, *Note Language Bindings::). Something simple for program +input convenience may yet be a possibility, a combination of the 'expr' +demo and the 'pexpr' tree back-end perhaps. But for now the above +evaluators are offered as illustrations. + + +File: gmp.info, Node: Efficiency, Next: Debugging, Prev: Demonstration Programs, Up: GMP Basics + +3.11 Efficiency +=============== + +Small Operands + On small operands, the time for function call overheads and memory + allocation can be significant in comparison to actual calculation. + This is unavoidable in a general purpose variable precision + library, although GMP attempts to be as efficient as it can on both + large and small operands. + +Static Linking + On some CPUs, in particular the x86s, the static 'libgmp.a' should + be used for maximum speed, since the PIC code in the shared + 'libgmp.so' will have a small overhead on each function call and + global data address. For many programs this will be insignificant, + but for long calculations there's a gain to be had. + +Initializing and Clearing + Avoid excessive initializing and clearing of variables, since this + can be quite time consuming, especially in comparison to otherwise + fast operations like addition. + + A language interpreter might want to keep a free list or stack of + initialized variables ready for use. It should be possible to + integrate something like that with a garbage collector too. + +Reallocations + An 'mpz_t' or 'mpq_t' variable used to hold successively increasing + values will have its memory repeatedly 'realloc'ed, which could be + quite slow or could fragment memory, depending on the C library. + If an application can estimate the final size then 'mpz_init2' or + 'mpz_realloc2' can be called to allocate the necessary space from + the beginning (*note Initializing Integers::). + + It doesn't matter if a size set with 'mpz_init2' or 'mpz_realloc2' + is too small, since all functions will do a further reallocation if + necessary. Badly overestimating memory required will waste space + though. + +'2exp' Functions + It's up to an application to call functions like 'mpz_mul_2exp' + when appropriate. General purpose functions like 'mpz_mul' make no + attempt to identify powers of two or other special forms, because + such inputs will usually be very rare and testing every time would + be wasteful. + +'ui' and 'si' Functions + The 'ui' functions and the small number of 'si' functions exist for + convenience and should be used where applicable. But if for + example an 'mpz_t' contains a value that fits in an 'unsigned long' + there's no need to extract it and call a 'ui' function, just use + the regular 'mpz' function. + +In-Place Operations + 'mpz_abs', 'mpq_abs', 'mpf_abs', 'mpz_neg', 'mpq_neg' and 'mpf_neg' + are fast when used for in-place operations like 'mpz_abs(x,x)', + since in the current implementation only a single field of 'x' + needs changing. On suitable compilers (GCC for instance) this is + inlined too. + + 'mpz_add_ui', 'mpz_sub_ui', 'mpf_add_ui' and 'mpf_sub_ui' benefit + from an in-place operation like 'mpz_add_ui(x,x,y)', since usually + only one or two limbs of 'x' will need to be changed. The same + applies to the full precision 'mpz_add' etc if 'y' is small. If + 'y' is big then cache locality may be helped, but that's all. + + 'mpz_mul' is currently the opposite, a separate destination is + slightly better. A call like 'mpz_mul(x,x,y)' will, unless 'y' is + only one limb, make a temporary copy of 'x' before forming the + result. Normally that copying will only be a tiny fraction of the + time for the multiply, so this is not a particularly important + consideration. + + 'mpz_set', 'mpq_set', 'mpq_set_num', 'mpf_set', etc, make no + attempt to recognise a copy of something to itself, so a call like + 'mpz_set(x,x)' will be wasteful. Naturally that would never be + written deliberately, but if it might arise from two pointers to + the same object then a test to avoid it might be desirable. + + if (x != y) + mpz_set (x, y); + + Note that it's never worth introducing extra 'mpz_set' calls just + to get in-place operations. If a result should go to a particular + variable then just direct it there and let GMP take care of data + movement. + +Divisibility Testing (Small Integers) + 'mpz_divisible_ui_p' and 'mpz_congruent_ui_p' are the best + functions for testing whether an 'mpz_t' is divisible by an + individual small integer. They use an algorithm which is faster + than 'mpz_tdiv_ui', but which gives no useful information about the + actual remainder, only whether it's zero (or a particular value). + + However when testing divisibility by several small integers, it's + best to take a remainder modulo their product, to save + multi-precision operations. For instance to test whether a number + is divisible by 23, 29 or 31 take a remainder modulo 23*29*31 = + 20677 and then test that. + + The division functions like 'mpz_tdiv_q_ui' which give a quotient + as well as a remainder are generally a little slower than the + remainder-only functions like 'mpz_tdiv_ui'. If the quotient is + only rarely wanted then it's probably best to just take a remainder + and then go back and calculate the quotient if and when it's wanted + ('mpz_divexact_ui' can be used if the remainder is zero). + +Rational Arithmetic + The 'mpq' functions operate on 'mpq_t' values with no common + factors in the numerator and denominator. Common factors are + checked-for and cast out as necessary. In general, cancelling + factors every time is the best approach since it minimizes the + sizes for subsequent operations. + + However, applications that know something about the factorization + of the values they're working with might be able to avoid some of + the GCDs used for canonicalization, or swap them for divisions. + For example when multiplying by a prime it's enough to check for + factors of it in the denominator instead of doing a full GCD. Or + when forming a big product it might be known that very little + cancellation will be possible, and so canonicalization can be left + to the end. + + The 'mpq_numref' and 'mpq_denref' macros give access to the + numerator and denominator to do things outside the scope of the + supplied 'mpq' functions. *Note Applying Integer Functions::. + + The canonical form for rationals allows mixed-type 'mpq_t' and + integer additions or subtractions to be done directly with + multiples of the denominator. This will be somewhat faster than + 'mpq_add'. For example, + + /* mpq increment */ + mpz_add (mpq_numref(q), mpq_numref(q), mpq_denref(q)); + + /* mpq += unsigned long */ + mpz_addmul_ui (mpq_numref(q), mpq_denref(q), 123UL); + + /* mpq -= mpz */ + mpz_submul (mpq_numref(q), mpq_denref(q), z); + +Number Sequences + Functions like 'mpz_fac_ui', 'mpz_fib_ui' and 'mpz_bin_uiui' are + designed for calculating isolated values. If a range of values is + wanted it's probably best to get a starting point and iterate from + there. + +Text Input/Output + Hexadecimal or octal are suggested for input or output in text + form. Power-of-2 bases like these can be converted much more + efficiently than other bases, like decimal. For big numbers + there's usually nothing of particular interest to be seen in the + digits, so the base doesn't matter much. + + Maybe we can hope octal will one day become the normal base for + everyday use, as proposed by King Charles XII of Sweden and later + reformers. + + +File: gmp.info, Node: Debugging, Next: Profiling, Prev: Efficiency, Up: GMP Basics + +3.12 Debugging +============== + +Stack Overflow + Depending on the system, a segmentation violation or bus error + might be the only indication of stack overflow. See + '--enable-alloca' choices in *note Build Options::, for how to + address this. + + In new enough versions of GCC, '-fstack-check' may be able to + ensure an overflow is recognised by the system before too much + damage is done, or '-fstack-limit-symbol' or + '-fstack-limit-register' may be able to add checking if the system + itself doesn't do any (*note Options for Code Generation: (gcc)Code + Gen Options.). These options must be added to the 'CFLAGS' used in + the GMP build (*note Build Options::), adding them just to an + application will have no effect. Note also they're a slowdown, + adding overhead to each function call and each stack allocation. + +Heap Problems + The most likely cause of application problems with GMP is heap + corruption. Failing to 'init' GMP variables will have + unpredictable effects, and corruption arising elsewhere in a + program may well affect GMP. Initializing GMP variables more than + once or failing to clear them will cause memory leaks. + + In all such cases a 'malloc' debugger is recommended. On a GNU or + BSD system the standard C library 'malloc' has some diagnostic + facilities, see *note Allocation Debugging: (libc)Allocation + Debugging, or 'man 3 malloc'. Other possibilities, in no + particular order, include + + + + + + The GMP default allocation routines in 'memory.c' also have a + simple sentinel scheme which can be enabled with '#define DEBUG' in + that file. This is mainly designed for detecting buffer overruns + during GMP development, but might find other uses. + +Stack Backtraces + On some systems the compiler options GMP uses by default can + interfere with debugging. In particular on x86 and 68k systems + '-fomit-frame-pointer' is used and this generally inhibits stack + backtracing. Recompiling without such options may help while + debugging, though the usual caveats about it potentially moving a + memory problem or hiding a compiler bug will apply. + +GDB, the GNU Debugger + A sample '.gdbinit' is included in the distribution, showing how to + call some undocumented dump functions to print GMP variables from + within GDB. Note that these functions shouldn't be used in final + application code since they're undocumented and may be subject to + incompatible changes in future versions of GMP. + +Source File Paths + GMP has multiple source files with the same name, in different + directories. For example 'mpz', 'mpq' and 'mpf' each have an + 'init.c'. If the debugger can't already determine the right one it + may help to build with absolute paths on each C file. One way to + do that is to use a separate object directory with an absolute path + to the source directory. + + cd /my/build/dir + /my/source/dir/gmp-6.3.0/configure + + This works via 'VPATH', and might require GNU 'make'. Alternately + it might be possible to change the '.c.lo' rules appropriately. + +Assertion Checking + The build option '--enable-assert' is available to add some + consistency checks to the library (see *note Build Options::). + These are likely to be of limited value to most applications. + Assertion failures are just as likely to indicate memory corruption + as a library or compiler bug. + + Applications using the low-level 'mpn' functions, however, will + benefit from '--enable-assert' since it adds checks on the + parameters of most such functions, many of which have subtle + restrictions on their usage. Note however that only the generic C + code has checks, not the assembly code, so '--disable-assembly' + should be used for maximum checking. + +Temporary Memory Checking + The build option '--enable-alloca=debug' arranges that each block + of temporary memory in GMP is allocated with a separate call to + 'malloc' (or the allocation function set with + 'mp_set_memory_functions'). + + This can help a malloc debugger detect accesses outside the + intended bounds, or detect memory not released. In a normal build, + on the other hand, temporary memory is allocated in blocks which + GMP divides up for its own use, or may be allocated with a compiler + builtin 'alloca' which will go nowhere near any malloc debugger + hooks. + +Maximum Debuggability + To summarize the above, a GMP build for maximum debuggability would + be + + ./configure --disable-shared --enable-assert \ + --enable-alloca=debug --disable-assembly CFLAGS=-g + + For C++, add '--enable-cxx CXXFLAGS=-g'. + +Checker + The GCC checker () + can be used with GMP. It contains a stub library which means GMP + applications compiled with checker can use a normal GMP build. + + A build of GMP with checking within GMP itself can be made. This + will run very very slowly. On GNU/Linux for example, + + ./configure --disable-assembly CC=checkergcc + + '--disable-assembly' must be used, since the GMP assembly code + doesn't support the checking scheme. The GMP C++ features cannot + be used, since current versions of checker (0.9.9.1) don't yet + support the standard C++ library. + +Valgrind + Valgrind () is a memory checker for x86, ARM, + MIPS, PowerPC, and S/390. It translates and emulates machine + instructions to do strong checks for uninitialized data (at the + level of individual bits), memory accesses through bad pointers, + and memory leaks. + + Valgrind does not always support every possible instruction, in + particular ones recently added to an ISA. Valgrind might therefore + be incompatible with a recent GMP or even a less recent GMP which + is compiled using a recent GCC. + + GMP's assembly code sometimes promotes a read of the limbs to some + larger size, for efficiency. GMP will do this even at the start + and end of a multilimb operand, using naturally aligned operations + on the larger type. This may lead to benign reads outside of + allocated areas, triggering complaints from Valgrind. Valgrind's + option '--partial-loads-ok=yes' should help. + +Other Problems + Any suspected bug in GMP itself should be isolated to make sure + it's not an application problem, see *note Reporting Bugs::. + + +File: gmp.info, Node: Profiling, Next: Autoconf, Prev: Debugging, Up: GMP Basics + +3.13 Profiling +============== + +Running a program under a profiler is a good way to find where it's +spending most time and where improvements can be best sought. The +profiling choices for a GMP build are as follows. + +'--disable-profiling' + The default is to add nothing special for profiling. + + It should be possible to just compile the mainline of a program + with '-p' and use 'prof' to get a profile consisting of timer-based + sampling of the program counter. Most of the GMP assembly code has + the necessary symbol information. + + This approach has the advantage of minimizing interference with + normal program operation, but on most systems the resolution of the + sampling is quite low (10 milliseconds for instance), requiring + long runs to get accurate information. + +'--enable-profiling=prof' + Build with support for the system 'prof', which means '-p' added to + the 'CFLAGS'. + + This provides call counting in addition to program counter + sampling, which allows the most frequently called routines to be + identified, and an average time spent in each routine to be + determined. + + The x86 assembly code has support for this option, but on other + processors the assembly routines will be as if compiled without + '-p' and therefore won't appear in the call counts. + + On some systems, such as GNU/Linux, '-p' in fact means '-pg' and in + this case '--enable-profiling=gprof' described below should be used + instead. + +'--enable-profiling=gprof' + Build with support for 'gprof', which means '-pg' added to the + 'CFLAGS'. + + This provides call graph construction in addition to call counting + and program counter sampling, which makes it possible to count + calls coming from different locations. For example the number of + calls to 'mpn_mul' from 'mpz_mul' versus the number from 'mpf_mul'. + The program counter sampling is still flat though, so only a total + time in 'mpn_mul' would be accumulated, not a separate amount for + each call site. + + The x86 assembly code has support for this option, but on other + processors the assembly routines will be as if compiled without + '-pg' and therefore not be included in the call counts. + + On x86 and m68k systems '-pg' and '-fomit-frame-pointer' are + incompatible, so the latter is omitted from the default flags in + that case, which might result in poorer code generation. + + Incidentally, it should be possible to use the 'gprof' program with + a plain '--enable-profiling=prof' build. But in that case only the + 'gprof -p' flat profile and call counts can be expected to be + valid, not the 'gprof -q' call graph. + +'--enable-profiling=instrument' + Build with the GCC option '-finstrument-functions' added to the + 'CFLAGS' (*note Options for Code Generation: (gcc)Code Gen + Options.). + + This inserts special instrumenting calls at the start and end of + each function, allowing exact timing and full call graph + construction. + + This instrumenting is not normally a standard system feature and + will require support from an external library, such as + + + + This should be included in 'LIBS' during the GMP configure so that + test programs will link. For example, + + ./configure --enable-profiling=instrument LIBS=-lfc + + On a GNU system the C library provides dummy instrumenting + functions, so programs compiled with this option will link. In + this case it's only necessary to ensure the correct library is + added when linking an application. + + The x86 assembly code supports this option, but on other processors + the assembly routines will be as if compiled without + '-finstrument-functions' meaning time spent in them will + effectively be attributed to their caller. + + +File: gmp.info, Node: Autoconf, Next: Emacs, Prev: Profiling, Up: GMP Basics + +3.14 Autoconf +============= + +Autoconf based applications can easily check whether GMP is installed. +The only thing to be noted is that GMP library symbols from version 3 +onwards have prefixes like '__gmpz'. The following therefore would be a +simple test, + + AC_CHECK_LIB(gmp, __gmpz_init) + + This just uses the default 'AC_CHECK_LIB' actions for found or not +found, but an application that must have GMP would want to generate an +error if not found. For example, + + AC_CHECK_LIB(gmp, __gmpz_init, , + [AC_MSG_ERROR([GNU MP not found, see https://gmplib.org/])]) + + If functions added in some particular version of GMP are required, +then one of those can be used when checking. For example 'mpz_mul_si' +was added in GMP 3.1, + + AC_CHECK_LIB(gmp, __gmpz_mul_si, , + [AC_MSG_ERROR( + [GNU MP not found, or not 3.1 or up, see https://gmplib.org/])]) + + An alternative would be to test the version number in 'gmp.h' using +say 'AC_EGREP_CPP'. That would make it possible to test the exact +version, if some particular sub-minor release is known to be necessary. + + In general it's recommended that applications should simply demand a +new enough GMP rather than trying to provide supplements for features +not available in past versions. + + Occasionally an application will need or want to know the size of a +type at configuration or preprocessing time, not just with 'sizeof' in +the code. This can be done in the normal way with 'mp_limb_t' etc, but +GMP 4.0 or up is best for this, since prior versions needed certain '-D' +defines on systems using a 'long long' limb. The following would suit +Autoconf 2.50 or up, + + AC_CHECK_SIZEOF(mp_limb_t, , [#include ]) + + +File: gmp.info, Node: Emacs, Prev: Autoconf, Up: GMP Basics + +3.15 Emacs +========== + + ('info-lookup-symbol') is a good way to find documentation on +C functions while editing (*note Info Documentation Lookup: (emacs)Info +Lookup.). + + The GMP manual can be included in such lookups by putting the +following in your '.emacs', + + (eval-after-load "info-look" + '(let ((mode-value (assoc 'c-mode (assoc 'symbol info-lookup-alist)))) + (setcar (nthcdr 3 mode-value) + (cons '("(gmp)Function Index" nil "^ -.* " "\\>") + (nth 3 mode-value))))) + + +File: gmp.info, Node: Reporting Bugs, Next: Integer Functions, Prev: GMP Basics, Up: Top + +4 Reporting Bugs +**************** + +If you think you have found a bug in the GMP library, please investigate +it and report it. We have made this library available to you, and it is +not too much to ask you to report the bugs you find. + + Before you report a bug, check it's not already addressed in *note +Known Build Problems::, or perhaps *note Notes for Particular Systems::. +You may also want to check for patches for this +release, or try a recent snapshot from +. + + Please include the following in any report: + + * The GMP version number, and if pre-packaged or patched then say so. + + * A test program that makes it possible for us to reproduce the bug. + Include instructions on how to run the program. + + * A description of what is wrong. If the results are incorrect, in + what way. If you get a crash, say so. + + * If you get a crash, include a stack backtrace from the debugger if + it's informative ('where' in 'gdb', or '$C' in 'adb'). + + * Please do not send core dumps, executables or 'strace's. + + * The 'configure' options you used when building GMP, if any. + + * The output from 'configure', as printed to stdout, with any options + used. + + * The name of the compiler and its version. For 'gcc', get the + version with 'gcc -v', otherwise perhaps 'what `which cc`', or + similar. + + * The output from running 'uname -a'. + + * The output from running './config.guess', and from running + './configfsf.guess' (might be the same). + + * If the bug is related to 'configure', then the compressed contents + of 'config.log'. + + * If the bug is related to an 'asm' file not assembling, then the + contents of 'config.m4' and the offending line or lines from the + temporary 'mpn/tmp-.s'. + + Please make an effort to produce a self-contained report, with +something definite that can be tested or debugged. Vague queries or +piecemeal messages are difficult to act on and don't help the +development effort. + + It is not uncommon that an observed problem is actually due to a bug +in the compiler; the GMP code tends to explore interesting corners in +compilers. + + If your bug report is good, we will do our best to help you get a +corrected version of the library; if the bug report is poor, we won't do +anything about it (except maybe ask you to send a better report). + + Send your report to: . + + If you think something in this manual is unclear, or downright +incorrect, or if the language needs to be improved, please send a note +to the same address. + + +File: gmp.info, Node: Integer Functions, Next: Rational Number Functions, Prev: Reporting Bugs, Up: Top + +5 Integer Functions +******************* + +This chapter describes the GMP functions for performing integer +arithmetic. These functions start with the prefix 'mpz_'. + + GMP integers are stored in objects of type 'mpz_t'. + +* Menu: + +* Initializing Integers:: +* Assigning Integers:: +* Simultaneous Integer Init & Assign:: +* Converting Integers:: +* Integer Arithmetic:: +* Integer Division:: +* Integer Exponentiation:: +* Integer Roots:: +* Number Theoretic Functions:: +* Integer Comparisons:: +* Integer Logic and Bit Fiddling:: +* I/O of Integers:: +* Integer Random Numbers:: +* Integer Import and Export:: +* Miscellaneous Integer Functions:: +* Integer Special Functions:: + + +File: gmp.info, Node: Initializing Integers, Next: Assigning Integers, Prev: Integer Functions, Up: Integer Functions + +5.1 Initialization Functions +============================ + +The functions for integer arithmetic assume that all integer objects are +initialized. You do that by calling the function 'mpz_init'. For +example, + + { + mpz_t integ; + mpz_init (integ); + ... + mpz_add (integ, ...); + ... + mpz_sub (integ, ...); + + /* Unless the program is about to exit, do ... */ + mpz_clear (integ); + } + + As you can see, you can store new values any number of times, once an +object is initialized. + + -- Function: void mpz_init (mpz_t X) + Initialize X, and set its value to 0. + + -- Function: void mpz_inits (mpz_t X, ...) + Initialize a NULL-terminated list of 'mpz_t' variables, and set + their values to 0. + + -- Function: void mpz_init2 (mpz_t X, mp_bitcnt_t N) + Initialize X, with space for N-bit numbers, and set its value to 0. + Calling this function instead of 'mpz_init' or 'mpz_inits' is never + necessary; reallocation is handled automatically by GMP when + needed. + + While N defines the initial space, X will grow automatically in the + normal way, if necessary, for subsequent values stored. + 'mpz_init2' makes it possible to avoid such reallocations if a + maximum size is known in advance. + + In preparation for an operation, GMP often allocates one limb more + than ultimately needed. To make sure GMP will not perform + reallocation for X, you need to add the number of bits in + 'mp_limb_t' to N. + + -- Function: void mpz_clear (mpz_t X) + Free the space occupied by X. Call this function for all 'mpz_t' + variables when you are done with them. + + -- Function: void mpz_clears (mpz_t X, ...) + Free the space occupied by a NULL-terminated list of 'mpz_t' + variables. + + -- Function: void mpz_realloc2 (mpz_t X, mp_bitcnt_t N) + Change the space allocated for X to N bits. The value in X is + preserved if it fits, or is set to 0 if not. + + Calling this function is never necessary; reallocation is handled + automatically by GMP when needed. But this function can be used to + increase the space for a variable in order to avoid repeated + automatic reallocations, or to decrease it to give memory back to + the heap. + + +File: gmp.info, Node: Assigning Integers, Next: Simultaneous Integer Init & Assign, Prev: Initializing Integers, Up: Integer Functions + +5.2 Assignment Functions +======================== + +These functions assign new values to already initialized integers (*note +Initializing Integers::). + + -- Function: void mpz_set (mpz_t ROP, const mpz_t OP) + -- Function: void mpz_set_ui (mpz_t ROP, unsigned long int OP) + -- Function: void mpz_set_si (mpz_t ROP, signed long int OP) + -- Function: void mpz_set_d (mpz_t ROP, double OP) + -- Function: void mpz_set_q (mpz_t ROP, const mpq_t OP) + -- Function: void mpz_set_f (mpz_t ROP, const mpf_t OP) + Set the value of ROP from OP. + + 'mpz_set_d', 'mpz_set_q' and 'mpz_set_f' truncate OP to make it an + integer. + + -- Function: int mpz_set_str (mpz_t ROP, const char *STR, int BASE) + Set the value of ROP from STR, a null-terminated C string in base + BASE. White space is allowed in the string, and is simply ignored. + + The BASE may vary from 2 to 62, or if BASE is 0, then the leading + characters are used: '0x' and '0X' for hexadecimal, '0b' and '0B' + for binary, '0' for octal, or decimal otherwise. + + For bases up to 36, case is ignored; upper-case and lower-case + letters have the same value. For bases 37 to 62, upper-case + letters represent the usual 10..35 while lower-case letters + represent 36..61. + + This function returns 0 if the entire string is a valid number in + base BASE. Otherwise it returns -1. + + -- Function: void mpz_swap (mpz_t ROP1, mpz_t ROP2) + Swap the values ROP1 and ROP2 efficiently. + + +File: gmp.info, Node: Simultaneous Integer Init & Assign, Next: Converting Integers, Prev: Assigning Integers, Up: Integer Functions + +5.3 Combined Initialization and Assignment Functions +==================================================== + +For convenience, GMP provides a parallel series of initialize-and-set +functions which initialize the output and then store the value there. +These functions' names have the form 'mpz_init_set...' + + Here is an example of using one: + + { + mpz_t pie; + mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10); + ... + mpz_sub (pie, ...); + ... + mpz_clear (pie); + } + +Once the integer has been initialized by any of the 'mpz_init_set...' +functions, it can be used as the source or destination operand for the +ordinary integer functions. Don't use an initialize-and-set function on +a variable already initialized! + + -- Function: void mpz_init_set (mpz_t ROP, const mpz_t OP) + -- Function: void mpz_init_set_ui (mpz_t ROP, unsigned long int OP) + -- Function: void mpz_init_set_si (mpz_t ROP, signed long int OP) + -- Function: void mpz_init_set_d (mpz_t ROP, double OP) + Initialize ROP with limb space and set the initial numeric value + from OP. + + -- Function: int mpz_init_set_str (mpz_t ROP, const char *STR, int + BASE) + Initialize ROP and set its value like 'mpz_set_str' (see its + documentation above for details). + + If the string is a correct base BASE number, the function returns + 0; if an error occurs it returns -1. ROP is initialized even if an + error occurs. (I.e., you have to call 'mpz_clear' for it.) + + +File: gmp.info, Node: Converting Integers, Next: Integer Arithmetic, Prev: Simultaneous Integer Init & Assign, Up: Integer Functions + +5.4 Conversion Functions +======================== + +This section describes functions for converting GMP integers to standard +C types. Functions for converting _to_ GMP integers are described in +*note Assigning Integers:: and *note I/O of Integers::. + + -- Function: unsigned long int mpz_get_ui (const mpz_t OP) + Return the value of OP as an 'unsigned long'. + + If OP is too big to fit an 'unsigned long' then just the least + significant bits that do fit are returned. The sign of OP is + ignored, only the absolute value is used. + + -- Function: signed long int mpz_get_si (const mpz_t OP) + If OP fits into a 'signed long int' return the value of OP. + Otherwise return the least significant part of OP, with the same + sign as OP. + + If OP is too big to fit in a 'signed long int', the returned result + is probably not very useful. To find out if the value will fit, + use the function 'mpz_fits_slong_p'. + + -- Function: double mpz_get_d (const mpz_t OP) + Convert OP to a 'double', truncating if necessary (i.e. rounding + towards zero). + + If the exponent from the conversion is too big, the result is + system dependent. An infinity is returned where available. A + hardware overflow trap may or may not occur. + + -- Function: double mpz_get_d_2exp (signed long int *EXP, const mpz_t + OP) + Convert OP to a 'double', truncating if necessary (i.e. rounding + towards zero), and returning the exponent separately. + + The return value is in the range 0.5<=abs(D)<1 and the exponent is + stored to '*EXP'. D * 2^EXP is the (truncated) OP value. If OP is + zero, the return is 0.0 and 0 is stored to '*EXP'. + + This is similar to the standard C 'frexp' function (*note + (libc)Normalization Functions::). + + -- Function: char * mpz_get_str (char *STR, int BASE, const mpz_t OP) + Convert OP to a string of digits in base BASE. The base argument + may vary from 2 to 62 or from -2 to -36. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in that + significance order) are used. + + If STR is 'NULL', the result string is allocated using the current + allocation function (*note Custom Allocation::). The block will be + 'strlen(str)+1' bytes, that being exactly enough for the string and + null-terminator. + + If STR is not 'NULL', it should point to a block of storage large + enough for the result, that being 'mpz_sizeinbase (OP, BASE) + 2'. + The two extra bytes are for a possible minus sign, and the + null-terminator. + + A pointer to the result string is returned, being either the + allocated block, or the given STR. + + +File: gmp.info, Node: Integer Arithmetic, Next: Integer Division, Prev: Converting Integers, Up: Integer Functions + +5.5 Arithmetic Functions +======================== + + -- Function: void mpz_add (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) + -- Function: void mpz_add_ui (mpz_t ROP, const mpz_t OP1, unsigned long + int OP2) + Set ROP to OP1 + OP2. + + -- Function: void mpz_sub (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) + -- Function: void mpz_sub_ui (mpz_t ROP, const mpz_t OP1, unsigned long + int OP2) + -- Function: void mpz_ui_sub (mpz_t ROP, unsigned long int OP1, const + mpz_t OP2) + Set ROP to OP1 - OP2. + + -- Function: void mpz_mul (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) + -- Function: void mpz_mul_si (mpz_t ROP, const mpz_t OP1, long int OP2) + -- Function: void mpz_mul_ui (mpz_t ROP, const mpz_t OP1, unsigned long + int OP2) + Set ROP to OP1 times OP2. + + -- Function: void mpz_addmul (mpz_t ROP, const mpz_t OP1, const mpz_t + OP2) + -- Function: void mpz_addmul_ui (mpz_t ROP, const mpz_t OP1, unsigned + long int OP2) + Set ROP to ROP + OP1 times OP2. + + -- Function: void mpz_submul (mpz_t ROP, const mpz_t OP1, const mpz_t + OP2) + -- Function: void mpz_submul_ui (mpz_t ROP, const mpz_t OP1, unsigned + long int OP2) + Set ROP to ROP - OP1 times OP2. + + -- Function: void mpz_mul_2exp (mpz_t ROP, const mpz_t OP1, mp_bitcnt_t + OP2) + Set ROP to OP1 times 2 raised to OP2. This operation can also be + defined as a left shift by OP2 bits. + + -- Function: void mpz_neg (mpz_t ROP, const mpz_t OP) + Set ROP to -OP. + + -- Function: void mpz_abs (mpz_t ROP, const mpz_t OP) + Set ROP to the absolute value of OP. + + +File: gmp.info, Node: Integer Division, Next: Integer Exponentiation, Prev: Integer Arithmetic, Up: Integer Functions + +5.6 Division Functions +====================== + +Division is undefined if the divisor is zero. Passing a zero divisor to +the division or modulo functions (including the modular powering +functions 'mpz_powm' and 'mpz_powm_ui') will cause an intentional +division by zero. This lets a program handle arithmetic exceptions in +these functions the same way as for normal C 'int' arithmetic. + + -- Function: void mpz_cdiv_q (mpz_t Q, const mpz_t N, const mpz_t D) + -- Function: void mpz_cdiv_r (mpz_t R, const mpz_t N, const mpz_t D) + -- Function: void mpz_cdiv_qr (mpz_t Q, mpz_t R, const mpz_t N, const + mpz_t D) + + -- Function: unsigned long int mpz_cdiv_q_ui (mpz_t Q, const mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_cdiv_r_ui (mpz_t R, const mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_cdiv_qr_ui (mpz_t Q, mpz_t R, + const mpz_t N, unsigned long int D) + -- Function: unsigned long int mpz_cdiv_ui (const mpz_t N, + unsigned long int D) + + -- Function: void mpz_cdiv_q_2exp (mpz_t Q, const mpz_t N, + mp_bitcnt_t B) + -- Function: void mpz_cdiv_r_2exp (mpz_t R, const mpz_t N, + mp_bitcnt_t B) + + -- Function: void mpz_fdiv_q (mpz_t Q, const mpz_t N, const mpz_t D) + -- Function: void mpz_fdiv_r (mpz_t R, const mpz_t N, const mpz_t D) + -- Function: void mpz_fdiv_qr (mpz_t Q, mpz_t R, const mpz_t N, const + mpz_t D) + + -- Function: unsigned long int mpz_fdiv_q_ui (mpz_t Q, const mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_fdiv_r_ui (mpz_t R, const mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_fdiv_qr_ui (mpz_t Q, mpz_t R, + const mpz_t N, unsigned long int D) + -- Function: unsigned long int mpz_fdiv_ui (const mpz_t N, + unsigned long int D) + + -- Function: void mpz_fdiv_q_2exp (mpz_t Q, const mpz_t N, + mp_bitcnt_t B) + -- Function: void mpz_fdiv_r_2exp (mpz_t R, const mpz_t N, + mp_bitcnt_t B) + + -- Function: void mpz_tdiv_q (mpz_t Q, const mpz_t N, const mpz_t D) + -- Function: void mpz_tdiv_r (mpz_t R, const mpz_t N, const mpz_t D) + -- Function: void mpz_tdiv_qr (mpz_t Q, mpz_t R, const mpz_t N, const + mpz_t D) + + -- Function: unsigned long int mpz_tdiv_q_ui (mpz_t Q, const mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_tdiv_r_ui (mpz_t R, const mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_tdiv_qr_ui (mpz_t Q, mpz_t R, + const mpz_t N, unsigned long int D) + -- Function: unsigned long int mpz_tdiv_ui (const mpz_t N, + unsigned long int D) + + -- Function: void mpz_tdiv_q_2exp (mpz_t Q, const mpz_t N, + mp_bitcnt_t B) + -- Function: void mpz_tdiv_r_2exp (mpz_t R, const mpz_t N, + mp_bitcnt_t B) + + + Divide N by D, forming a quotient Q and/or remainder R. For the + '2exp' functions, D=2^B. The rounding is in three styles, each + suiting different applications. + + * 'cdiv' rounds Q up towards +infinity, and R will have the + opposite sign to D. The 'c' stands for "ceil". + + * 'fdiv' rounds Q down towards -infinity, and R will have the + same sign as D. The 'f' stands for "floor". + + * 'tdiv' rounds Q towards zero, and R will have the same sign as + N. The 't' stands for "truncate". + + In all cases Q and R will satisfy N=Q*D+R, and R will satisfy + 0<=abs(R) 0 and that MOD is odd. + + This function is designed to take the same time and have the same + cache access patterns for any two same-size arguments, assuming + that function arguments are placed at the same position and that + the machine state is identical upon function entry. This function + is intended for cryptographic purposes, where resilience to + side-channel attacks is desired. + + -- Function: void mpz_pow_ui (mpz_t ROP, const mpz_t BASE, unsigned + long int EXP) + -- Function: void mpz_ui_pow_ui (mpz_t ROP, unsigned long int BASE, + unsigned long int EXP) + Set ROP to BASE raised to EXP. The case 0^0 yields 1. + + +File: gmp.info, Node: Integer Roots, Next: Number Theoretic Functions, Prev: Integer Exponentiation, Up: Integer Functions + +5.8 Root Extraction Functions +============================= + + -- Function: int mpz_root (mpz_t ROP, const mpz_t OP, unsigned long int + N) + Set ROP to the truncated integer part of the Nth root of OP. + Return non-zero if the computation was exact, i.e., if OP is ROP to + the Nth power. + + -- Function: void mpz_rootrem (mpz_t ROOT, mpz_t REM, const mpz_t U, + unsigned long int N) + Set ROOT to the truncated integer part of the Nth root of U. Set + REM to the remainder, U-ROOT**N. + + -- Function: void mpz_sqrt (mpz_t ROP, const mpz_t OP) + Set ROP to the truncated integer part of the square root of OP. + + -- Function: void mpz_sqrtrem (mpz_t ROP1, mpz_t ROP2, const mpz_t OP) + Set ROP1 to the truncated integer part of the square root of OP, + like 'mpz_sqrt'. Set ROP2 to the remainder OP-ROP1*ROP1, which + will be zero if OP is a perfect square. + + If ROP1 and ROP2 are the same variable, the results are undefined. + + -- Function: int mpz_perfect_power_p (const mpz_t OP) + Return non-zero if OP is a perfect power, i.e., if there exist + integers A and B, with B>1, such that OP equals A raised to the + power B. + + Under this definition both 0 and 1 are considered to be perfect + powers. Negative values of OP are accepted, but of course can only + be odd perfect powers. + + -- Function: int mpz_perfect_square_p (const mpz_t OP) + Return non-zero if OP is a perfect square, i.e., if the square root + of OP is an integer. Under this definition both 0 and 1 are + considered to be perfect squares. + + +File: gmp.info, Node: Number Theoretic Functions, Next: Integer Comparisons, Prev: Integer Roots, Up: Integer Functions + +5.9 Number Theoretic Functions +============================== + + -- Function: int mpz_probab_prime_p (const mpz_t N, int REPS) + Determine whether N is prime. Return 2 if N is definitely prime, + return 1 if N is probably prime (without being certain), or return + 0 if N is definitely non-prime. + + This function performs some trial divisions, a Baillie-PSW probable + prime test, then REPS-24 Miller-Rabin probabilistic primality + tests. A higher REPS value will reduce the chances of a non-prime + being identified as "probably prime". A composite number will be + identified as a prime with an asymptotic probability of less than + 4^(-REPS). Reasonable values of REPS are between 15 and 50. + + GMP versions up to and including 6.1.2 did not use the Baillie-PSW + primality test. In those older versions of GMP, this function + performed REPS Miller-Rabin tests. + + -- Function: void mpz_nextprime (mpz_t ROP, const mpz_t OP) + Set ROP to the next prime greater than OP. + + -- Function: int mpz_prevprime (mpz_t ROP, const mpz_t OP) + Set ROP to the greatest prime less than OP. + + If a previous prime doesn't exist (i.e. OP < 3), rop is unchanged + and 0 is returned. + + Return 1 if ROP is a probably prime, and 2 if ROP is definitely + prime. + + These functions use a probabilistic algorithm to identify primes. + For practical purposes it's adequate, the chance of a composite + passing will be extremely small. + + -- Function: void mpz_gcd (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) + Set ROP to the greatest common divisor of OP1 and OP2. The result + is always positive even if one or both input operands are negative. + Except if both inputs are zero; then this function defines gcd(0,0) + = 0. + + -- Function: unsigned long int mpz_gcd_ui (mpz_t ROP, const mpz_t OP1, + unsigned long int OP2) + Compute the greatest common divisor of OP1 and OP2. If ROP is not + 'NULL', store the result there. + + If the result is small enough to fit in an 'unsigned long int', it + is returned. If the result does not fit, 0 is returned, and the + result is equal to the argument OP1. Note that the result will + always fit if OP2 is non-zero. + + -- Function: void mpz_gcdext (mpz_t G, mpz_t S, mpz_t T, const mpz_t A, + const mpz_t B) + Set G to the greatest common divisor of A and B, and in addition + set S and T to coefficients satisfying A*S + B*T = G. The value in + G is always positive, even if one or both of A and B are negative + (or zero if both inputs are zero). The values in S and T are + chosen such that normally, abs(S) < abs(B) / (2 G) and abs(T) < + abs(A) / (2 G), and these relations define S and T uniquely. There + are a few exceptional cases: + + If abs(A) = abs(B), then S = 0, T = sgn(B). + + Otherwise, S = sgn(A) if B = 0 or abs(B) = 2 G, and T = sgn(B) if A + = 0 or abs(A) = 2 G. + + In all cases, S = 0 if and only if G = abs(B), i.e., if B divides A + or A = B = 0. + + If T or G is 'NULL' then that value is not computed. + + -- Function: void mpz_lcm (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) + -- Function: void mpz_lcm_ui (mpz_t ROP, const mpz_t OP1, unsigned long + OP2) + Set ROP to the least common multiple of OP1 and OP2. ROP is always + positive, irrespective of the signs of OP1 and OP2. ROP will be + zero if either OP1 or OP2 is zero. + + -- Function: int mpz_invert (mpz_t ROP, const mpz_t OP1, const mpz_t + OP2) + Compute the inverse of OP1 modulo OP2 and put the result in ROP. + If the inverse exists, the return value is non-zero and ROP will + satisfy 0 <= ROP < abs(OP2) (with ROP = 0 possible only when + abs(OP2) = 1, i.e., in the somewhat degenerate zero ring). If an + inverse doesn't exist the return value is zero and ROP is + undefined. The behaviour of this function is undefined when OP2 is + zero. + + -- Function: int mpz_jacobi (const mpz_t A, const mpz_t B) + Calculate the Jacobi symbol (A/B). This is defined only for B odd. + + -- Function: int mpz_legendre (const mpz_t A, const mpz_t P) + Calculate the Legendre symbol (A/P). This is defined only for P an + odd positive prime, and for such P it's identical to the Jacobi + symbol. + + -- Function: int mpz_kronecker (const mpz_t A, const mpz_t B) + -- Function: int mpz_kronecker_si (const mpz_t A, long B) + -- Function: int mpz_kronecker_ui (const mpz_t A, unsigned long B) + -- Function: int mpz_si_kronecker (long A, const mpz_t B) + -- Function: int mpz_ui_kronecker (unsigned long A, const mpz_t B) + Calculate the Jacobi symbol (A/B) with the Kronecker extension + (a/2)=(2/a) when a odd, or (a/2)=0 when a even. + + When B is odd the Jacobi symbol and Kronecker symbol are identical, + so 'mpz_kronecker_ui' etc can be used for mixed precision Jacobi + symbols too. + + For more information see Henri Cohen section 1.4.2 (*note + References::), or any number theory textbook. See also the example + program 'demos/qcn.c' which uses 'mpz_kronecker_ui'. + + -- Function: mp_bitcnt_t mpz_remove (mpz_t ROP, const mpz_t OP, const + mpz_t F) + Remove all occurrences of the factor F from OP and store the result + in ROP. The return value is how many such occurrences were + removed. + + -- Function: void mpz_fac_ui (mpz_t ROP, unsigned long int N) + -- Function: void mpz_2fac_ui (mpz_t ROP, unsigned long int N) + -- Function: void mpz_mfac_uiui (mpz_t ROP, unsigned long int N, + unsigned long int M) + Set ROP to the factorial of N: 'mpz_fac_ui' computes the plain + factorial N!, 'mpz_2fac_ui' computes the double-factorial N!!, and + 'mpz_mfac_uiui' the M-multi-factorial N!^(M). + + -- Function: void mpz_primorial_ui (mpz_t ROP, unsigned long int N) + Set ROP to the primorial of N, i.e. the product of all positive + prime numbers <=N. + + -- Function: void mpz_bin_ui (mpz_t ROP, const mpz_t N, unsigned long + int K) + -- Function: void mpz_bin_uiui (mpz_t ROP, unsigned long int N, + unsigned long int K) + Compute the binomial coefficient N over K and store the result in + ROP. Negative values of N are supported by 'mpz_bin_ui', using the + identity bin(-n,k) = (-1)^k * bin(n+k-1,k), see Knuth volume 1 + section 1.2.6 part G. + + -- Function: void mpz_fib_ui (mpz_t FN, unsigned long int N) + -- Function: void mpz_fib2_ui (mpz_t FN, mpz_t FNSUB1, unsigned long + int N) + 'mpz_fib_ui' sets FN to F[n], the Nth Fibonacci number. + 'mpz_fib2_ui' sets FN to F[n], and FNSUB1 to F[n-1]. + + These functions are designed for calculating isolated Fibonacci + numbers. When a sequence of values is wanted it's best to start + with 'mpz_fib2_ui' and iterate the defining F[n+1]=F[n]+F[n-1] or + similar. + + -- Function: void mpz_lucnum_ui (mpz_t LN, unsigned long int N) + -- Function: void mpz_lucnum2_ui (mpz_t LN, mpz_t LNSUB1, unsigned long + int N) + 'mpz_lucnum_ui' sets LN to L[n], the Nth Lucas number. + 'mpz_lucnum2_ui' sets LN to L[n], and LNSUB1 to L[n-1]. + + These functions are designed for calculating isolated Lucas + numbers. When a sequence of values is wanted it's best to start + with 'mpz_lucnum2_ui' and iterate the defining L[n+1]=L[n]+L[n-1] + or similar. + + The Fibonacci numbers and Lucas numbers are related sequences, so + it's never necessary to call both 'mpz_fib2_ui' and + 'mpz_lucnum2_ui'. The formulas for going from Fibonacci to Lucas + can be found in *note Lucas Numbers Algorithm::, the reverse is + straightforward too. + + +File: gmp.info, Node: Integer Comparisons, Next: Integer Logic and Bit Fiddling, Prev: Number Theoretic Functions, Up: Integer Functions + +5.10 Comparison Functions +========================= + + -- Function: int mpz_cmp (const mpz_t OP1, const mpz_t OP2) + -- Function: int mpz_cmp_d (const mpz_t OP1, double OP2) + -- Macro: int mpz_cmp_si (const mpz_t OP1, signed long int OP2) + -- Macro: int mpz_cmp_ui (const mpz_t OP1, unsigned long int OP2) + Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero if + OP1 = OP2, or a negative value if OP1 < OP2. + + 'mpz_cmp_ui' and 'mpz_cmp_si' are macros and will evaluate their + arguments more than once. 'mpz_cmp_d' can be called with an + infinity, but results are undefined for a NaN. + + -- Function: int mpz_cmpabs (const mpz_t OP1, const mpz_t OP2) + -- Function: int mpz_cmpabs_d (const mpz_t OP1, double OP2) + -- Function: int mpz_cmpabs_ui (const mpz_t OP1, unsigned long int OP2) + Compare the absolute values of OP1 and OP2. Return a positive + value if abs(OP1) > abs(OP2), zero if abs(OP1) = abs(OP2), or a + negative value if abs(OP1) < abs(OP2). + + 'mpz_cmpabs_d' can be called with an infinity, but results are + undefined for a NaN. + + -- Macro: int mpz_sgn (const mpz_t OP) + Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. + + This function is actually implemented as a macro. It evaluates its + argument multiple times. + + +File: gmp.info, Node: Integer Logic and Bit Fiddling, Next: I/O of Integers, Prev: Integer Comparisons, Up: Integer Functions + +5.11 Logical and Bit Manipulation Functions +=========================================== + +These functions behave as if two's complement arithmetic were used +(although sign-magnitude is the actual implementation). The least +significant bit is number 0. + + -- Function: void mpz_and (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) + Set ROP to OP1 bitwise-and OP2. + + -- Function: void mpz_ior (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) + Set ROP to OP1 bitwise inclusive-or OP2. + + -- Function: void mpz_xor (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) + Set ROP to OP1 bitwise exclusive-or OP2. + + -- Function: void mpz_com (mpz_t ROP, const mpz_t OP) + Set ROP to the one's complement of OP. + + -- Function: mp_bitcnt_t mpz_popcount (const mpz_t OP) + If OP>=0, return the population count of OP, which is the number of + 1 bits in the binary representation. If OP<0, the number of 1s is + infinite, and the return value is the largest possible + 'mp_bitcnt_t'. + + -- Function: mp_bitcnt_t mpz_hamdist (const mpz_t OP1, const mpz_t OP2) + If OP1 and OP2 are both >=0 or both <0, return the hamming distance + between the two operands, which is the number of bit positions + where OP1 and OP2 have different bit values. If one operand is >=0 + and the other <0 then the number of bits different is infinite, and + the return value is the largest possible 'mp_bitcnt_t'. + + -- Function: mp_bitcnt_t mpz_scan0 (const mpz_t OP, mp_bitcnt_t + STARTING_BIT) + -- Function: mp_bitcnt_t mpz_scan1 (const mpz_t OP, mp_bitcnt_t + STARTING_BIT) + Scan OP, starting from bit STARTING_BIT, towards more significant + bits, until the first 0 or 1 bit (respectively) is found. Return + the index of the found bit. + + If the bit at STARTING_BIT is already what's sought, then + STARTING_BIT is returned. + + If there's no bit found, then the largest possible 'mp_bitcnt_t' is + returned. This will happen in 'mpz_scan0' past the end of a + negative number, or 'mpz_scan1' past the end of a nonnegative + number. + + -- Function: void mpz_setbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) + Set bit BIT_INDEX in ROP. + + -- Function: void mpz_clrbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) + Clear bit BIT_INDEX in ROP. + + -- Function: void mpz_combit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) + Complement bit BIT_INDEX in ROP. + + -- Function: int mpz_tstbit (const mpz_t OP, mp_bitcnt_t BIT_INDEX) + Test bit BIT_INDEX in OP and return 0 or 1 accordingly. + + Shifting is also possible using multiplication (*note Integer +Arithmetic::) and division (*note Integer Division::), in particular the +'2exp' functions. + + +File: gmp.info, Node: I/O of Integers, Next: Integer Random Numbers, Prev: Integer Logic and Bit Fiddling, Up: Integer Functions + +5.12 Input and Output Functions +=============================== + +Functions that perform input from a stdio stream, and functions that +output to a stdio stream, of 'mpz' numbers. Passing a 'NULL' pointer +for a STREAM argument to any of these functions will make them read from +'stdin' and write to 'stdout', respectively. + + When using any of these functions, it is a good idea to include +'stdio.h' before 'gmp.h', since that will allow 'gmp.h' to define +prototypes for these functions. + + See also *note Formatted Output:: and *note Formatted Input::. + + -- Function: size_t mpz_out_str (FILE *STREAM, int BASE, const mpz_t + OP) + Output OP on stdio stream STREAM, as a string of digits in base + BASE. The base argument may vary from 2 to 62 or from -2 to -36. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in that + significance order) are used. + + Return the number of bytes written, or if an error occurred, return + 0. + + -- Function: size_t mpz_inp_str (mpz_t ROP, FILE *STREAM, int BASE) + Input a possibly white-space preceded string in base BASE from + stdio stream STREAM, and put the read integer in ROP. + + The BASE may vary from 2 to 62, or if BASE is 0, then the leading + characters are used: '0x' and '0X' for hexadecimal, '0b' and '0B' + for binary, '0' for octal, or decimal otherwise. + + For bases up to 36, case is ignored; upper-case and lower-case + letters have the same value. For bases 37 to 62, upper-case + letters represent the usual 10..35 while lower-case letters + represent 36..61. + + Return the number of bytes read, or if an error occurred, return 0. + + -- Function: size_t mpz_out_raw (FILE *STREAM, const mpz_t OP) + Output OP on stdio stream STREAM, in raw binary format. The + integer is written in a portable format, with 4 bytes of size + information, and that many bytes of limbs. Both the size and the + limbs are written in decreasing significance order (i.e., in + big-endian). + + The output can be read with 'mpz_inp_raw'. + + Return the number of bytes written, or if an error occurred, return + 0. + + The output of this can not be read by 'mpz_inp_raw' from GMP 1, + because of changes necessary for compatibility between 32-bit and + 64-bit machines. + + -- Function: size_t mpz_inp_raw (mpz_t ROP, FILE *STREAM) + Input from stdio stream STREAM in the format written by + 'mpz_out_raw', and put the result in ROP. Return the number of + bytes read, or if an error occurred, return 0. + + This routine can read the output from 'mpz_out_raw' also from GMP + 1, in spite of changes necessary for compatibility between 32-bit + and 64-bit machines. + + +File: gmp.info, Node: Integer Random Numbers, Next: Integer Import and Export, Prev: I/O of Integers, Up: Integer Functions + +5.13 Random Number Functions +============================ + +The random number functions of GMP come in two groups; older functions +that rely on a global state, and newer functions that accept a state +parameter that is read and modified. Please see the *note Random Number +Functions:: for more information on how to use and not to use random +number functions. + + -- Function: void mpz_urandomb (mpz_t ROP, gmp_randstate_t STATE, + mp_bitcnt_t N) + Generate a uniformly distributed random integer in the range 0 to + 2^N-1, inclusive. + + The variable STATE must be initialized by calling one of the + 'gmp_randinit' functions (*note Random State Initialization::) + before invoking this function. + + -- Function: void mpz_urandomm (mpz_t ROP, gmp_randstate_t STATE, const + mpz_t N) + Generate a uniform random integer in the range 0 to N-1, inclusive. + + The variable STATE must be initialized by calling one of the + 'gmp_randinit' functions (*note Random State Initialization::) + before invoking this function. + + -- Function: void mpz_rrandomb (mpz_t ROP, gmp_randstate_t STATE, + mp_bitcnt_t N) + Generate a random integer with long strings of zeros and ones in + the binary representation. Useful for testing functions and + algorithms, since this kind of random numbers have proven to be + more likely to trigger corner-case bugs. The random number will be + in the range 2^(N-1) to 2^N-1, inclusive. + + The variable STATE must be initialized by calling one of the + 'gmp_randinit' functions (*note Random State Initialization::) + before invoking this function. + + -- Function: void mpz_random (mpz_t ROP, mp_size_t MAX_SIZE) + Generate a random integer of at most MAX_SIZE limbs. The generated + random number doesn't satisfy any particular requirements of + randomness. Negative random numbers are generated when MAX_SIZE is + negative. + + This function is obsolete. Use 'mpz_urandomb' or 'mpz_urandomm' + instead. + + -- Function: void mpz_random2 (mpz_t ROP, mp_size_t MAX_SIZE) + Generate a random integer of at most MAX_SIZE limbs, with long + strings of zeros and ones in the binary representation. Useful for + testing functions and algorithms, since this kind of random numbers + have proven to be more likely to trigger corner-case bugs. + Negative random numbers are generated when MAX_SIZE is negative. + + This function is obsolete. Use 'mpz_rrandomb' instead. + + +File: gmp.info, Node: Integer Import and Export, Next: Miscellaneous Integer Functions, Prev: Integer Random Numbers, Up: Integer Functions + +5.14 Integer Import and Export +============================== + +'mpz_t' variables can be converted to and from arbitrary words of binary +data with the following functions. + + -- Function: void mpz_import (mpz_t ROP, size_t COUNT, int ORDER, + size_t SIZE, int ENDIAN, size_t NAILS, const void *OP) + Set ROP from an array of word data at OP. + + The parameters specify the format of the data. COUNT many words + are read, each SIZE bytes. ORDER can be 1 for most significant + word first or -1 for least significant first. Within each word + ENDIAN can be 1 for most significant byte first, -1 for least + significant first, or 0 for the native endianness of the host CPU. + The most significant NAILS bits of each word are skipped, this can + be 0 to use the full words. + + There is no sign taken from the data, ROP will simply be a positive + integer. An application can handle any sign itself, and apply it + for instance with 'mpz_neg'. + + There are no data alignment restrictions on OP, any address is + allowed. + + Here's an example converting an array of 'unsigned long' data, most + significant element first, and host byte order within each value. + + unsigned long a[20]; + /* Initialize Z and A */ + mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a); + + This example assumes the full 'sizeof' bytes are used for data in + the given type, which is usually true, and certainly true for + 'unsigned long' everywhere we know of. However on Cray vector + systems it may be noted that 'short' and 'int' are always stored in + 8 bytes (and with 'sizeof' indicating that) but use only 32 or 46 + bits. The NAILS feature can account for this, by passing for + instance '8*sizeof(int)-INT_BIT'. + + -- Function: void * mpz_export (void *ROP, size_t *COUNTP, int ORDER, + size_t SIZE, int ENDIAN, size_t NAILS, const mpz_t OP) + Fill ROP with word data from OP. + + The parameters specify the format of the data produced. Each word + will be SIZE bytes and ORDER can be 1 for most significant word + first or -1 for least significant first. Within each word ENDIAN + can be 1 for most significant byte first, -1 for least significant + first, or 0 for the native endianness of the host CPU. The most + significant NAILS bits of each word are unused and set to zero, + this can be 0 to produce full words. + + The number of words produced is written to '*COUNTP', or COUNTP can + be 'NULL' to discard the count. ROP must have enough space for the + data, or if ROP is 'NULL' then a result array of the necessary size + is allocated using the current GMP allocation function (*note + Custom Allocation::). In either case the return value is the + destination used, either ROP or the allocated block. + + If OP is non-zero then the most significant word produced will be + non-zero. If OP is zero then the count returned will be zero and + nothing written to ROP. If ROP is 'NULL' in this case, no block is + allocated, just 'NULL' is returned. + + The sign of OP is ignored, just the absolute value is exported. An + application can use 'mpz_sgn' to get the sign and handle it as + desired. (*note Integer Comparisons::) + + There are no data alignment restrictions on ROP, any address is + allowed. + + When an application is allocating space itself the required size + can be determined with a calculation like the following. Since + 'mpz_sizeinbase' always returns at least 1, 'count' here will be at + least one, which avoids any portability problems with 'malloc(0)', + though if 'z' is zero no space at all is actually needed (or + written). + + numb = 8*size - nail; + count = (mpz_sizeinbase (z, 2) + numb-1) / numb; + p = malloc (count * size); + + +File: gmp.info, Node: Miscellaneous Integer Functions, Next: Integer Special Functions, Prev: Integer Import and Export, Up: Integer Functions + +5.15 Miscellaneous Functions +============================ + + -- Function: int mpz_fits_ulong_p (const mpz_t OP) + -- Function: int mpz_fits_slong_p (const mpz_t OP) + -- Function: int mpz_fits_uint_p (const mpz_t OP) + -- Function: int mpz_fits_sint_p (const mpz_t OP) + -- Function: int mpz_fits_ushort_p (const mpz_t OP) + -- Function: int mpz_fits_sshort_p (const mpz_t OP) + Return non-zero iff the value of OP fits in an 'unsigned long int', + 'signed long int', 'unsigned int', 'signed int', 'unsigned short + int', or 'signed short int', respectively. Otherwise, return zero. + + -- Macro: int mpz_odd_p (const mpz_t OP) + -- Macro: int mpz_even_p (const mpz_t OP) + Determine whether OP is odd or even, respectively. Return non-zero + if yes, zero if no. These macros evaluate their argument more than + once. + + -- Function: size_t mpz_sizeinbase (const mpz_t OP, int BASE) + Return the size of OP measured in number of digits in the given + BASE. BASE can vary from 2 to 62. The sign of OP is ignored, just + the absolute value is used. The result will be either exact or 1 + too big. If BASE is a power of 2, the result is always exact. If + OP is zero the return value is always 1. + + This function can be used to determine the space required when + converting OP to a string. The right amount of allocation is + normally two more than the value returned by 'mpz_sizeinbase', one + extra for a minus sign and one for the null-terminator. + + It will be noted that 'mpz_sizeinbase(OP,2)' can be used to locate + the most significant 1 bit in OP, counting from 1. (Unlike the + bitwise functions which start from 0, *Note Logical and Bit + Manipulation Functions: Integer Logic and Bit Fiddling.) + + +File: gmp.info, Node: Integer Special Functions, Prev: Miscellaneous Integer Functions, Up: Integer Functions + +5.16 Special Functions +====================== + +The functions in this section are for various special purposes. Most +applications will not need them. + + -- Function: void mpz_array_init (mpz_t INTEGER_ARRAY, mp_size_t + ARRAY_SIZE, mp_size_t FIXED_NUM_BITS) + *This is an obsolete function. Do not use it.* + + -- Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC) + Change the space for INTEGER to NEW_ALLOC limbs. The value in + INTEGER is preserved if it fits, or is set to 0 if not. The return + value is not useful to applications and should be ignored. + + 'mpz_realloc2' is the preferred way to accomplish allocation + changes like this. 'mpz_realloc2' and '_mpz_realloc' are the same + except that '_mpz_realloc' takes its size in limbs. + + -- Function: mp_limb_t mpz_getlimbn (const mpz_t OP, mp_size_t N) + Return limb number N from OP. The sign of OP is ignored, just the + absolute value is used. The least significant limb is number 0. + + 'mpz_size' can be used to find how many limbs make up OP. + 'mpz_getlimbn' returns zero if N is outside the range 0 to + 'mpz_size(OP)-1'. + + -- Function: size_t mpz_size (const mpz_t OP) + Return the size of OP measured in number of limbs. If OP is zero, + the returned value will be zero. + + -- Function: const mp_limb_t * mpz_limbs_read (const mpz_t X) + Return a pointer to the limb array representing the absolute value + of X. The size of the array is 'mpz_size(X)'. Intended for read + access only. + + -- Function: mp_limb_t * mpz_limbs_write (mpz_t X, mp_size_t N) + -- Function: mp_limb_t * mpz_limbs_modify (mpz_t X, mp_size_t N) + Return a pointer to the limb array, intended for write access. The + array is reallocated as needed, to make room for N limbs. Requires + N > 0. The 'mpz_limbs_modify' function returns an array that holds + the old absolute value of X, while 'mpz_limbs_write' may destroy + the old value and return an array with unspecified contents. + + -- Function: void mpz_limbs_finish (mpz_t X, mp_size_t S) + Updates the internal size field of X. Used after writing to the + limb array pointer returned by 'mpz_limbs_write' or + 'mpz_limbs_modify' is completed. The array should contain abs(S) + valid limbs, representing the new absolute value for X, and the + sign of X is taken from the sign of S. This function never + reallocates X, so the limb pointer remains valid. + + void foo (mpz_t x) + { + mp_size_t n, i; + mp_limb_t *xp; + + n = mpz_size (x); + xp = mpz_limbs_modify (x, 2*n); + for (i = 0; i < n; i++) + xp[n+i] = xp[n-1-i]; + mpz_limbs_finish (x, mpz_sgn (x) < 0 ? - 2*n : 2*n); + } + + -- Function: mpz_srcptr mpz_roinit_n (mpz_t X, const mp_limb_t *XP, + mp_size_t XS) + Special initialization of X, using the given limb array and size. + X should be treated as read-only: it can be passed safely as input + to any mpz function, but not as an output. The array XP must point + to at least a readable limb, its size is abs(XS), and the sign of X + is the sign of XS. For convenience, the function returns X, but + cast to a const pointer type. + + void foo (mpz_t x) + { + static const mp_limb_t y[3] = { 0x1, 0x2, 0x3 }; + mpz_t tmp; + mpz_add (x, x, mpz_roinit_n (tmp, y, 3)); + } + + -- Macro: mpz_t MPZ_ROINIT_N (mp_limb_t *XP, mp_size_t XS) + This macro expands to an initializer which can be assigned to an + mpz_t variable. The limb array XP must point to at least a + readable limb, moreover, unlike the 'mpz_roinit_n' function, the + array must be normalized: if XS is non-zero, then 'XP[abs(XS)-1]' + must be non-zero. Intended primarily for constant values. Using + it for non-constant values requires a C compiler supporting C99. + + void foo (mpz_t x) + { + static const mp_limb_t ya[3] = { 0x1, 0x2, 0x3 }; + static const mpz_t y = MPZ_ROINIT_N ((mp_limb_t *) ya, 3); + + mpz_add (x, x, y); + } + + +File: gmp.info, Node: Rational Number Functions, Next: Floating-point Functions, Prev: Integer Functions, Up: Top + +6 Rational Number Functions +*************************** + +This chapter describes the GMP functions for performing arithmetic on +rational numbers. These functions start with the prefix 'mpq_'. + + Rational numbers are stored in objects of type 'mpq_t'. + + All rational arithmetic functions assume operands have a canonical +form, and canonicalize their result. The canonical form means that the +denominator and the numerator have no common factors, and that the +denominator is positive. Zero has the unique representation 0/1. + + Pure assignment functions do not canonicalize the assigned variable. +It is the responsibility of the user to canonicalize the assigned +variable before any arithmetic operations are performed on that +variable. + + -- Function: void mpq_canonicalize (mpq_t OP) + Remove any factors that are common to the numerator and denominator + of OP, and make the denominator positive. + +* Menu: + +* Initializing Rationals:: +* Rational Conversions:: +* Rational Arithmetic:: +* Comparing Rationals:: +* Applying Integer Functions:: +* I/O of Rationals:: + + +File: gmp.info, Node: Initializing Rationals, Next: Rational Conversions, Prev: Rational Number Functions, Up: Rational Number Functions + +6.1 Initialization and Assignment Functions +=========================================== + + -- Function: void mpq_init (mpq_t X) + Initialize X and set it to 0/1. Each variable should normally only + be initialized once, or at least cleared out (using the function + 'mpq_clear') between each initialization. + + -- Function: void mpq_inits (mpq_t X, ...) + Initialize a NULL-terminated list of 'mpq_t' variables, and set + their values to 0/1. + + -- Function: void mpq_clear (mpq_t X) + Free the space occupied by X. Make sure to call this function for + all 'mpq_t' variables when you are done with them. + + -- Function: void mpq_clears (mpq_t X, ...) + Free the space occupied by a NULL-terminated list of 'mpq_t' + variables. + + -- Function: void mpq_set (mpq_t ROP, const mpq_t OP) + -- Function: void mpq_set_z (mpq_t ROP, const mpz_t OP) + Assign ROP from OP. + + -- Function: void mpq_set_ui (mpq_t ROP, unsigned long int OP1, + unsigned long int OP2) + -- Function: void mpq_set_si (mpq_t ROP, signed long int OP1, unsigned + long int OP2) + Set the value of ROP to OP1/OP2. Note that if OP1 and OP2 have + common factors, ROP has to be passed to 'mpq_canonicalize' before + any operations are performed on ROP. + + -- Function: int mpq_set_str (mpq_t ROP, const char *STR, int BASE) + Set ROP from a null-terminated string STR in the given BASE. + + The string can be an integer like "41" or a fraction like "41/152". + The fraction must be in canonical form (*note Rational Number + Functions::), or if not then 'mpq_canonicalize' must be called. + + The numerator and optional denominator are parsed the same as in + 'mpz_set_str' (*note Assigning Integers::). White space is allowed + in the string, and is simply ignored. The BASE can vary from 2 to + 62, or if BASE is 0 then the leading characters are used: '0x' or + '0X' for hex, '0b' or '0B' for binary, '0' for octal, or decimal + otherwise. Note that this is done separately for the numerator and + denominator, so for instance '0xEF/100' is 239/100, whereas + '0xEF/0x100' is 239/256. + + The return value is 0 if the entire string is a valid number, or -1 + if not. + + -- Function: void mpq_swap (mpq_t ROP1, mpq_t ROP2) + Swap the values ROP1 and ROP2 efficiently. + + +File: gmp.info, Node: Rational Conversions, Next: Rational Arithmetic, Prev: Initializing Rationals, Up: Rational Number Functions + +6.2 Conversion Functions +======================== + + -- Function: double mpq_get_d (const mpq_t OP) + Convert OP to a 'double', truncating if necessary (i.e. rounding + towards zero). + + If the exponent from the conversion is too big or too small to fit + a 'double' then the result is system dependent. For too big an + infinity is returned when available. For too small 0.0 is normally + returned. Hardware overflow, underflow and denorm traps may or may + not occur. + + -- Function: void mpq_set_d (mpq_t ROP, double OP) + -- Function: void mpq_set_f (mpq_t ROP, const mpf_t OP) + Set ROP to the value of OP. There is no rounding, this conversion + is exact. + + -- Function: char * mpq_get_str (char *STR, int BASE, const mpq_t OP) + Convert OP to a string of digits in base BASE. The base argument + may vary from 2 to 62 or from -2 to -36. The string will be of the + form 'num/den', or if the denominator is 1 then just 'num'. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in that + significance order) are used. + + If STR is 'NULL', the result string is allocated using the current + allocation function (*note Custom Allocation::). The block will be + 'strlen(str)+1' bytes, that being exactly enough for the string and + null-terminator. + + If STR is not 'NULL', it should point to a block of storage large + enough for the result, that being + + mpz_sizeinbase (mpq_numref(OP), BASE) + + mpz_sizeinbase (mpq_denref(OP), BASE) + 3 + + The three extra bytes are for a possible minus sign, possible + slash, and the null-terminator. + + A pointer to the result string is returned, being either the + allocated block, or the given STR. + + +File: gmp.info, Node: Rational Arithmetic, Next: Comparing Rationals, Prev: Rational Conversions, Up: Rational Number Functions + +6.3 Arithmetic Functions +======================== + + -- Function: void mpq_add (mpq_t SUM, const mpq_t ADDEND1, const mpq_t + ADDEND2) + Set SUM to ADDEND1 + ADDEND2. + + -- Function: void mpq_sub (mpq_t DIFFERENCE, const mpq_t MINUEND, const + mpq_t SUBTRAHEND) + Set DIFFERENCE to MINUEND - SUBTRAHEND. + + -- Function: void mpq_mul (mpq_t PRODUCT, const mpq_t MULTIPLIER, const + mpq_t MULTIPLICAND) + Set PRODUCT to MULTIPLIER times MULTIPLICAND. + + -- Function: void mpq_mul_2exp (mpq_t ROP, const mpq_t OP1, mp_bitcnt_t + OP2) + Set ROP to OP1 times 2 raised to OP2. + + -- Function: void mpq_div (mpq_t QUOTIENT, const mpq_t DIVIDEND, const + mpq_t DIVISOR) + Set QUOTIENT to DIVIDEND/DIVISOR. + + -- Function: void mpq_div_2exp (mpq_t ROP, const mpq_t OP1, mp_bitcnt_t + OP2) + Set ROP to OP1 divided by 2 raised to OP2. + + -- Function: void mpq_neg (mpq_t NEGATED_OPERAND, const mpq_t OPERAND) + Set NEGATED_OPERAND to -OPERAND. + + -- Function: void mpq_abs (mpq_t ROP, const mpq_t OP) + Set ROP to the absolute value of OP. + + -- Function: void mpq_inv (mpq_t INVERTED_NUMBER, const mpq_t NUMBER) + Set INVERTED_NUMBER to 1/NUMBER. If the new denominator is zero, + this routine will divide by zero. + + +File: gmp.info, Node: Comparing Rationals, Next: Applying Integer Functions, Prev: Rational Arithmetic, Up: Rational Number Functions + +6.4 Comparison Functions +======================== + + -- Function: int mpq_cmp (const mpq_t OP1, const mpq_t OP2) + -- Function: int mpq_cmp_z (const mpq_t OP1, const mpz_t OP2) + Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero if + OP1 = OP2, and a negative value if OP1 < OP2. + + To determine if two rationals are equal, 'mpq_equal' is faster than + 'mpq_cmp'. + + -- Macro: int mpq_cmp_ui (const mpq_t OP1, unsigned long int NUM2, + unsigned long int DEN2) + -- Macro: int mpq_cmp_si (const mpq_t OP1, long int NUM2, unsigned long + int DEN2) + Compare OP1 and NUM2/DEN2. Return a positive value if OP1 > + NUM2/DEN2, zero if OP1 = NUM2/DEN2, and a negative value if OP1 < + NUM2/DEN2. + + NUM2 and DEN2 are allowed to have common factors. + + These functions are implemented as macros and evaluate their + arguments multiple times. + + -- Macro: int mpq_sgn (const mpq_t OP) + Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. + + This function is actually implemented as a macro. It evaluates its + argument multiple times. + + -- Function: int mpq_equal (const mpq_t OP1, const mpq_t OP2) + Return non-zero if OP1 and OP2 are equal, zero if they are + non-equal. Although 'mpq_cmp' can be used for the same purpose, + this function is much faster. + + +File: gmp.info, Node: Applying Integer Functions, Next: I/O of Rationals, Prev: Comparing Rationals, Up: Rational Number Functions + +6.5 Applying Integer Functions to Rationals +=========================================== + +The set of 'mpq' functions is quite small. In particular, there are few +functions for either input or output. The following functions give +direct access to the numerator and denominator of an 'mpq_t'. + + Note that if an assignment to the numerator and/or denominator could +take an 'mpq_t' out of the canonical form described at the start of this +chapter (*note Rational Number Functions::) then 'mpq_canonicalize' must +be called before any other 'mpq' functions are applied to that 'mpq_t'. + + -- Macro: mpz_ptr mpq_numref (const mpq_t OP) + -- Macro: mpz_ptr mpq_denref (const mpq_t OP) + Return a reference to the numerator and denominator of OP, + respectively. The 'mpz' functions can be used on the result of + these macros. Such calls may modify the numerator or denominator. + However, care should be taken so that OP remains in canonical form + prior to a possible later call to an 'mpq' function. + + -- Function: void mpq_get_num (mpz_t NUMERATOR, const mpq_t RATIONAL) + -- Function: void mpq_get_den (mpz_t DENOMINATOR, const mpq_t RATIONAL) + -- Function: void mpq_set_num (mpq_t RATIONAL, const mpz_t NUMERATOR) + -- Function: void mpq_set_den (mpq_t RATIONAL, const mpz_t DENOMINATOR) + Get or set the numerator or denominator of a rational. These + functions are equivalent to calling 'mpz_set' with an appropriate + 'mpq_numref' or 'mpq_denref'. Direct use of 'mpq_numref' or + 'mpq_denref' is recommended instead of these functions. + + +File: gmp.info, Node: I/O of Rationals, Prev: Applying Integer Functions, Up: Rational Number Functions + +6.6 Input and Output Functions +============================== + +Functions that perform input from a stdio stream, and functions that +output to a stdio stream, of 'mpq' numbers. Passing a 'NULL' pointer +for a STREAM argument to any of these functions will make them read from +'stdin' and write to 'stdout', respectively. + + When using any of these functions, it is a good idea to include +'stdio.h' before 'gmp.h', since that will allow 'gmp.h' to define +prototypes for these functions. + + See also *note Formatted Output:: and *note Formatted Input::. + + -- Function: size_t mpq_out_str (FILE *STREAM, int BASE, const mpq_t + OP) + Output OP on stdio stream STREAM, as a string of digits in base + BASE. The base argument may vary from 2 to 62 or from -2 to -36. + Output is in the form 'num/den' or if the denominator is 1 then + just 'num'. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in that + significance order) are used. + + Return the number of bytes written, or if an error occurred, return + 0. + + -- Function: size_t mpq_inp_str (mpq_t ROP, FILE *STREAM, int BASE) + Read a string of digits from STREAM and convert them to a rational + in ROP. Any initial white-space characters are read and discarded. + Return the number of characters read (including white space), or 0 + if a rational could not be read. + + The input can be a fraction like '17/63' or just an integer like + '123'. Reading stops at the first character not in this form, and + white space is not permitted within the string. If the input might + not be in canonical form, then 'mpq_canonicalize' must be called + (*note Rational Number Functions::). + + The BASE can be between 2 and 62, or can be 0 in which case the + leading characters of the string determine the base, '0x' or '0X' + for hexadecimal, '0b' and '0B' for binary, '0' for octal, or + decimal otherwise. The leading characters are examined separately + for the numerator and denominator of a fraction, so for instance + '0x10/11' is 16/11, whereas '0x10/0x11' is 16/17. + + +File: gmp.info, Node: Floating-point Functions, Next: Low-level Functions, Prev: Rational Number Functions, Up: Top + +7 Floating-point Functions +************************** + +GMP floating point numbers are stored in objects of type 'mpf_t' and +functions operating on them have an 'mpf_' prefix. + + The mantissa of each float has a user-selectable precision, in +practice only limited by available memory. Each variable has its own +precision, and that can be increased or decreased at any time. This +selectable precision is a minimum value, GMP rounds it up to a whole +limb. + + The accuracy of a calculation is determined by the priorly set +precision of the destination variable and the numeric values of the +input variables. Input variables' set precisions do not affect +calculations (except indirectly as their values might have been affected +when they were assigned). + + The exponent of each float has fixed precision, one machine word on +most systems. In the current implementation the exponent is a count of +limbs, so for example on a 32-bit system this means a range of roughly +2^-68719476768 to 2^68719476736, or on a 64-bit system this will be much +greater. Note however that 'mpf_get_str' can only return an exponent +which fits an 'mp_exp_t' and currently 'mpf_set_str' doesn't accept +exponents bigger than a 'long'. + + Each variable keeps track of the mantissa data actually in use. This +means that if a float is exactly represented in only a few bits then +only those bits will be used in a calculation, even if the variable's +selected precision is high. This is a performance optimization; it does +not affect the numeric results. + + Internally, GMP sometimes calculates with higher precision than that +of the destination variable in order to limit errors. Final results are +always truncated to the destination variable's precision. + + The mantissa is stored in binary. One consequence of this is that +decimal fractions like 0.1 cannot be represented exactly. The same is +true of plain IEEE 'double' floats. This makes both highly unsuitable +for calculations involving money or other values that should be exact +decimal fractions. (Suitably scaled integers, or perhaps rationals, are +better choices.) + + The 'mpf' functions and variables have no special notion of infinity +or not-a-number, and applications must take care not to overflow the +exponent or results will be unpredictable. + + Note that the 'mpf' functions are _not_ intended as a smooth +extension to IEEE P754 arithmetic. In particular results obtained on +one computer often differ from the results on a computer with a +different word size. + + New projects should consider using the GMP extension library MPFR +() instead. MPFR provides well-defined precision +and accurate rounding, and thereby naturally extends IEEE P754. + +* Menu: + +* Initializing Floats:: +* Assigning Floats:: +* Simultaneous Float Init & Assign:: +* Converting Floats:: +* Float Arithmetic:: +* Float Comparison:: +* I/O of Floats:: +* Miscellaneous Float Functions:: + + +File: gmp.info, Node: Initializing Floats, Next: Assigning Floats, Prev: Floating-point Functions, Up: Floating-point Functions + +7.1 Initialization Functions +============================ + + -- Function: void mpf_set_default_prec (mp_bitcnt_t PREC) + Set the default precision to be *at least* PREC bits. All + subsequent calls to 'mpf_init' will use this precision, but + previously initialized variables are unaffected. + + -- Function: mp_bitcnt_t mpf_get_default_prec (void) + Return the default precision actually used. + + An 'mpf_t' object must be initialized before storing the first value +in it. The functions 'mpf_init' and 'mpf_init2' are used for that +purpose. + + -- Function: void mpf_init (mpf_t X) + Initialize X to 0. Normally, a variable should be initialized once + only or at least be cleared, using 'mpf_clear', between + initializations. The precision of X is undefined unless a default + precision has already been established by a call to + 'mpf_set_default_prec'. + + -- Function: void mpf_init2 (mpf_t X, mp_bitcnt_t PREC) + Initialize X to 0 and set its precision to be *at least* PREC bits. + Normally, a variable should be initialized once only or at least be + cleared, using 'mpf_clear', between initializations. + + -- Function: void mpf_inits (mpf_t X, ...) + Initialize a NULL-terminated list of 'mpf_t' variables, and set + their values to 0. The precision of the initialized variables is + undefined unless a default precision has already been established + by a call to 'mpf_set_default_prec'. + + -- Function: void mpf_clear (mpf_t X) + Free the space occupied by X. Make sure to call this function for + all 'mpf_t' variables when you are done with them. + + -- Function: void mpf_clears (mpf_t X, ...) + Free the space occupied by a NULL-terminated list of 'mpf_t' + variables. + + Here is an example on how to initialize floating-point variables: + { + mpf_t x, y; + mpf_init (x); /* use default precision */ + mpf_init2 (y, 256); /* precision _at least_ 256 bits */ + ... + /* Unless the program is about to exit, do ... */ + mpf_clear (x); + mpf_clear (y); + } + + The following three functions are useful for changing the precision +during a calculation. A typical use would be for adjusting the +precision gradually in iterative algorithms like Newton-Raphson, making +the computation precision closely match the actual accurate part of the +numbers. + + -- Function: mp_bitcnt_t mpf_get_prec (const mpf_t OP) + Return the current precision of OP, in bits. + + -- Function: void mpf_set_prec (mpf_t ROP, mp_bitcnt_t PREC) + Set the precision of ROP to be *at least* PREC bits. The value in + ROP will be truncated to the new precision. + + This function requires a call to 'realloc', and so should not be + used in a tight loop. + + -- Function: void mpf_set_prec_raw (mpf_t ROP, mp_bitcnt_t PREC) + Set the precision of ROP to be *at least* PREC bits, without + changing the memory allocated. + + PREC must be no more than the allocated precision for ROP, that + being the precision when ROP was initialized, or in the most recent + 'mpf_set_prec'. + + The value in ROP is unchanged, and in particular if it had a higher + precision than PREC it will retain that higher precision. New + values written to ROP will use the new PREC. + + Before calling 'mpf_clear' or the full 'mpf_set_prec', another + 'mpf_set_prec_raw' call must be made to restore ROP to its original + allocated precision. Failing to do so will have unpredictable + results. + + 'mpf_get_prec' can be used before 'mpf_set_prec_raw' to get the + original allocated precision. After 'mpf_set_prec_raw' it reflects + the PREC value set. + + 'mpf_set_prec_raw' is an efficient way to use an 'mpf_t' variable + at different precisions during a calculation, perhaps to gradually + increase precision in an iteration, or just to use various + different precisions for different purposes during a calculation. + + +File: gmp.info, Node: Assigning Floats, Next: Simultaneous Float Init & Assign, Prev: Initializing Floats, Up: Floating-point Functions + +7.2 Assignment Functions +======================== + +These functions assign new values to already initialized floats (*note +Initializing Floats::). + + -- Function: void mpf_set (mpf_t ROP, const mpf_t OP) + -- Function: void mpf_set_ui (mpf_t ROP, unsigned long int OP) + -- Function: void mpf_set_si (mpf_t ROP, signed long int OP) + -- Function: void mpf_set_d (mpf_t ROP, double OP) + -- Function: void mpf_set_z (mpf_t ROP, const mpz_t OP) + -- Function: void mpf_set_q (mpf_t ROP, const mpq_t OP) + Set the value of ROP from OP. + + -- Function: int mpf_set_str (mpf_t ROP, const char *STR, int BASE) + Set the value of ROP from the string in STR. The string is of the + form 'M@N' or, if the base is 10 or less, alternatively 'MeN'. 'M' + is the mantissa and 'N' is the exponent. The mantissa is always in + the specified base. The exponent is either in the specified base + or, if BASE is negative, in decimal. The decimal point expected is + taken from the current locale, on systems providing 'localeconv'. + + The argument BASE may be in the ranges 2 to 62, or -62 to -2. + Negative values are used to specify that the exponent is in + decimal. + + For bases up to 36, case is ignored; upper-case and lower-case + letters have the same value; for bases 37 to 62, upper-case letters + represent the usual 10..35 while lower-case letters represent + 36..61. + + Unlike the corresponding 'mpz' function, the base will not be + determined from the leading characters of the string if BASE is 0. + This is so that numbers like '0.23' are not interpreted as octal. + + White space is allowed in the string, and is simply ignored. [This + is not really true; white-space is ignored in the beginning of the + string and within the mantissa, but not in other places, such as + after a minus sign or in the exponent. We are considering changing + the definition of this function, making it fail when there is any + white-space in the input, since that makes a lot of sense. Please + tell us your opinion about this change. Do you really want it to + accept "3 14" as meaning 314 as it does now?] + + This function returns 0 if the entire string is a valid number in + base BASE. Otherwise it returns -1. + + -- Function: void mpf_swap (mpf_t ROP1, mpf_t ROP2) + Swap ROP1 and ROP2 efficiently. Both the values and the precisions + of the two variables are swapped. + + +File: gmp.info, Node: Simultaneous Float Init & Assign, Next: Converting Floats, Prev: Assigning Floats, Up: Floating-point Functions + +7.3 Combined Initialization and Assignment Functions +==================================================== + +For convenience, GMP provides a parallel series of initialize-and-set +functions which initialize the output and then store the value there. +These functions' names have the form 'mpf_init_set...' + + Once the float has been initialized by any of the 'mpf_init_set...' +functions, it can be used as the source or destination operand for the +ordinary float functions. Don't use an initialize-and-set function on a +variable already initialized! + + -- Function: void mpf_init_set (mpf_t ROP, const mpf_t OP) + -- Function: void mpf_init_set_ui (mpf_t ROP, unsigned long int OP) + -- Function: void mpf_init_set_si (mpf_t ROP, signed long int OP) + -- Function: void mpf_init_set_d (mpf_t ROP, double OP) + Initialize ROP and set its value from OP. + + The precision of ROP will be taken from the active default + precision, as set by 'mpf_set_default_prec'. + + -- Function: int mpf_init_set_str (mpf_t ROP, const char *STR, int + BASE) + Initialize ROP and set its value from the string in STR. See + 'mpf_set_str' above for details on the assignment operation. + + Note that ROP is initialized even if an error occurs. (I.e., you + have to call 'mpf_clear' for it.) + + The precision of ROP will be taken from the active default + precision, as set by 'mpf_set_default_prec'. + + +File: gmp.info, Node: Converting Floats, Next: Float Arithmetic, Prev: Simultaneous Float Init & Assign, Up: Floating-point Functions + +7.4 Conversion Functions +======================== + + -- Function: double mpf_get_d (const mpf_t OP) + Convert OP to a 'double', truncating if necessary (i.e. rounding + towards zero). + + If the exponent in OP is too big or too small to fit a 'double' + then the result is system dependent. For too big an infinity is + returned when available. For too small 0.0 is normally returned. + Hardware overflow, underflow and denorm traps may or may not occur. + + -- Function: double mpf_get_d_2exp (signed long int *EXP, const mpf_t + OP) + Convert OP to a 'double', truncating if necessary (i.e. rounding + towards zero), and with an exponent returned separately. + + The return value is in the range 0.5<=abs(D)<1 and the exponent is + stored to '*EXP'. D * 2^EXP is the (truncated) OP value. If OP is + zero, the return is 0.0 and 0 is stored to '*EXP'. + + This is similar to the standard C 'frexp' function (*note + (libc)Normalization Functions::). + + -- Function: long mpf_get_si (const mpf_t OP) + -- Function: unsigned long mpf_get_ui (const mpf_t OP) + Convert OP to a 'long' or 'unsigned long', truncating any fraction + part. If OP is too big for the return type, the result is + undefined. + + See also 'mpf_fits_slong_p' and 'mpf_fits_ulong_p' (*note + Miscellaneous Float Functions::). + + -- Function: char * mpf_get_str (char *STR, mp_exp_t *EXPPTR, int BASE, + size_t N_DIGITS, const mpf_t OP) + Convert OP to a string of digits in base BASE. The base argument + may vary from 2 to 62 or from -2 to -36. Up to N_DIGITS digits + will be generated. Trailing zeros are not returned. No more + digits than can be accurately represented by OP are ever generated. + If N_DIGITS is 0 then that accurate maximum number of digits are + generated. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in that + significance order) are used. + + If STR is 'NULL', the result string is allocated using the current + allocation function (*note Custom Allocation::). The block will be + 'strlen(str)+1' bytes, that being exactly enough for the string and + null-terminator. + + If STR is not 'NULL', it should point to a block of N_DIGITS + 2 + bytes, that being enough for the mantissa, a possible minus sign, + and a null-terminator. When N_DIGITS is 0 to get all significant + digits, an application won't be able to know the space required, + and STR should be 'NULL' in that case. + + The generated string is a fraction, with an implicit radix point + immediately to the left of the first digit. The applicable + exponent is written through the EXPPTR pointer. For example, the + number 3.1416 would be returned as string "31416" and exponent 1. + + When OP is zero, an empty string is produced and the exponent + returned is 0. + + A pointer to the result string is returned, being either the + allocated block or the given STR. + + +File: gmp.info, Node: Float Arithmetic, Next: Float Comparison, Prev: Converting Floats, Up: Floating-point Functions + +7.5 Arithmetic Functions +======================== + + -- Function: void mpf_add (mpf_t ROP, const mpf_t OP1, const mpf_t OP2) + -- Function: void mpf_add_ui (mpf_t ROP, const mpf_t OP1, unsigned long + int OP2) + Set ROP to OP1 + OP2. + + -- Function: void mpf_sub (mpf_t ROP, const mpf_t OP1, const mpf_t OP2) + -- Function: void mpf_ui_sub (mpf_t ROP, unsigned long int OP1, const + mpf_t OP2) + -- Function: void mpf_sub_ui (mpf_t ROP, const mpf_t OP1, unsigned long + int OP2) + Set ROP to OP1 - OP2. + + -- Function: void mpf_mul (mpf_t ROP, const mpf_t OP1, const mpf_t OP2) + -- Function: void mpf_mul_ui (mpf_t ROP, const mpf_t OP1, unsigned long + int OP2) + Set ROP to OP1 times OP2. + + Division is undefined if the divisor is zero, and passing a zero +divisor to the divide functions will make these functions intentionally +divide by zero. This lets the user handle arithmetic exceptions in +these functions in the same manner as other arithmetic exceptions. + + -- Function: void mpf_div (mpf_t ROP, const mpf_t OP1, const mpf_t OP2) + -- Function: void mpf_ui_div (mpf_t ROP, unsigned long int OP1, const + mpf_t OP2) + -- Function: void mpf_div_ui (mpf_t ROP, const mpf_t OP1, unsigned long + int OP2) + Set ROP to OP1/OP2. + + -- Function: void mpf_sqrt (mpf_t ROP, const mpf_t OP) + -- Function: void mpf_sqrt_ui (mpf_t ROP, unsigned long int OP) + Set ROP to the square root of OP. + + -- Function: void mpf_pow_ui (mpf_t ROP, const mpf_t OP1, unsigned long + int OP2) + Set ROP to OP1 raised to the power OP2. + + -- Function: void mpf_neg (mpf_t ROP, const mpf_t OP) + Set ROP to -OP. + + -- Function: void mpf_abs (mpf_t ROP, const mpf_t OP) + Set ROP to the absolute value of OP. + + -- Function: void mpf_mul_2exp (mpf_t ROP, const mpf_t OP1, mp_bitcnt_t + OP2) + Set ROP to OP1 times 2 raised to OP2. + + -- Function: void mpf_div_2exp (mpf_t ROP, const mpf_t OP1, mp_bitcnt_t + OP2) + Set ROP to OP1 divided by 2 raised to OP2. + + +File: gmp.info, Node: Float Comparison, Next: I/O of Floats, Prev: Float Arithmetic, Up: Floating-point Functions + +7.6 Comparison Functions +======================== + + -- Function: int mpf_cmp (const mpf_t OP1, const mpf_t OP2) + -- Function: int mpf_cmp_z (const mpf_t OP1, const mpz_t OP2) + -- Function: int mpf_cmp_d (const mpf_t OP1, double OP2) + -- Function: int mpf_cmp_ui (const mpf_t OP1, unsigned long int OP2) + -- Function: int mpf_cmp_si (const mpf_t OP1, signed long int OP2) + Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero if + OP1 = OP2, and a negative value if OP1 < OP2. + + 'mpf_cmp_d' can be called with an infinity, but results are + undefined for a NaN. + + -- Function: int mpf_eq (const mpf_t OP1, const mpf_t OP2, mp_bitcnt_t + op3) + *This function is mathematically ill-defined and should not be + used.* + + Return non-zero if the first OP3 bits of OP1 and OP2 are equal, + zero otherwise. Note that numbers like e.g., 256 (binary + 100000000) and 255 (binary 11111111) will never be equal by this + function's measure, and furthermore that 0 will only be equal to + itself. + + -- Function: void mpf_reldiff (mpf_t ROP, const mpf_t OP1, const mpf_t + OP2) + Compute the relative difference between OP1 and OP2 and store the + result in ROP. This is abs(OP1-OP2)/OP1. + + -- Macro: int mpf_sgn (const mpf_t OP) + Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. + + This function is actually implemented as a macro. It evaluates its + argument multiple times. + + +File: gmp.info, Node: I/O of Floats, Next: Miscellaneous Float Functions, Prev: Float Comparison, Up: Floating-point Functions + +7.7 Input and Output Functions +============================== + +Functions that perform input from a stdio stream, and functions that +output to a stdio stream, of 'mpf' numbers. Passing a 'NULL' pointer +for a STREAM argument to any of these functions will make them read from +'stdin' and write to 'stdout', respectively. + + When using any of these functions, it is a good idea to include +'stdio.h' before 'gmp.h', since that will allow 'gmp.h' to define +prototypes for these functions. + + See also *note Formatted Output:: and *note Formatted Input::. + + -- Function: size_t mpf_out_str (FILE *STREAM, int BASE, size_t + N_DIGITS, const mpf_t OP) + Print OP to STREAM, as a string of digits. Return the number of + bytes written, or if an error occurred, return 0. + + The mantissa is prefixed with an '0.' and is in the given BASE, + which may vary from 2 to 62 or from -2 to -36. An exponent is then + printed, separated by an 'e', or if the base is greater than 10 + then by an '@'. The exponent is always in decimal. The decimal + point follows the current locale, on systems providing + 'localeconv'. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in that + significance order) are used. + + Up to N_DIGITS will be printed from the mantissa, except that no + more digits than are accurately representable by OP will be + printed. N_DIGITS can be 0 to select that accurate maximum. + + -- Function: size_t mpf_inp_str (mpf_t ROP, FILE *STREAM, int BASE) + Read a string in base BASE from STREAM, and put the read float in + ROP. The string is of the form 'M@N' or, if the base is 10 or + less, alternatively 'MeN'. 'M' is the mantissa and 'N' is the + exponent. The mantissa is always in the specified base. The + exponent is either in the specified base or, if BASE is negative, + in decimal. The decimal point expected is taken from the current + locale, on systems providing 'localeconv'. + + The argument BASE may be in the ranges 2 to 36, or -36 to -2. + Negative values are used to specify that the exponent is in + decimal. + + Unlike the corresponding 'mpz' function, the base will not be + determined from the leading characters of the string if BASE is 0. + This is so that numbers like '0.23' are not interpreted as octal. + + Return the number of bytes read, or if an error occurred, return 0. + + +File: gmp.info, Node: Miscellaneous Float Functions, Prev: I/O of Floats, Up: Floating-point Functions + +7.8 Miscellaneous Functions +=========================== + + -- Function: void mpf_ceil (mpf_t ROP, const mpf_t OP) + -- Function: void mpf_floor (mpf_t ROP, const mpf_t OP) + -- Function: void mpf_trunc (mpf_t ROP, const mpf_t OP) + Set ROP to OP rounded to an integer. 'mpf_ceil' rounds to the next + higher integer, 'mpf_floor' to the next lower, and 'mpf_trunc' to + the integer towards zero. + + -- Function: int mpf_integer_p (const mpf_t OP) + Return non-zero if OP is an integer. + + -- Function: int mpf_fits_ulong_p (const mpf_t OP) + -- Function: int mpf_fits_slong_p (const mpf_t OP) + -- Function: int mpf_fits_uint_p (const mpf_t OP) + -- Function: int mpf_fits_sint_p (const mpf_t OP) + -- Function: int mpf_fits_ushort_p (const mpf_t OP) + -- Function: int mpf_fits_sshort_p (const mpf_t OP) + Return non-zero if OP would fit in the respective C data type, when + truncated to an integer. + + -- Function: void mpf_urandomb (mpf_t ROP, gmp_randstate_t STATE, + mp_bitcnt_t NBITS) + Generate a uniformly distributed random float in ROP, such that 0 + <= ROP < 1, with NBITS significant bits in the mantissa or less if + the precision of ROP is smaller. + + The variable STATE must be initialized by calling one of the + 'gmp_randinit' functions (*note Random State Initialization::) + before invoking this function. + + -- Function: void mpf_random2 (mpf_t ROP, mp_size_t MAX_SIZE, mp_exp_t + EXP) + Generate a random float of at most MAX_SIZE limbs, with long + strings of zeros and ones in the binary representation. The + exponent of the number is in the interval -EXP to EXP (in limbs). + This function is useful for testing functions and algorithms, since + these kind of random numbers have proven to be more likely to + trigger corner-case bugs. Negative random numbers are generated + when MAX_SIZE is negative. + + +File: gmp.info, Node: Low-level Functions, Next: Random Number Functions, Prev: Floating-point Functions, Up: Top + +8 Low-level Functions +********************* + +This chapter describes low-level GMP functions, used to implement the +high-level GMP functions, but also intended for time-critical user code. + + These functions start with the prefix 'mpn_'. + + The 'mpn' functions are designed to be as fast as possible, *not* to +provide a coherent calling interface. The different functions have +somewhat similar interfaces, but there are variations that make them +hard to use. These functions do as little as possible apart from the +real multiple precision computation, so that no time is spent on things +that not all callers need. + + A source operand is specified by a pointer to the least significant +limb and a limb count. A destination operand is specified by just a +pointer. It is the responsibility of the caller to ensure that the +destination has enough space for storing the result. + + With this way of specifying operands, it is possible to perform +computations on subranges of an argument, and store the result into a +subrange of a destination. + + A common requirement for all functions is that each source area needs +at least one limb. No size argument may be zero. Unless otherwise +stated, in-place operations are allowed where source and destination are +the same, but not where they only partly overlap. + + The 'mpn' functions are the base for the implementation of the +'mpz_', 'mpf_', and 'mpq_' functions. + + This example adds the number beginning at S1P and the number +beginning at S2P and writes the sum at DESTP. All areas have N limbs. + + cy = mpn_add_n (destp, s1p, s2p, n) + + It should be noted that the 'mpn' functions make no attempt to +identify high or low zero limbs on their operands, or other special +forms. On random data such cases will be unlikely and it'd be wasteful +for every function to check every time. An application knowing +something about its data can take steps to trim or perhaps split its +calculations. + + +In the notation used below, a source operand is identified by the +pointer to the least significant limb, and the limb count in braces. +For example, {S1P, S1N}. + + -- Function: mp_limb_t mpn_add_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Add {S1P, N} and {S2P, N}, and write the N least significant limbs + of the result to RP. Return carry, either 0 or 1. + + This is the lowest-level function for addition. It is the + preferred function for addition, since it is written in assembly + for most CPUs. For addition of a variable to itself (i.e., S1P + equals S2P) use 'mpn_lshift' with a count of 1 for optimal speed. + + -- Function: mp_limb_t mpn_add_1 (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N, mp_limb_t S2LIMB) + Add {S1P, N} and S2LIMB, and write the N least significant limbs of + the result to RP. Return carry, either 0 or 1. + + -- Function: mp_limb_t mpn_add (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) + Add {S1P, S1N} and {S2P, S2N}, and write the S1N least significant + limbs of the result to RP. Return carry, either 0 or 1. + + This function requires that S1N is greater than or equal to S2N. + + -- Function: mp_limb_t mpn_sub_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Subtract {S2P, N} from {S1P, N}, and write the N least significant + limbs of the result to RP. Return borrow, either 0 or 1. + + This is the lowest-level function for subtraction. It is the + preferred function for subtraction, since it is written in assembly + for most CPUs. + + -- Function: mp_limb_t mpn_sub_1 (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N, mp_limb_t S2LIMB) + Subtract S2LIMB from {S1P, N}, and write the N least significant + limbs of the result to RP. Return borrow, either 0 or 1. + + -- Function: mp_limb_t mpn_sub (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) + Subtract {S2P, S2N} from {S1P, S1N}, and write the S1N least + significant limbs of the result to RP. Return borrow, either 0 or + 1. + + This function requires that S1N is greater than or equal to S2N. + + -- Function: mp_limb_t mpn_neg (mp_limb_t *RP, const mp_limb_t *SP, + mp_size_t N) + Perform the negation of {SP, N}, and write the result to {RP, N}. + This is equivalent to calling 'mpn_sub_n' with an N-limb zero + minuend and passing {SP, N} as subtrahend. Return borrow, either 0 + or 1. + + -- Function: void mpn_mul_n (mp_limb_t *RP, const mp_limb_t *S1P, const + mp_limb_t *S2P, mp_size_t N) + Multiply {S1P, N} and {S2P, N}, and write the 2*N-limb result to + RP. + + The destination has to have space for 2*N limbs, even if the + product's most significant limb is zero. No overlap is permitted + between the destination and either source. + + If the two input operands are the same, use 'mpn_sqr'. + + -- Function: mp_limb_t mpn_mul (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) + Multiply {S1P, S1N} and {S2P, S2N}, and write the (S1N+S2N)-limb + result to RP. Return the most significant limb of the result. + + The destination has to have space for S1N + S2N limbs, even if the + product's most significant limb is zero. No overlap is permitted + between the destination and either source. + + This function requires that S1N is greater than or equal to S2N. + + -- Function: void mpn_sqr (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N) + Compute the square of {S1P, N} and write the 2*N-limb result to RP. + + The destination has to have space for 2N limbs, even if the + result's most significant limb is zero. No overlap is permitted + between the destination and the source. + + -- Function: mp_limb_t mpn_mul_1 (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N, mp_limb_t S2LIMB) + Multiply {S1P, N} by S2LIMB, and write the N least significant + limbs of the product to RP. Return the most significant limb of + the product. {S1P, N} and {RP, N} are allowed to overlap provided + RP <= S1P. + + This is a low-level function that is a building block for general + multiplication as well as other operations in GMP. It is written + in assembly for most CPUs. + + Don't call this function if S2LIMB is a power of 2; use + 'mpn_lshift' with a count equal to the logarithm of S2LIMB instead, + for optimal speed. + + -- Function: mp_limb_t mpn_addmul_1 (mp_limb_t *RP, const mp_limb_t + *S1P, mp_size_t N, mp_limb_t S2LIMB) + Multiply {S1P, N} and S2LIMB, and add the N least significant limbs + of the product to {RP, N} and write the result to RP. Return the + most significant limb of the product, plus carry-out from the + addition. {S1P, N} and {RP, N} are allowed to overlap provided RP + <= S1P. + + This is a low-level function that is a building block for general + multiplication as well as other operations in GMP. It is written + in assembly for most CPUs. + + -- Function: mp_limb_t mpn_submul_1 (mp_limb_t *RP, const mp_limb_t + *S1P, mp_size_t N, mp_limb_t S2LIMB) + Multiply {S1P, N} and S2LIMB, and subtract the N least significant + limbs of the product from {RP, N} and write the result to RP. + Return the most significant limb of the product, plus borrow-out + from the subtraction. {S1P, N} and {RP, N} are allowed to overlap + provided RP <= S1P. + + This is a low-level function that is a building block for general + multiplication and division as well as other operations in GMP. It + is written in assembly for most CPUs. + + -- Function: void mpn_tdiv_qr (mp_limb_t *QP, mp_limb_t *RP, mp_size_t + QXN, const mp_limb_t *NP, mp_size_t NN, const mp_limb_t *DP, + mp_size_t DN) + Divide {NP, NN} by {DP, DN} and put the quotient at {QP, NN-DN+1} + and the remainder at {RP, DN}. The quotient is rounded towards 0. + + No overlap is permitted between arguments, except that NP might + equal RP. The dividend size NN must be greater than or equal to + divisor size DN. The most significant limb of the divisor must be + non-zero. The QXN operand must be zero. + + -- Function: mp_limb_t mpn_divrem (mp_limb_t *R1P, mp_size_t QXN, + mp_limb_t *RS2P, mp_size_t RS2N, const mp_limb_t *S3P, + mp_size_t S3N) + [This function is obsolete. Please call 'mpn_tdiv_qr' instead for + best performance.] + + Divide {RS2P, RS2N} by {S3P, S3N}, and write the quotient at R1P, + with the exception of the most significant limb, which is returned. + The remainder replaces the dividend at RS2P; it will be S3N limbs + long (i.e., as many limbs as the divisor). + + In addition to an integer quotient, QXN fraction limbs are + developed, and stored after the integral limbs. For most usages, + QXN will be zero. + + It is required that RS2N is greater than or equal to S3N. It is + required that the most significant bit of the divisor is set. + + If the quotient is not needed, pass RS2P + S3N as R1P. Aside from + that special case, no overlap between arguments is permitted. + + Return the most significant limb of the quotient, either 0 or 1. + + The area at R1P needs to be RS2N - S3N + QXN limbs large. + + -- Function: mp_limb_t mpn_divrem_1 (mp_limb_t *R1P, mp_size_t QXN, + mp_limb_t *S2P, mp_size_t S2N, mp_limb_t S3LIMB) + -- Macro: mp_limb_t mpn_divmod_1 (mp_limb_t *R1P, mp_limb_t *S2P, + mp_size_t S2N, mp_limb_t S3LIMB) + Divide {S2P, S2N} by S3LIMB, and write the quotient at R1P. Return + the remainder. + + The integer quotient is written to {R1P+QXN, S2N} and in addition + QXN fraction limbs are developed and written to {R1P, QXN}. Either + or both S2N and QXN can be zero. For most usages, QXN will be + zero. + + 'mpn_divmod_1' exists for upward source compatibility and is simply + a macro calling 'mpn_divrem_1' with a QXN of 0. + + The areas at R1P and S2P have to be identical or completely + separate, not partially overlapping. + + -- Function: mp_limb_t mpn_divmod (mp_limb_t *R1P, mp_limb_t *RS2P, + mp_size_t RS2N, const mp_limb_t *S3P, mp_size_t S3N) + [This function is obsolete. Please call 'mpn_tdiv_qr' instead for + best performance.] + + -- Function: void mpn_divexact_1 (mp_limb_t * RP, const mp_limb_t * SP, + mp_size_t N, mp_limb_t D) + Divide {SP, N} by D, expecting it to divide exactly, and writing + the result to {RP, N}. If D doesn't divide exactly, the value + written to {RP, N} is undefined. The areas at RP and SP have to be + identical or completely separate, not partially overlapping. + + -- Macro: mp_limb_t mpn_divexact_by3 (mp_limb_t *RP, mp_limb_t *SP, + mp_size_t N) + -- Function: mp_limb_t mpn_divexact_by3c (mp_limb_t *RP, mp_limb_t *SP, + mp_size_t N, mp_limb_t CARRY) + Divide {SP, N} by 3, expecting it to divide exactly, and writing + the result to {RP, N}. If 3 divides exactly, the return value is + zero and the result is the quotient. If not, the return value is + non-zero and the result won't be anything useful. + + 'mpn_divexact_by3c' takes an initial carry parameter, which can be + the return value from a previous call, so a large calculation can + be done piece by piece from low to high. 'mpn_divexact_by3' is + simply a macro calling 'mpn_divexact_by3c' with a 0 carry + parameter. + + These routines use a multiply-by-inverse and will be faster than + 'mpn_divrem_1' on CPUs with fast multiplication but slow division. + + The source a, result q, size n, initial carry i, and return value c + satisfy c*b^n + a-i = 3*q, where b=2^GMP_NUMB_BITS. The return c is + always 0, 1 or 2, and the initial carry i must also be 0, 1 or 2 + (these are both borrows really). When c=0 clearly q=(a-i)/3. When + c!=0, the remainder (a-i) mod 3 is given by 3-c, because b == 1 mod + 3 (when 'mp_bits_per_limb' is even, which is always so currently). + + -- Function: mp_limb_t mpn_mod_1 (const mp_limb_t *S1P, mp_size_t S1N, + mp_limb_t S2LIMB) + Divide {S1P, S1N} by S2LIMB, and return the remainder. S1N can be + zero. + + -- Function: mp_limb_t mpn_lshift (mp_limb_t *RP, const mp_limb_t *SP, + mp_size_t N, unsigned int COUNT) + Shift {SP, N} left by COUNT bits, and write the result to {RP, N}. + The bits shifted out at the left are returned in the least + significant COUNT bits of the return value (the rest of the return + value is zero). + + COUNT must be in the range 1 to mp_bits_per_limb{}-1. The regions + {SP, N} and {RP, N} may overlap, provided RP >= SP. + + This function is written in assembly for most CPUs. + + -- Function: mp_limb_t mpn_rshift (mp_limb_t *RP, const mp_limb_t *SP, + mp_size_t N, unsigned int COUNT) + Shift {SP, N} right by COUNT bits, and write the result to {RP, N}. + The bits shifted out at the right are returned in the most + significant COUNT bits of the return value (the rest of the return + value is zero). + + COUNT must be in the range 1 to mp_bits_per_limb{}-1. The regions + {SP, N} and {RP, N} may overlap, provided RP <= SP. + + This function is written in assembly for most CPUs. + + -- Function: int mpn_cmp (const mp_limb_t *S1P, const mp_limb_t *S2P, + mp_size_t N) + Compare {S1P, N} and {S2P, N} and return a positive value if S1 > + S2, 0 if they are equal, or a negative value if S1 < S2. + + -- Function: int mpn_zero_p (const mp_limb_t *SP, mp_size_t N) + Test {SP, N} and return 1 if the operand is zero, 0 otherwise. + + -- Function: mp_size_t mpn_gcd (mp_limb_t *RP, mp_limb_t *XP, mp_size_t + XN, mp_limb_t *YP, mp_size_t YN) + Set {RP, RETVAL} to the greatest common divisor of {XP, XN} and + {YP, YN}. The result can be up to YN limbs, the return value is + the actual number produced. Both source operands are destroyed. + + It is required that XN >= YN > 0, the most significant limb of {YP, + YN} must be non-zero, and at least one of the two operands must be + odd. No overlap is permitted between {XP, XN} and {YP, YN}. + + -- Function: mp_limb_t mpn_gcd_1 (const mp_limb_t *XP, mp_size_t XN, + mp_limb_t YLIMB) + Return the greatest common divisor of {XP, XN} and YLIMB. Both + operands must be non-zero. + + -- Function: mp_size_t mpn_gcdext (mp_limb_t *GP, mp_limb_t *SP, + mp_size_t *SN, mp_limb_t *UP, mp_size_t UN, mp_limb_t *VP, + mp_size_t VN) + Let U be defined by {UP, UN} and let V be defined by {VP, VN}. + + Compute the greatest common divisor G of U and V. Compute a + cofactor S such that G = US + VT. The second cofactor T is not + computed but can easily be obtained from (G - U*S) / V (the + division will be exact). It is required that UN >= VN > 0, and the + most significant limb of {VP, VN} must be non-zero. + + S satisfies S = 1 or abs(S) < V / (2 G). S = 0 if and only if V + divides U (i.e., G = V). + + Store G at GP and let the return value define its limb count. + Store S at SP and let |*SN| define its limb count. S can be + negative; when this happens *SN will be negative. The area at GP + should have room for VN limbs and the area at SP should have room + for VN+1 limbs. + + Both source operands are destroyed. + + Compatibility notes: GMP 4.3.0 and 4.3.1 defined S less strictly. + Earlier as well as later GMP releases define S as described here. + GMP releases before GMP 4.3.0 required additional space for both + input and output areas. More precisely, the areas {UP, UN+1} and + {VP, VN+1} were destroyed (i.e. the operands plus an extra limb + past the end of each), and the areas pointed to by GP and SP should + each have room for UN+1 limbs. + + -- Function: mp_size_t mpn_sqrtrem (mp_limb_t *R1P, mp_limb_t *R2P, + const mp_limb_t *SP, mp_size_t N) + Compute the square root of {SP, N} and put the result at {R1P, + ceil(N/2)} and the remainder at {R2P, RETVAL}. R2P needs space for + N limbs, but the return value indicates how many are produced. + + The most significant limb of {SP, N} must be non-zero. The areas + {R1P, ceil(N/2)} and {SP, N} must be completely separate. The + areas {R2P, N} and {SP, N} must be either identical or completely + separate. + + If the remainder is not wanted then R2P can be 'NULL', and in this + case the return value is zero or non-zero according to whether the + remainder would have been zero or non-zero. + + A return value of zero indicates a perfect square. See also + 'mpn_perfect_square_p'. + + -- Function: size_t mpn_sizeinbase (const mp_limb_t *XP, mp_size_t N, + int BASE) + Return the size of {XP,N} measured in number of digits in the given + BASE. BASE can vary from 2 to 62. Requires N > 0 and XP[N-1] > 0. + The result will be either exact or 1 too big. If BASE is a power + of 2, the result is always exact. + + -- Function: mp_size_t mpn_get_str (unsigned char *STR, int BASE, + mp_limb_t *S1P, mp_size_t S1N) + Convert {S1P, S1N} to a raw unsigned char array at STR in base + BASE, and return the number of characters produced. There may be + leading zeros in the string. The string is not in ASCII; to + convert it to printable format, add the ASCII codes for '0' or 'A', + depending on the base and range. BASE can vary from 2 to 256. + + The most significant limb of the input {S1P, S1N} must be non-zero. + The input {S1P, S1N} is clobbered, except when BASE is a power of + 2, in which case it's unchanged. + + The area at STR has to have space for the largest possible number + represented by a S1N long limb array, plus one extra character. + + -- Function: mp_size_t mpn_set_str (mp_limb_t *RP, const unsigned char + *STR, size_t STRSIZE, int BASE) + Convert bytes {STR,STRSIZE} in the given BASE to limbs at RP. + + STR[0] is the most significant input byte and STR[STRSIZE-1] is the + least significant input byte. Each byte should be a value in the + range 0 to BASE-1, not an ASCII character. BASE can vary from 2 to + 256. + + The converted value is {RP,RN} where RN is the return value. If + the most significant input byte STR[0] is non-zero, then RP[RN-1] + will be non-zero, else RP[RN-1] and some number of subsequent limbs + may be zero. + + The area at RP has to have space for the largest possible number + with STRSIZE digits in the chosen base, plus one extra limb. + + The input must have at least one byte, and no overlap is permitted + between {STR,STRSIZE} and the result at RP. + + -- Function: mp_bitcnt_t mpn_scan0 (const mp_limb_t *S1P, mp_bitcnt_t + BIT) + Scan S1P from bit position BIT for the next clear bit. + + It is required that there be a clear bit within the area at S1P at + or beyond bit position BIT, so that the function has something to + return. + + -- Function: mp_bitcnt_t mpn_scan1 (const mp_limb_t *S1P, mp_bitcnt_t + BIT) + Scan S1P from bit position BIT for the next set bit. + + It is required that there be a set bit within the area at S1P at or + beyond bit position BIT, so that the function has something to + return. + + -- Function: void mpn_random (mp_limb_t *R1P, mp_size_t R1N) + -- Function: void mpn_random2 (mp_limb_t *R1P, mp_size_t R1N) + Generate a random number of length R1N and store it at R1P. The + most significant limb is always non-zero. 'mpn_random' generates + uniformly distributed limb data, 'mpn_random2' generates long + strings of zeros and ones in the binary representation. + + 'mpn_random2' is intended for testing the correctness of the 'mpn' + routines. + + -- Function: mp_bitcnt_t mpn_popcount (const mp_limb_t *S1P, mp_size_t + N) + Count the number of set bits in {S1P, N}. + + -- Function: mp_bitcnt_t mpn_hamdist (const mp_limb_t *S1P, const + mp_limb_t *S2P, mp_size_t N) + Compute the hamming distance between {S1P, N} and {S2P, N}, which + is the number of bit positions where the two operands have + different bit values. + + -- Function: int mpn_perfect_square_p (const mp_limb_t *S1P, mp_size_t + N) + Return non-zero iff {S1P, N} is a perfect square. The most + significant limb of the input {S1P, N} must be non-zero. + + -- Function: void mpn_and_n (mp_limb_t *RP, const mp_limb_t *S1P, const + mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical and of {S1P, N} and {S2P, N}, and write + the result to {RP, N}. + + -- Function: void mpn_ior_n (mp_limb_t *RP, const mp_limb_t *S1P, const + mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, + and write the result to {RP, N}. + + -- Function: void mpn_xor_n (mp_limb_t *RP, const mp_limb_t *S1P, const + mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, + and write the result to {RP, N}. + + -- Function: void mpn_andn_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical and of {S1P, N} and the bitwise + complement of {S2P, N}, and write the result to {RP, N}. + + -- Function: void mpn_iorn_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical inclusive or of {S1P, N} and the + bitwise complement of {S2P, N}, and write the result to {RP, N}. + + -- Function: void mpn_nand_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical and of {S1P, N} and {S2P, N}, and write + the bitwise complement of the result to {RP, N}. + + -- Function: void mpn_nior_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, + and write the bitwise complement of the result to {RP, N}. + + -- Function: void mpn_xnor_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, + and write the bitwise complement of the result to {RP, N}. + + -- Function: void mpn_com (mp_limb_t *RP, const mp_limb_t *SP, + mp_size_t N) + Perform the bitwise complement of {SP, N}, and write the result to + {RP, N}. + + -- Function: void mpn_copyi (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N) + Copy from {S1P, N} to {RP, N}, increasingly. + + -- Function: void mpn_copyd (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N) + Copy from {S1P, N} to {RP, N}, decreasingly. + + -- Function: void mpn_zero (mp_limb_t *RP, mp_size_t N) + Zero {RP, N}. + + +8.1 Low-level functions for cryptography +======================================== + +The functions prefixed with 'mpn_sec_' and 'mpn_cnd_' are designed to +perform the exact same low-level operations and have the same cache +access patterns for any two same-size arguments, assuming that function +arguments are placed at the same position and that the machine state is +identical upon function entry. These functions are intended for +cryptographic purposes, where resilience to side-channel attacks is +desired. + + These functions are less efficient than their "leaky" counterparts; +their performance for operands of the sizes typically used for +cryptographic applications is between 15% and 100% worse. For larger +operands, these functions might be inadequate, since they rely on +asymptotically elementary algorithms. + + These functions do not make any explicit allocations. Those of these +functions that need scratch space accept a scratch space operand. This +convention allows callers to keep sensitive data in designated memory +areas. Note however that compilers may choose to spill scalar values +used within these functions to their stack frame and that such scalars +may contain sensitive data. + + In addition to these specially crafted functions, the following 'mpn' +functions are naturally side-channel resistant: 'mpn_add_n', +'mpn_sub_n', 'mpn_lshift', 'mpn_rshift', 'mpn_zero', 'mpn_copyi', +'mpn_copyd', 'mpn_com', and the logical function ('mpn_and_n', etc). + + There are some exceptions from the side-channel resilience: (1) Some +assembly implementations of 'mpn_lshift' identify shift-by-one as a +special case. This is a problem iff the shift count is a function of +sensitive data. (2) Alpha ev6 and Pentium4 using 64-bit limbs have +leaky 'mpn_add_n' and 'mpn_sub_n'. (3) Alpha ev6 has a leaky +'mpn_mul_1' which also makes 'mpn_sec_mul' on those systems unsafe. + + -- Function: mp_limb_t mpn_cnd_add_n (mp_limb_t CND, mp_limb_t *RP, + const mp_limb_t *S1P, const mp_limb_t *S2P, mp_size_t N) + -- Function: mp_limb_t mpn_cnd_sub_n (mp_limb_t CND, mp_limb_t *RP, + const mp_limb_t *S1P, const mp_limb_t *S2P, mp_size_t N) + These functions do conditional addition and subtraction. If CND is + non-zero, they produce the same result as a regular 'mpn_add_n' or + 'mpn_sub_n', and if CND is zero, they copy {S1P,N} to the result + area and return zero. The functions are designed to have timing + and memory access patterns depending only on size and location of + the data areas, but independent of the condition CND. Like for + 'mpn_add_n' and 'mpn_sub_n', on most machines, the timing will also + be independent of the actual limb values. + + -- Function: mp_limb_t mpn_sec_add_1 (mp_limb_t *RP, const mp_limb_t + *AP, mp_size_t N, mp_limb_t B, mp_limb_t *TP) + -- Function: mp_limb_t mpn_sec_sub_1 (mp_limb_t *RP, const mp_limb_t + *AP, mp_size_t N, mp_limb_t B, mp_limb_t *TP) + Set R to A + B or A - B, respectively, where R = {RP,N}, A = + {AP,N}, and B is a single limb. Returns carry. + + These functions take O(N) time, unlike the leaky functions + 'mpn_add_1' which are O(1) on average. They require scratch space + of 'mpn_sec_add_1_itch(N)' and 'mpn_sec_sub_1_itch(N)' limbs, + respectively, to be passed in the TP parameter. The scratch space + requirements are guaranteed to be at most N limbs, and increase + monotonously in the operand size. + + -- Function: void mpn_cnd_swap (mp_limb_t CND, volatile mp_limb_t *AP, + volatile mp_limb_t *BP, mp_size_t N) + If CND is non-zero, swaps the contents of the areas {AP,N} and + {BP,N}. Otherwise, the areas are left unmodified. Implemented + using logical operations on the limbs, with the same memory + accesses independent of the value of CND. + + -- Function: void mpn_sec_mul (mp_limb_t *RP, const mp_limb_t *AP, + mp_size_t AN, const mp_limb_t *BP, mp_size_t BN, mp_limb_t + *TP) + -- Function: mp_size_t mpn_sec_mul_itch (mp_size_t AN, mp_size_t BN) + Set R to A * B, where A = {AP,AN}, B = {BP,BN}, and R = {RP,AN+BN}. + + It is required that AN >= BN > 0. + + No overlapping between R and the input operands is allowed. For A + = B, use 'mpn_sec_sqr' for optimal performance. + + This function requires scratch space of 'mpn_sec_mul_itch(AN, BN)' + limbs to be passed in the TP parameter. The scratch space + requirements are guaranteed to increase monotonously in the operand + sizes. + + -- Function: void mpn_sec_sqr (mp_limb_t *RP, const mp_limb_t *AP, + mp_size_t AN, mp_limb_t *TP) + -- Function: mp_size_t mpn_sec_sqr_itch (mp_size_t AN) + Set R to A^2, where A = {AP,AN}, and R = {RP,2AN}. + + It is required that AN > 0. + + No overlapping between R and the input operands is allowed. + + This function requires scratch space of 'mpn_sec_sqr_itch(AN)' + limbs to be passed in the TP parameter. The scratch space + requirements are guaranteed to increase monotonously in the operand + size. + + -- Function: void mpn_sec_powm (mp_limb_t *RP, const mp_limb_t *BP, + mp_size_t BN, const mp_limb_t *EP, mp_bitcnt_t ENB, const + mp_limb_t *MP, mp_size_t N, mp_limb_t *TP) + -- Function: mp_size_t mpn_sec_powm_itch (mp_size_t BN, mp_bitcnt_t + ENB, size_t N) + Set R to (B raised to E) modulo M, where R = {RP,N}, M = {MP,N}, + and E = {EP,ceil(ENB / 'GMP\_NUMB\_BITS')}. + + It is required that B > 0, that M > 0 is odd, and that E < 2^ENB, + with ENB > 0. + + No overlapping between R and the input operands is allowed. + + This function requires scratch space of 'mpn_sec_powm_itch(BN, ENB, + N)' limbs to be passed in the TP parameter. The scratch space + requirements are guaranteed to increase monotonously in the operand + sizes. + + -- Function: void mpn_sec_tabselect (mp_limb_t *RP, const mp_limb_t + *TAB, mp_size_t N, mp_size_t NENTS, mp_size_t WHICH) + Select entry WHICH from table TAB, which has NENTS entries, each N + limbs. Store the selected entry at RP. + + This function reads the entire table to avoid side-channel + information leaks. + + -- Function: mp_limb_t mpn_sec_div_qr (mp_limb_t *QP, mp_limb_t *NP, + mp_size_t NN, const mp_limb_t *DP, mp_size_t DN, mp_limb_t + *TP) + -- Function: mp_size_t mpn_sec_div_qr_itch (mp_size_t NN, mp_size_t DN) + + Set Q to the truncated quotient N / D and R to N modulo D, where N + = {NP,NN}, D = {DP,DN}, Q's most significant limb is the function + return value and the remaining limbs are {QP,NN-DN}, and R = + {NP,DN}. + + It is required that NN >= DN >= 1, and that DP[DN-1] != 0. This + does not imply that N >= D since N might be zero-padded. + + Note the overlapping between N and R. No other operand overlapping + is allowed. The entire space occupied by N is overwritten. + + This function requires scratch space of 'mpn_sec_div_qr_itch(NN, + DN)' limbs to be passed in the TP parameter. + + -- Function: void mpn_sec_div_r (mp_limb_t *NP, mp_size_t NN, const + mp_limb_t *DP, mp_size_t DN, mp_limb_t *TP) + -- Function: mp_size_t mpn_sec_div_r_itch (mp_size_t NN, mp_size_t DN) + + Set R to N modulo D, where N = {NP,NN}, D = {DP,DN}, and R = + {NP,DN}. + + It is required that NN >= DN >= 1, and that DP[DN-1] != 0. This + does not imply that N >= D since N might be zero-padded. + + Note the overlapping between N and R. No other operand overlapping + is allowed. The entire space occupied by N is overwritten. + + This function requires scratch space of 'mpn_sec_div_r_itch(NN, + DN)' limbs to be passed in the TP parameter. + + -- Function: int mpn_sec_invert (mp_limb_t *RP, mp_limb_t *AP, const + mp_limb_t *MP, mp_size_t N, mp_bitcnt_t NBCNT, mp_limb_t *TP) + -- Function: mp_size_t mpn_sec_invert_itch (mp_size_t N) + Set R to the inverse of A modulo M, where R = {RP,N}, A = {AP,N}, + and M = {MP,N}. *This function's interface is preliminary.* + + If an inverse exists, return 1, otherwise return 0 and leave R + undefined. In either case, the input A is destroyed. + + It is required that M is odd, and that NBCNT >= ceil(\log(A+1)) + + ceil(\log(M+1)). A safe choice is NBCNT = 2 * N * GMP_NUMB_BITS, + but a smaller value might improve performance if M or A are known + to have leading zero bits. + + This function requires scratch space of 'mpn_sec_invert_itch(N)' + limbs to be passed in the TP parameter. + + +8.2 Nails +========= + +*Everything in this section is highly experimental and may disappear or +be subject to incompatible changes in a future version of GMP.* + + Nails are an experimental feature whereby a few bits are left unused +at the top of each 'mp_limb_t'. This can significantly improve carry +handling on some processors. + + All the 'mpn' functions accepting limb data will expect the nail bits +to be zero on entry, and will return data with the nails similarly all +zero. This applies both to limb vectors and to single limb arguments. + + Nails can be enabled by configuring with '--enable-nails'. By +default the number of bits will be chosen according to what suits the +host processor, but a particular number can be selected with +'--enable-nails=N'. + + At the mpn level, a nail build is neither source nor binary +compatible with a non-nail build, strictly speaking. But programs +acting on limbs only through the mpn functions are likely to work +equally well with either build, and judicious use of the definitions +below should make any program compatible with either build, at the +source level. + + For the higher level routines, meaning 'mpz' etc, a nail build should +be fully source and binary compatible with a non-nail build. + + -- Macro: GMP_NAIL_BITS + -- Macro: GMP_NUMB_BITS + -- Macro: GMP_LIMB_BITS + 'GMP_NAIL_BITS' is the number of nail bits, or 0 when nails are not + in use. 'GMP_NUMB_BITS' is the number of data bits in a limb. + 'GMP_LIMB_BITS' is the total number of bits in an 'mp_limb_t'. In + all cases + + GMP_LIMB_BITS == GMP_NAIL_BITS + GMP_NUMB_BITS + + -- Macro: GMP_NAIL_MASK + -- Macro: GMP_NUMB_MASK + Bit masks for the nail and number parts of a limb. 'GMP_NAIL_MASK' + is 0 when nails are not in use. + + 'GMP_NAIL_MASK' is not often needed, since the nail part can be + obtained with 'x >> GMP_NUMB_BITS', and that means one less large + constant, which can help various RISC chips. + + -- Macro: GMP_NUMB_MAX + The maximum value that can be stored in the number part of a limb. + This is the same as 'GMP_NUMB_MASK', but can be used for clarity + when doing comparisons rather than bit-wise operations. + + The term "nails" comes from finger or toe nails, which are at the +ends of a limb (arm or leg). "numb" is short for number, but is also +how the developers felt after trying for a long time to come up with +sensible names for these things. + + In the future (the distant future most likely) a non-zero nail might +be permitted, giving non-unique representations for numbers in a limb +vector. This would help vector processors since carries would only ever +need to propagate one or two limbs. + + +File: gmp.info, Node: Random Number Functions, Next: Formatted Output, Prev: Low-level Functions, Up: Top + +9 Random Number Functions +************************* + +Sequences of pseudo-random numbers in GMP are generated using a variable +of type 'gmp_randstate_t', which holds an algorithm selection and a +current state. Such a variable must be initialized by a call to one of +the 'gmp_randinit' functions, and can be seeded with one of the +'gmp_randseed' functions. + + The functions actually generating random numbers are described in +*note Integer Random Numbers::, and *note Miscellaneous Float +Functions::. + + The older style random number functions don't accept a +'gmp_randstate_t' parameter but instead share a global variable of that +type. They use a default algorithm and are currently not seeded (though +perhaps that will change in the future). The new functions accepting a +'gmp_randstate_t' are recommended for applications that care about +randomness. + +* Menu: + +* Random State Initialization:: +* Random State Seeding:: +* Random State Miscellaneous:: + + +File: gmp.info, Node: Random State Initialization, Next: Random State Seeding, Prev: Random Number Functions, Up: Random Number Functions + +9.1 Random State Initialization +=============================== + + -- Function: void gmp_randinit_default (gmp_randstate_t STATE) + Initialize STATE with a default algorithm. This will be a + compromise between speed and randomness, and is recommended for + applications with no special requirements. Currently this is + 'gmp_randinit_mt'. + + -- Function: void gmp_randinit_mt (gmp_randstate_t STATE) + Initialize STATE for a Mersenne Twister algorithm. This algorithm + is fast and has good randomness properties. + + -- Function: void gmp_randinit_lc_2exp (gmp_randstate_t STATE, const + mpz_t A, unsigned long C, mp_bitcnt_t M2EXP) + Initialize STATE with a linear congruential algorithm X = (A*X + C) + mod 2^M2EXP. + + The low bits of X in this algorithm are not very random. The least + significant bit will have a period no more than 2, and the second + bit no more than 4, etc. For this reason only the high half of + each X is actually used. + + When a random number of more than M2EXP/2 bits is to be generated, + multiple iterations of the recurrence are used and the results + concatenated. + + -- Function: int gmp_randinit_lc_2exp_size (gmp_randstate_t STATE, + mp_bitcnt_t SIZE) + Initialize STATE for a linear congruential algorithm as per + 'gmp_randinit_lc_2exp'. A, C and M2EXP are selected from a table, + chosen so that SIZE bits (or more) of each X will be used, i.e. + M2EXP/2 >= SIZE. + + If successful the return value is non-zero. If SIZE is bigger than + the table data provides then the return value is zero. The maximum + SIZE currently supported is 128. + + -- Function: void gmp_randinit_set (gmp_randstate_t ROP, + gmp_randstate_t OP) + Initialize ROP with a copy of the algorithm and state from OP. + + -- Function: void gmp_randinit (gmp_randstate_t STATE, + gmp_randalg_t ALG, ...) + *This function is obsolete.* + + Initialize STATE with an algorithm selected by ALG. The only + choice is 'GMP_RAND_ALG_LC', which is 'gmp_randinit_lc_2exp_size' + described above. A third parameter of type 'unsigned long' is + required, this is the SIZE for that function. + 'GMP_RAND_ALG_DEFAULT' and 0 are the same as 'GMP_RAND_ALG_LC'. + + 'gmp_randinit' sets bits in the global variable 'gmp_errno' to + indicate an error. 'GMP_ERROR_UNSUPPORTED_ARGUMENT' if ALG is + unsupported, or 'GMP_ERROR_INVALID_ARGUMENT' if the SIZE parameter + is too big. It may be noted this error reporting is not thread + safe (a good reason to use 'gmp_randinit_lc_2exp_size' instead). + + -- Function: void gmp_randclear (gmp_randstate_t STATE) + Free all memory occupied by STATE. + + +File: gmp.info, Node: Random State Seeding, Next: Random State Miscellaneous, Prev: Random State Initialization, Up: Random Number Functions + +9.2 Random State Seeding +======================== + + -- Function: void gmp_randseed (gmp_randstate_t STATE, const mpz_t + SEED) + -- Function: void gmp_randseed_ui (gmp_randstate_t STATE, + unsigned long int SEED) + Set an initial seed value into STATE. + + The size of a seed determines how many different sequences of + random numbers it's possible to generate. The "quality" of the + seed is the randomness of a given seed compared to the previous + seed used, and this affects the randomness of separate number + sequences. The method for choosing a seed is critical if the + generated numbers are to be used for important applications, such + as generating cryptographic keys. + + Traditionally the system time has been used to seed, but care needs + to be taken with this. If an application seeds often and the + resolution of the system clock is low, then the same sequence of + numbers might be repeated. Also, the system time is quite easy to + guess, so if unpredictability is required then it should definitely + not be the only source for the seed value. On some systems there's + a special device '/dev/random' which provides random data better + suited for use as a seed. + + +File: gmp.info, Node: Random State Miscellaneous, Prev: Random State Seeding, Up: Random Number Functions + +9.3 Random State Miscellaneous +============================== + + -- Function: unsigned long gmp_urandomb_ui (gmp_randstate_t STATE, + unsigned long N) + Return a uniformly distributed random number of N bits, i.e. in the + range 0 to 2^N-1 inclusive. N must be less than or equal to the + number of bits in an 'unsigned long'. + + -- Function: unsigned long gmp_urandomm_ui (gmp_randstate_t STATE, + unsigned long N) + Return a uniformly distributed random number in the range 0 to N-1, + inclusive. + + +File: gmp.info, Node: Formatted Output, Next: Formatted Input, Prev: Random Number Functions, Up: Top + +10 Formatted Output +******************* + +* Menu: + +* Formatted Output Strings:: +* Formatted Output Functions:: +* C++ Formatted Output:: + + +File: gmp.info, Node: Formatted Output Strings, Next: Formatted Output Functions, Prev: Formatted Output, Up: Formatted Output + +10.1 Format Strings +=================== + +'gmp_printf' and friends accept format strings similar to the standard C +'printf' (*note Formatted Output: (libc)Formatted Output.). A format +specification is of the form + + % [flags] [width] [.[precision]] [type] conv + + GMP adds types 'Z', 'Q' and 'F' for 'mpz_t', 'mpq_t' and 'mpf_t' +respectively, 'M' for 'mp_limb_t', and 'N' for an 'mp_limb_t' array. +'Z', 'Q', 'M' and 'N' behave like integers. 'Q' will print a '/' and a +denominator, if needed. 'F' behaves like a float. For example, + + mpz_t z; + gmp_printf ("%s is an mpz %Zd\n", "here", z); + + mpq_t q; + gmp_printf ("a hex rational: %#40Qx\n", q); + + mpf_t f; + int n; + gmp_printf ("fixed point mpf %.*Ff with %d digits\n", n, f, n); + + mp_limb_t l; + gmp_printf ("limb %Mu\n", l); + + const mp_limb_t *ptr; + mp_size_t size; + gmp_printf ("limb array %Nx\n", ptr, size); + + For 'N' the limbs are expected least significant first, as per the +'mpn' functions (*note Low-level Functions::). A negative size can be +given to print the value as a negative. + + All the standard C 'printf' types behave the same as the C library +'printf', and can be freely intermixed with the GMP extensions. In the +current implementation the standard parts of the format string are +simply handed to 'printf' and only the GMP extensions handled directly. + + The flags accepted are as follows. GLIBC style ' is only for the +standard C types (not the GMP types), and only if the C library supports +it. + + 0 pad with zeros (rather than spaces) + # show the base with '0x', '0X' or '0' + + always show a sign + (space) show a space or a '-' sign + ' group digits, GLIBC style (not GMP + types) + + The optional width and precision can be given as a number within the +format string, or as a '*' to take an extra parameter of type 'int', the +same as the standard 'printf'. + + The standard types accepted are as follows. 'h' and 'l' are +portable, the rest will depend on the compiler (or include files) for +the type and the C library for the output. + + h short + hh char + j intmax_t or uintmax_t + l long or wchar_t + ll long long + L long double + q quad_t or u_quad_t + t ptrdiff_t + z size_t + +The GMP types are + + F mpf_t, float conversions + Q mpq_t, integer conversions + M mp_limb_t, integer conversions + N mp_limb_t array, integer conversions + Z mpz_t, integer conversions + + The conversions accepted are as follows. 'a' and 'A' are always +supported for 'mpf_t' but depend on the C library for standard C float +types. 'm' and 'p' depend on the C library. + + a A hex floats, C99 style + c character + d decimal integer + e E scientific format float + f fixed point float + i same as d + g G fixed or scientific float + m 'strerror' string, GLIBC style + n store characters written so far + o octal integer + p pointer + s string + u unsigned integer + x X hex integer + + 'o', 'x' and 'X' are unsigned for the standard C types, but for types +'Z', 'Q' and 'N' they are signed. 'u' is not meaningful for 'Z', 'Q' +and 'N'. + + 'M' is a proxy for the C library 'l' or 'L', according to the size of +'mp_limb_t'. Unsigned conversions will be usual, but a signed +conversion can be used and will interpret the value as a two's +complement negative. + + 'n' can be used with any type, even the GMP types. + + Other types or conversions that might be accepted by the C library +'printf' cannot be used through 'gmp_printf', this includes for instance +extensions registered with GLIBC 'register_printf_function'. Also +currently there's no support for POSIX '$' style numbered arguments +(perhaps this will be added in the future). + + The precision field has its usual meaning for integer 'Z' and float +'F' types, but is currently undefined for 'Q' and should not be used +with that. + + 'mpf_t' conversions only ever generate as many digits as can be +accurately represented by the operand, the same as 'mpf_get_str' does. +Zeros will be used if necessary to pad to the requested precision. This +happens even for an 'f' conversion of an 'mpf_t' which is an integer, +for instance 2^1024 in an 'mpf_t' of 128 bits precision will only +produce about 40 digits, then pad with zeros to the decimal point. An +empty precision field like '%.Fe' or '%.Ff' can be used to specifically +request just the significant digits. Without any dot and thus no +precision field, a precision value of 6 will be used. Note that these +rules mean that '%Ff', '%.Ff', and '%.0Ff' will all be different. + + The decimal point character (or string) is taken from the current +locale settings on systems which provide 'localeconv' (*note Locales and +Internationalization: (libc)Locales.). The C library will normally do +the same for standard float output. + + The format string is only interpreted as plain 'char's, multibyte +characters are not recognised. Perhaps this will change in the future. + + +File: gmp.info, Node: Formatted Output Functions, Next: C++ Formatted Output, Prev: Formatted Output Strings, Up: Formatted Output + +10.2 Functions +============== + +Each of the following functions is similar to the corresponding C +library function. The basic 'printf' forms take a variable argument +list. The 'vprintf' forms take an argument pointer, see *note Variadic +Functions: (libc)Variadic Functions, or 'man 3 va_start'. + + It should be emphasised that if a format string is invalid, or the +arguments don't match what the format specifies, then the behaviour of +any of these functions will be unpredictable. GCC format string +checking is not available, since it doesn't recognise the GMP +extensions. + + The file based functions 'gmp_printf' and 'gmp_fprintf' will return +-1 to indicate a write error. Output is not "atomic", so partial output +may be produced if a write error occurs. All the functions can return +-1 if the C library 'printf' variant in use returns -1, but this +shouldn't normally occur. + + -- Function: int gmp_printf (const char *FMT, ...) + -- Function: int gmp_vprintf (const char *FMT, va_list AP) + Print to the standard output 'stdout'. Return the number of + characters written, or -1 if an error occurred. + + -- Function: int gmp_fprintf (FILE *FP, const char *FMT, ...) + -- Function: int gmp_vfprintf (FILE *FP, const char *FMT, va_list AP) + Print to the stream FP. Return the number of characters written, + or -1 if an error occurred. + + -- Function: int gmp_sprintf (char *BUF, const char *FMT, ...) + -- Function: int gmp_vsprintf (char *BUF, const char *FMT, va_list AP) + Form a null-terminated string in BUF. Return the number of + characters written, excluding the terminating null. + + No overlap is permitted between the space at BUF and the string + FMT. + + These functions are not recommended, since there's no protection + against exceeding the space available at BUF. + + -- Function: int gmp_snprintf (char *BUF, size_t SIZE, const char *FMT, + ...) + -- Function: int gmp_vsnprintf (char *BUF, size_t SIZE, const char + *FMT, va_list AP) + Form a null-terminated string in BUF. No more than SIZE bytes will + be written. To get the full output, SIZE must be enough for the + string and null-terminator. + + The return value is the total number of characters which ought to + have been produced, excluding the terminating null. If RETVAL >= + SIZE then the actual output has been truncated to the first SIZE-1 + characters, and a null appended. + + No overlap is permitted between the region {BUF,SIZE} and the FMT + string. + + Notice the return value is in ISO C99 'snprintf' style. This is so + even if the C library 'vsnprintf' is the older GLIBC 2.0.x style. + + -- Function: int gmp_asprintf (char **PP, const char *FMT, ...) + -- Function: int gmp_vasprintf (char **PP, const char *FMT, va_list AP) + Form a null-terminated string in a block of memory obtained from + the current memory allocation function (*note Custom Allocation::). + The block will be the size of the string and null-terminator. The + address of the block is stored to *PP. The return value is the + number of characters produced, excluding the null-terminator. + + Unlike the C library 'asprintf', 'gmp_asprintf' doesn't return -1 + if there's no more memory available, it lets the current allocation + function handle that. + + -- Function: int gmp_obstack_printf (struct obstack *OB, const char + *FMT, ...) + -- Function: int gmp_obstack_vprintf (struct obstack *OB, const char + *FMT, va_list AP) + Append to the current object in OB. The return value is the number + of characters written. A null-terminator is not written. + + FMT cannot be within the current object in OB, since that object + might move as it grows. + + These functions are available only when the C library provides the + obstack feature, which probably means only on GNU systems, see + *note Obstacks: (libc)Obstacks. + + +File: gmp.info, Node: C++ Formatted Output, Prev: Formatted Output Functions, Up: Formatted Output + +10.3 C++ Formatted Output +========================= + +The following functions are provided in 'libgmpxx' (*note Headers and +Libraries::), which is built if C++ support is enabled (*note Build +Options::). Prototypes are available from ''. + + -- Function: ostream& operator<< (ostream& STREAM, const mpz_t OP) + Print OP to STREAM, using its 'ios' formatting settings. + 'ios::width' is reset to 0 after output, the same as the standard + 'ostream operator<<' routines do. + + In hex or octal, OP is printed as a signed number, the same as for + decimal. This is unlike the standard 'operator<<' routines on + 'int' etc, which instead give two's complement. + + -- Function: ostream& operator<< (ostream& STREAM, const mpq_t OP) + Print OP to STREAM, using its 'ios' formatting settings. + 'ios::width' is reset to 0 after output, the same as the standard + 'ostream operator<<' routines do. + + Output will be a fraction like '5/9', or if the denominator is 1 + then just a plain integer like '123'. + + In hex or octal, OP is printed as a signed value, the same as for + decimal. If 'ios::showbase' is set then a base indicator is shown + on both the numerator and denominator (if the denominator is + required). + + -- Function: ostream& operator<< (ostream& STREAM, const mpf_t OP) + Print OP to STREAM, using its 'ios' formatting settings. + 'ios::width' is reset to 0 after output, the same as the standard + 'ostream operator<<' routines do. + + The decimal point follows the standard library float 'operator<<', + which on recent systems means the 'std::locale' imbued on STREAM. + + Hex and octal are supported, unlike the standard 'operator<<' on + 'double'. The mantissa will be in hex or octal, the exponent will + be in decimal. For hex the exponent delimiter is an '@'. This is + as per 'mpf_out_str'. + + 'ios::showbase' is supported, and will put a base on the mantissa, + for example hex '0x1.8' or '0x0.8', or octal '01.4' or '00.4'. + This last form is slightly strange, but at least differentiates + itself from decimal. + + These operators mean that GMP types can be printed in the usual C++ +way, for example, + + mpz_t z; + int n; + ... + cout << "iteration " << n << " value " << z << "\n"; + + But note that 'ostream' output (and 'istream' input, *note C++ +Formatted Input::) is the only overloading available for the GMP types +and that for instance using '+' with an 'mpz_t' will have unpredictable +results. For classes with overloading, see *note C++ Class Interface::. + + +File: gmp.info, Node: Formatted Input, Next: C++ Class Interface, Prev: Formatted Output, Up: Top + +11 Formatted Input +****************** + +* Menu: + +* Formatted Input Strings:: +* Formatted Input Functions:: +* C++ Formatted Input:: + + +File: gmp.info, Node: Formatted Input Strings, Next: Formatted Input Functions, Prev: Formatted Input, Up: Formatted Input + +11.1 Formatted Input Strings +============================ + +'gmp_scanf' and friends accept format strings similar to the standard C +'scanf' (*note Formatted Input: (libc)Formatted Input.). A format +specification is of the form + + % [flags] [width] [type] conv + + GMP adds types 'Z', 'Q' and 'F' for 'mpz_t', 'mpq_t' and 'mpf_t' +respectively. 'Z' and 'Q' behave like integers. 'Q' will read a '/' +and a denominator, if present. 'F' behaves like a float. + + GMP variables don't require an '&' when passed to 'gmp_scanf', since +they're already "call-by-reference". For example, + + /* to read say "a(5) = 1234" */ + int n; + mpz_t z; + gmp_scanf ("a(%d) = %Zd\n", &n, z); + + mpq_t q1, q2; + gmp_sscanf ("0377 + 0x10/0x11", "%Qi + %Qi", q1, q2); + + /* to read say "topleft (1.55,-2.66)" */ + mpf_t x, y; + char buf[32]; + gmp_scanf ("%31s (%Ff,%Ff)", buf, x, y); + + All the standard C 'scanf' types behave the same as in the C library +'scanf', and can be freely intermixed with the GMP extensions. In the +current implementation the standard parts of the format string are +simply handed to 'scanf' and only the GMP extensions handled directly. + + The flags accepted are as follows. 'a' and ''' will depend on +support from the C library, and ''' cannot be used with GMP types. + + * read but don't store + a allocate a buffer (string conversions) + ' grouped digits, GLIBC style (not GMP + types) + + The standard types accepted are as follows. 'h' and 'l' are +portable, the rest will depend on the compiler (or include files) for +the type and the C library for the input. + + h short + hh char + j intmax_t or uintmax_t + l long int, double or wchar_t + ll long long + L long double + q quad_t or u_quad_t + t ptrdiff_t + z size_t + +The GMP types are + + F mpf_t, float conversions + Q mpq_t, integer conversions + Z mpz_t, integer conversions + + The conversions accepted are as follows. 'p' and '[' will depend on +support from the C library, the rest are standard. + + c character or characters + d decimal integer + e E f g float + G + i integer with base indicator + n characters read so far + o octal integer + p pointer + s string of non-whitespace characters + u decimal integer + x X hex integer + [ string of characters in a set + + 'e', 'E', 'f', 'g' and 'G' are identical, they all read either fixed +point or scientific format, and either upper or lower case 'e' for the +exponent in scientific format. + + C99 style hex float format ('printf %a', *note Formatted Output +Strings::) is always accepted for 'mpf_t', but for the standard float +types it will depend on the C library. + + 'x' and 'X' are identical, both accept both upper and lower case +hexadecimal. + + 'o', 'u', 'x' and 'X' all read positive or negative values. For the +standard C types these are described as "unsigned" conversions, but that +merely affects certain overflow handling, negatives are still allowed +(per 'strtoul', *note Parsing of Integers: (libc)Parsing of Integers.). +For GMP types there are no overflows, so 'd' and 'u' are identical. + + 'Q' type reads the numerator and (optional) denominator as given. If +the value might not be in canonical form then 'mpq_canonicalize' must be +called before using it in any calculations (*note Rational Number +Functions::). + + 'Qi' will read a base specification separately for the numerator and +denominator. For example '0x10/11' would be 16/11, whereas '0x10/0x11' +would be 16/17. + + 'n' can be used with any of the types above, even the GMP types. '*' +to suppress assignment is allowed, though in that case it would do +nothing at all. + + Other conversions or types that might be accepted by the C library +'scanf' cannot be used through 'gmp_scanf'. + + Whitespace is read and discarded before a field, except for 'c' and +'[' conversions. + + For float conversions, the decimal point character (or string) +expected is taken from the current locale settings on systems which +provide 'localeconv' (*note Locales and Internationalization: +(libc)Locales.). The C library will normally do the same for standard +float input. + + The format string is only interpreted as plain 'char's, multibyte +characters are not recognised. Perhaps this will change in the future. + + +File: gmp.info, Node: Formatted Input Functions, Next: C++ Formatted Input, Prev: Formatted Input Strings, Up: Formatted Input + +11.2 Formatted Input Functions +============================== + +Each of the following functions is similar to the corresponding C +library function. The plain 'scanf' forms take a variable argument +list. The 'vscanf' forms take an argument pointer, see *note Variadic +Functions: (libc)Variadic Functions, or 'man 3 va_start'. + + It should be emphasised that if a format string is invalid, or the +arguments don't match what the format specifies, then the behaviour of +any of these functions will be unpredictable. GCC format string +checking is not available, since it doesn't recognise the GMP +extensions. + + No overlap is permitted between the FMT string and any of the results +produced. + + -- Function: int gmp_scanf (const char *FMT, ...) + -- Function: int gmp_vscanf (const char *FMT, va_list AP) + Read from the standard input 'stdin'. + + -- Function: int gmp_fscanf (FILE *FP, const char *FMT, ...) + -- Function: int gmp_vfscanf (FILE *FP, const char *FMT, va_list AP) + Read from the stream FP. + + -- Function: int gmp_sscanf (const char *S, const char *FMT, ...) + -- Function: int gmp_vsscanf (const char *S, const char *FMT, va_list + AP) + Read from a null-terminated string S. + + The return value from each of these functions is the same as the +standard C99 'scanf', namely the number of fields successfully parsed +and stored. '%n' fields and fields read but suppressed by '*' don't +count towards the return value. + + If end of input (or a file error) is reached before a character for a +field or a literal, and if no previous non-suppressed fields have +matched, then the return value is 'EOF' instead of 0. A whitespace +character in the format string is only an optional match and doesn't +induce an 'EOF' in this fashion. Leading whitespace read and discarded +for a field don't count as characters for that field. + + For the GMP types, input parsing follows C99 rules, namely one +character of lookahead is used and characters are read while they +continue to meet the format requirements. If this doesn't provide a +complete number then the function terminates, with that field not stored +nor counted towards the return value. For instance with 'mpf_t' an +input '1.23e-XYZ' would be read up to the 'X' and that character pushed +back since it's not a digit. The string '1.23e-' would then be +considered invalid since an 'e' must be followed by at least one digit. + + For the standard C types, in the current implementation GMP calls the +C library 'scanf' functions, which might have looser rules about what +constitutes a valid input. + + Note that 'gmp_sscanf' is the same as 'gmp_fscanf' and only does one +character of lookahead when parsing. Although clearly it could look at +its entire input, it is deliberately made identical to 'gmp_fscanf', the +same way C99 'sscanf' is the same as 'fscanf'. + + +File: gmp.info, Node: C++ Formatted Input, Prev: Formatted Input Functions, Up: Formatted Input + +11.3 C++ Formatted Input +======================== + +The following functions are provided in 'libgmpxx' (*note Headers and +Libraries::), which is built only if C++ support is enabled (*note Build +Options::). Prototypes are available from ''. + + -- Function: istream& operator>> (istream& STREAM, mpz_t ROP) + Read ROP from STREAM, using its 'ios' formatting settings. + + -- Function: istream& operator>> (istream& STREAM, mpq_t ROP) + An integer like '123' will be read, or a fraction like '5/9'. No + whitespace is allowed around the '/'. If the fraction is not in + canonical form then 'mpq_canonicalize' must be called (*note + Rational Number Functions::) before operating on it. + + As per integer input, an '0' or '0x' base indicator is read when + none of 'ios::dec', 'ios::oct' or 'ios::hex' are set. This is done + separately for numerator and denominator, so that for instance + '0x10/11' is 16/11 and '0x10/0x11' is 16/17. + + -- Function: istream& operator>> (istream& STREAM, mpf_t ROP) + Read ROP from STREAM, using its 'ios' formatting settings. + + Hex or octal floats are not supported, but might be in the future, + or perhaps it's best to accept only what the standard float + 'operator>>' does. + + Note that digit grouping specified by the 'istream' locale is +currently not accepted. Perhaps this will change in the future. + + + These operators mean that GMP types can be read in the usual C++ way, +for example, + + mpz_t z; + ... + cin >> z; + + But note that 'istream' input (and 'ostream' output, *note C++ +Formatted Output::) is the only overloading available for the GMP types +and that for instance using '+' with an 'mpz_t' will have unpredictable +results. For classes with overloading, see *note C++ Class Interface::. + + +File: gmp.info, Node: C++ Class Interface, Next: Custom Allocation, Prev: Formatted Input, Up: Top + +12 C++ Class Interface +********************** + +This chapter describes the C++ class based interface to GMP. + + All GMP C language types and functions can be used in C++ programs, +since 'gmp.h' has 'extern "C"' qualifiers, but the class interface +offers overloaded functions and operators which may be more convenient. + + Due to the implementation of this interface, a reasonably recent C++ +compiler is required, one supporting namespaces, partial specialization +of templates and member templates. + + *Everything described in this chapter is to be considered preliminary +and might be subject to incompatible changes if some unforeseen +difficulty reveals itself.* + +* Menu: + +* C++ Interface General:: +* C++ Interface Integers:: +* C++ Interface Rationals:: +* C++ Interface Floats:: +* C++ Interface Random Numbers:: +* C++ Interface Limitations:: + + +File: gmp.info, Node: C++ Interface General, Next: C++ Interface Integers, Prev: C++ Class Interface, Up: C++ Class Interface + +12.1 C++ Interface General +========================== + +All the C++ classes and functions are available with + + #include + + Programs should be linked with the 'libgmpxx' and 'libgmp' libraries. +For example, + + g++ mycxxprog.cc -lgmpxx -lgmp + +The classes defined are + + -- Class: mpz_class + -- Class: mpq_class + -- Class: mpf_class + + The standard operators and various standard functions are overloaded +to allow arithmetic with these classes. For example, + + int + main (void) + { + mpz_class a, b, c; + + a = 1234; + b = "-5678"; + c = a+b; + cout << "sum is " << c << "\n"; + cout << "absolute value is " << abs(c) << "\n"; + + return 0; + } + + An important feature of the implementation is that an expression like +'a=b+c' results in a single call to the corresponding 'mpz_add', without +using a temporary for the 'b+c' part. Expressions which by their nature +imply intermediate values, like 'a=b*c+d*e', still use temporaries +though. + + The classes can be freely intermixed in expressions, as can the +classes and the standard types 'long', 'unsigned long' and 'double'. +Smaller types like 'int' or 'float' can also be intermixed, since C++ +will promote them. + + Note that 'bool' is not accepted directly, but must be explicitly +cast to an 'int' first. This is because C++ will automatically convert +any pointer to a 'bool', so if GMP accepted 'bool' it would make all +sorts of invalid class and pointer combinations compile but almost +certainly not do anything sensible. + + Conversions back from the classes to standard C++ types aren't done +automatically, instead member functions like 'get_si' are provided (see +the following sections for details). + + Also there are no automatic conversions from the classes to the +corresponding GMP C types, instead a reference to the underlying C +object can be obtained with the following functions, + + -- Function: mpz_t mpz_class::get_mpz_t () + -- Function: mpq_t mpq_class::get_mpq_t () + -- Function: mpf_t mpf_class::get_mpf_t () + + These can be used to call a C function which doesn't have a C++ class +interface. For example to set 'a' to the GCD of 'b' and 'c', + + mpz_class a, b, c; + ... + mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t()); + + In the other direction, a class can be initialized from the +corresponding GMP C type, or assigned to if an explicit constructor is +used. In both cases this makes a copy of the value, it doesn't create +any sort of association. For example, + + mpz_t z; + // ... init and calculate z ... + mpz_class x(z); + mpz_class y; + y = mpz_class (z); + + There are no namespace setups in 'gmpxx.h', all types and functions +are simply put into the global namespace. This is what 'gmp.h' has done +in the past, and continues to do for compatibility. The extras provided +by 'gmpxx.h' follow GMP naming conventions and are unlikely to clash +with anything. + + +File: gmp.info, Node: C++ Interface Integers, Next: C++ Interface Rationals, Prev: C++ Interface General, Up: C++ Class Interface + +12.2 C++ Interface Integers +=========================== + + -- Function: mpz_class::mpz_class (type N) + Construct an 'mpz_class'. All the standard C++ types may be used, + except 'long long' and 'long double', and all the GMP C++ classes + can be used, although conversions from 'mpq_class' and 'mpf_class' + are 'explicit'. Any necessary conversion follows the corresponding + C function, for example 'double' follows 'mpz_set_d' (*note + Assigning Integers::). + + -- Function: explicit mpz_class::mpz_class (const mpz_t Z) + Construct an 'mpz_class' from an 'mpz_t'. The value in Z is copied + into the new 'mpz_class', there won't be any permanent association + between it and Z. + + -- Function: explicit mpz_class::mpz_class (const char *S, int BASE = + 0) + -- Function: explicit mpz_class::mpz_class (const string& S, int BASE = + 0) + Construct an 'mpz_class' converted from a string using + 'mpz_set_str' (*note Assigning Integers::). + + If the string is not a valid integer, an 'std::invalid_argument' + exception is thrown. The same applies to 'operator='. + + -- Function: mpz_class operator"" _mpz (const char *STR) + With C++11 compilers, integers can be constructed with the syntax + '123_mpz' which is equivalent to 'mpz_class("123")'. + + -- Function: mpz_class operator/ (mpz_class A, mpz_class D) + -- Function: mpz_class operator% (mpz_class A, mpz_class D) + Divisions involving 'mpz_class' round towards zero, as per the + 'mpz_tdiv_q' and 'mpz_tdiv_r' functions (*note Integer Division::). + This is the same as the C99 '/' and '%' operators. + + The 'mpz_fdiv...' or 'mpz_cdiv...' functions can always be called + directly if desired. For example, + + mpz_class q, a, d; + ... + mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t()); + + -- Function: mpz_class abs (mpz_class OP) + -- Function: int cmp (mpz_class OP1, type OP2) + -- Function: int cmp (type OP1, mpz_class OP2) + + -- Function: bool mpz_class::fits_sint_p (void) + -- Function: bool mpz_class::fits_slong_p (void) + -- Function: bool mpz_class::fits_sshort_p (void) + + -- Function: bool mpz_class::fits_uint_p (void) + -- Function: bool mpz_class::fits_ulong_p (void) + -- Function: bool mpz_class::fits_ushort_p (void) + + -- Function: double mpz_class::get_d (void) + -- Function: long mpz_class::get_si (void) + -- Function: string mpz_class::get_str (int BASE = 10) + -- Function: unsigned long mpz_class::get_ui (void) + + -- Function: int mpz_class::set_str (const char *STR, int BASE) + -- Function: int mpz_class::set_str (const string& STR, int BASE) + -- Function: int sgn (mpz_class OP) + -- Function: mpz_class sqrt (mpz_class OP) + + -- Function: mpz_class gcd (mpz_class OP1, mpz_class OP2) + -- Function: mpz_class lcm (mpz_class OP1, mpz_class OP2) + -- Function: mpz_class mpz_class::factorial (type OP) + -- Function: mpz_class factorial (mpz_class OP) + -- Function: mpz_class mpz_class::primorial (type OP) + -- Function: mpz_class primorial (mpz_class OP) + -- Function: mpz_class mpz_class::fibonacci (type OP) + -- Function: mpz_class fibonacci (mpz_class OP) + + -- Function: void mpz_class::swap (mpz_class& OP) + -- Function: void swap (mpz_class& OP1, mpz_class& OP2) + These functions provide a C++ class interface to the corresponding + GMP C routines. Calling 'factorial' or 'primorial' on a negative + number is undefined. + + 'cmp' can be used with any of the classes or the standard C++ + types, except 'long long' and 'long double'. + + + Overloaded operators for combinations of 'mpz_class' and 'double' are +provided for completeness, but it should be noted that if the given +'double' is not an integer then the way any rounding is done is +currently unspecified. The rounding might take place at the start, in +the middle, or at the end of the operation, and it might change in the +future. + + Conversions between 'mpz_class' and 'double', however, are defined to +follow the corresponding C functions 'mpz_get_d' and 'mpz_set_d'. And +comparisons are always made exactly, as per 'mpz_cmp_d'. + + +File: gmp.info, Node: C++ Interface Rationals, Next: C++ Interface Floats, Prev: C++ Interface Integers, Up: C++ Class Interface + +12.3 C++ Interface Rationals +============================ + +In all the following constructors, if a fraction is given then it should +be in canonical form, or if not then 'mpq_class::canonicalize' called. + + -- Function: mpq_class::mpq_class (type OP) + -- Function: mpq_class::mpq_class (integer NUM, integer DEN) + Construct an 'mpq_class'. The initial value can be a single value + of any type (conversion from 'mpf_class' is 'explicit'), or a pair + of integers ('mpz_class' or standard C++ integer types) + representing a fraction, except that 'long long' and 'long double' + are not supported. For example, + + mpq_class q (99); + mpq_class q (1.75); + mpq_class q (1, 3); + + -- Function: explicit mpq_class::mpq_class (const mpq_t Q) + Construct an 'mpq_class' from an 'mpq_t'. The value in Q is copied + into the new 'mpq_class', there won't be any permanent association + between it and Q. + + -- Function: explicit mpq_class::mpq_class (const char *S, int BASE = + 0) + -- Function: explicit mpq_class::mpq_class (const string& S, int BASE = + 0) + Construct an 'mpq_class' converted from a string using + 'mpq_set_str' (*note Initializing Rationals::). + + If the string is not a valid rational, an 'std::invalid_argument' + exception is thrown. The same applies to 'operator='. + + -- Function: mpq_class operator"" _mpq (const char *STR) + With C++11 compilers, integral rationals can be constructed with + the syntax '123_mpq' which is equivalent to 'mpq_class(123_mpz)'. + Other rationals can be built as '-1_mpq/2' or '0xb_mpq/123456_mpz'. + + -- Function: void mpq_class::canonicalize () + Put an 'mpq_class' into canonical form, as per *note Rational + Number Functions::. All arithmetic operators require their + operands in canonical form, and will return results in canonical + form. + + -- Function: mpq_class abs (mpq_class OP) + -- Function: int cmp (mpq_class OP1, type OP2) + -- Function: int cmp (type OP1, mpq_class OP2) + + -- Function: double mpq_class::get_d (void) + -- Function: string mpq_class::get_str (int BASE = 10) + + -- Function: int mpq_class::set_str (const char *STR, int BASE) + -- Function: int mpq_class::set_str (const string& STR, int BASE) + -- Function: int sgn (mpq_class OP) + + -- Function: void mpq_class::swap (mpq_class& OP) + -- Function: void swap (mpq_class& OP1, mpq_class& OP2) + These functions provide a C++ class interface to the corresponding + GMP C routines. + + 'cmp' can be used with any of the classes or the standard C++ + types, except 'long long' and 'long double'. + + -- Function: mpz_class& mpq_class::get_num () + -- Function: mpz_class& mpq_class::get_den () + Get a reference to an 'mpz_class' which is the numerator or + denominator of an 'mpq_class'. This can be used both for read and + write access. If the object returned is modified, it modifies the + original 'mpq_class'. + + If direct manipulation might produce a non-canonical value, then + 'mpq_class::canonicalize' must be called before further operations. + + -- Function: mpz_t mpq_class::get_num_mpz_t () + -- Function: mpz_t mpq_class::get_den_mpz_t () + Get a reference to the underlying 'mpz_t' numerator or denominator + of an 'mpq_class'. This can be passed to C functions expecting an + 'mpz_t'. Any modifications made to the 'mpz_t' will modify the + original 'mpq_class'. + + If direct manipulation might produce a non-canonical value, then + 'mpq_class::canonicalize' must be called before further operations. + + -- Function: istream& operator>> (istream& STREAM, mpq_class& ROP); + Read ROP from STREAM, using its 'ios' formatting settings, the same + as 'mpq_t operator>>' (*note C++ Formatted Input::). + + If the ROP read might not be in canonical form then + 'mpq_class::canonicalize' must be called. + + +File: gmp.info, Node: C++ Interface Floats, Next: C++ Interface Random Numbers, Prev: C++ Interface Rationals, Up: C++ Class Interface + +12.4 C++ Interface Floats +========================= + +When an expression requires the use of temporary intermediate +'mpf_class' values, like 'f=g*h+x*y', those temporaries will have the +same precision as the destination 'f'. Explicit constructors can be +used if this doesn't suit. + + -- Function: mpf_class::mpf_class (type OP) + -- Function: mpf_class::mpf_class (type OP, mp_bitcnt_t PREC) + Construct an 'mpf_class'. Any standard C++ type can be used, + except 'long long' and 'long double', and any of the GMP C++ + classes can be used. + + If PREC is given, the initial precision is that value, in bits. If + PREC is not given, then the initial precision is determined by the + type of OP given. An 'mpz_class', 'mpq_class', or C++ builtin type + will give the default 'mpf' precision (*note Initializing + Floats::). An 'mpf_class' or expression will give the precision of + that value. The precision of a binary expression is the higher of + the two operands. + + mpf_class f(1.5); // default precision + mpf_class f(1.5, 500); // 500 bits (at least) + mpf_class f(x); // precision of x + mpf_class f(abs(x)); // precision of x + mpf_class f(-g, 1000); // 1000 bits (at least) + mpf_class f(x+y); // greater of precisions of x and y + + -- Function: explicit mpf_class::mpf_class (const mpf_t F) + -- Function: mpf_class::mpf_class (const mpf_t F, mp_bitcnt_t PREC) + Construct an 'mpf_class' from an 'mpf_t'. The value in F is copied + into the new 'mpf_class', there won't be any permanent association + between it and F. + + If PREC is given, the initial precision is that value, in bits. If + PREC is not given, then the initial precision is that of F. + + -- Function: explicit mpf_class::mpf_class (const char *S) + -- Function: mpf_class::mpf_class (const char *S, mp_bitcnt_t PREC, int + BASE = 0) + -- Function: explicit mpf_class::mpf_class (const string& S) + -- Function: mpf_class::mpf_class (const string& S, mp_bitcnt_t PREC, + int BASE = 0) + Construct an 'mpf_class' converted from a string using + 'mpf_set_str' (*note Assigning Floats::). If PREC is given, the + initial precision is that value, in bits. If not, the default + 'mpf' precision (*note Initializing Floats::) is used. + + If the string is not a valid float, an 'std::invalid_argument' + exception is thrown. The same applies to 'operator='. + + -- Function: mpf_class operator"" _mpf (const char *STR) + With C++11 compilers, floats can be constructed with the syntax + '1.23e-1_mpf' which is equivalent to 'mpf_class("1.23e-1")'. + + -- Function: mpf_class& mpf_class::operator= (type OP) + Convert and store the given OP value to an 'mpf_class' object. The + same types are accepted as for the constructors above. + + Note that 'operator=' only stores a new value, it doesn't copy or + change the precision of the destination, instead the value is + truncated if necessary. This is the same as 'mpf_set' etc. Note + in particular this means for 'mpf_class' a copy constructor is not + the same as a default constructor plus assignment. + + mpf_class x (y); // x created with precision of y + + mpf_class x; // x created with default precision + x = y; // value truncated to that precision + + Applications using templated code may need to be careful about the + assumptions the code makes in this area, when working with + 'mpf_class' values of various different or non-default precisions. + For instance implementations of the standard 'complex' template + have been seen in both styles above, though of course 'complex' is + normally only actually specified for use with the builtin float + types. + + -- Function: mpf_class abs (mpf_class OP) + -- Function: mpf_class ceil (mpf_class OP) + -- Function: int cmp (mpf_class OP1, type OP2) + -- Function: int cmp (type OP1, mpf_class OP2) + + -- Function: bool mpf_class::fits_sint_p (void) + -- Function: bool mpf_class::fits_slong_p (void) + -- Function: bool mpf_class::fits_sshort_p (void) + + -- Function: bool mpf_class::fits_uint_p (void) + -- Function: bool mpf_class::fits_ulong_p (void) + -- Function: bool mpf_class::fits_ushort_p (void) + + -- Function: mpf_class floor (mpf_class OP) + -- Function: mpf_class hypot (mpf_class OP1, mpf_class OP2) + + -- Function: double mpf_class::get_d (void) + -- Function: long mpf_class::get_si (void) + -- Function: string mpf_class::get_str (mp_exp_t& EXP, int BASE = 10, + size_t DIGITS = 0) + -- Function: unsigned long mpf_class::get_ui (void) + + -- Function: int mpf_class::set_str (const char *STR, int BASE) + -- Function: int mpf_class::set_str (const string& STR, int BASE) + -- Function: int sgn (mpf_class OP) + -- Function: mpf_class sqrt (mpf_class OP) + + -- Function: void mpf_class::swap (mpf_class& OP) + -- Function: void swap (mpf_class& OP1, mpf_class& OP2) + -- Function: mpf_class trunc (mpf_class OP) + These functions provide a C++ class interface to the corresponding + GMP C routines. + + 'cmp' can be used with any of the classes or the standard C++ + types, except 'long long' and 'long double'. + + The accuracy provided by 'hypot' is not currently guaranteed. + + -- Function: mp_bitcnt_t mpf_class::get_prec () + -- Function: void mpf_class::set_prec (mp_bitcnt_t PREC) + -- Function: void mpf_class::set_prec_raw (mp_bitcnt_t PREC) + Get or set the current precision of an 'mpf_class'. + + The restrictions described for 'mpf_set_prec_raw' (*note + Initializing Floats::) apply to 'mpf_class::set_prec_raw'. Note in + particular that the 'mpf_class' must be restored to its allocated + precision before being destroyed. This must be done by application + code, there's no automatic mechanism for it. + + +File: gmp.info, Node: C++ Interface Random Numbers, Next: C++ Interface Limitations, Prev: C++ Interface Floats, Up: C++ Class Interface + +12.5 C++ Interface Random Numbers +================================= + + -- Class: gmp_randclass + The C++ class interface to the GMP random number functions uses + 'gmp_randclass' to hold an algorithm selection and current state, + as per 'gmp_randstate_t'. + + -- Function: gmp_randclass::gmp_randclass (void (*RANDINIT) + (gmp_randstate_t, ...), ...) + Construct a 'gmp_randclass', using a call to the given RANDINIT + function (*note Random State Initialization::). The arguments + expected are the same as RANDINIT, but with 'mpz_class' instead of + 'mpz_t'. For example, + + gmp_randclass r1 (gmp_randinit_default); + gmp_randclass r2 (gmp_randinit_lc_2exp_size, 32); + gmp_randclass r3 (gmp_randinit_lc_2exp, a, c, m2exp); + gmp_randclass r4 (gmp_randinit_mt); + + 'gmp_randinit_lc_2exp_size' will fail if the size requested is too + big, an 'std::length_error' exception is thrown in that case. + + -- Function: gmp_randclass::gmp_randclass (gmp_randalg_t ALG, ...) + Construct a 'gmp_randclass' using the same parameters as + 'gmp_randinit' (*note Random State Initialization::). This + function is obsolete and the above RANDINIT style should be + preferred. + + -- Function: void gmp_randclass::seed (unsigned long int S) + -- Function: void gmp_randclass::seed (mpz_class S) + Seed a random number generator. See *note Random Number + Functions::, for how to choose a good seed. + + -- Function: mpz_class gmp_randclass::get_z_bits (mp_bitcnt_t BITS) + -- Function: mpz_class gmp_randclass::get_z_bits (mpz_class BITS) + Generate a random integer with a specified number of bits. + + -- Function: mpz_class gmp_randclass::get_z_range (mpz_class N) + Generate a random integer in the range 0 to N-1 inclusive. + + -- Function: mpf_class gmp_randclass::get_f () + -- Function: mpf_class gmp_randclass::get_f (mp_bitcnt_t PREC) + Generate a random float F in the range 0 <= F < 1. F will be to + PREC bits precision, or if PREC is not given then to the precision + of the destination. For example, + + gmp_randclass r; + ... + mpf_class f (0, 512); // 512 bits precision + f = r.get_f(); // random number, 512 bits + + +File: gmp.info, Node: C++ Interface Limitations, Prev: C++ Interface Random Numbers, Up: C++ Class Interface + +12.6 C++ Interface Limitations +============================== + +'mpq_class' and Templated Reading + A generic piece of template code probably won't know that + 'mpq_class' requires a 'canonicalize' call if inputs read with + 'operator>>' might be non-canonical. This can lead to incorrect + results. + + 'operator>>' behaves as it does for reasons of efficiency. A + canonicalize can be quite time consuming on large operands, and is + best avoided if it's not necessary. + + But this potential difficulty reduces the usefulness of + 'mpq_class'. Perhaps a mechanism to tell 'operator>>' what to do + will be adopted in the future, maybe a preprocessor define, a + global flag, or an 'ios' flag pressed into service. Or maybe, at + the risk of inconsistency, the 'mpq_class' 'operator>>' could + canonicalize and leave 'mpq_t' 'operator>>' not doing so, for use + on those occasions when that's acceptable. Send feedback or + alternate ideas to . + +Subclassing + Subclassing the GMP C++ classes works, but is not currently + recommended. + + Expressions involving subclasses resolve correctly (or seem to), + but in normal C++ fashion the subclass doesn't inherit constructors + and assignments. There's many of those in the GMP classes, and a + good way to reestablish them in a subclass is not yet provided. + +Templated Expressions + A subtle difficulty exists when using expressions together with + application-defined template functions. Consider the following, + with 'T' intended to be some numeric type, + + template + T fun (const T &, const T &); + + When used with, say, plain 'mpz_class' variables, it works fine: + 'T' is resolved as 'mpz_class'. + + mpz_class f(1), g(2); + fun (f, g); // Good + + But when one of the arguments is an expression, it doesn't work. + + mpz_class f(1), g(2), h(3); + fun (f, g+h); // Bad + + This is because 'g+h' ends up being a certain expression template + type internal to 'gmpxx.h', which the C++ template resolution rules + are unable to automatically convert to 'mpz_class'. The workaround + is simply to add an explicit cast. + + mpz_class f(1), g(2), h(3); + fun (f, mpz_class(g+h)); // Good + + Similarly, within 'fun' it may be necessary to cast an expression + to type 'T' when calling a templated 'fun2'. + + template + void fun (T f, T g) + { + fun2 (f, f+g); // Bad + } + + template + void fun (T f, T g) + { + fun2 (f, T(f+g)); // Good + } + +C++11 + C++11 provides several new ways in which types can be inferred: + 'auto', 'decltype', etc. While they can be very convenient, they + don't mix well with expression templates. In this example, the + addition is performed twice, as if we had defined 'sum' as a macro. + + mpz_class z = 33; + auto sum = z + z; + mpz_class prod = sum * sum; + + This other example may crash, though some compilers might make it + look like it is working, because the expression 'z+z' goes out of + scope before it is evaluated. + + mpz_class z = 33; + auto sum = z + z + z; + mpz_class prod = sum * 2; + + It is thus strongly recommended to avoid 'auto' anywhere a GMP C++ + expression may appear. + + +File: gmp.info, Node: Custom Allocation, Next: Language Bindings, Prev: C++ Class Interface, Up: Top + +13 Custom Allocation +******************** + +By default GMP uses 'malloc', 'realloc' and 'free' for memory +allocation, and if they fail GMP prints a message to the standard error +output and terminates the program. + + Alternate functions can be specified, to allocate memory in a +different way or to have a different error action on running out of +memory. + + -- Function: void mp_set_memory_functions ( + void *(*ALLOC_FUNC_PTR) (size_t), + void *(*REALLOC_FUNC_PTR) (void *, size_t, size_t), + void (*FREE_FUNC_PTR) (void *, size_t)) + Replace the current allocation functions from the arguments. If an + argument is 'NULL', the corresponding default function is used. + + These functions will be used for all memory allocation done by GMP, + apart from temporary space from 'alloca' if that function is + available and GMP is configured to use it (*note Build Options::). + + *Be sure to call 'mp_set_memory_functions' only when there are no + active GMP objects allocated using the previous memory functions! + Usually that means calling it before any other GMP function.* + + The functions supplied should fit the following declarations: + + -- Function: void * allocate_function (size_t ALLOC_SIZE) + Return a pointer to newly allocated space with at least ALLOC_SIZE + bytes. + + -- Function: void * reallocate_function (void *PTR, size_t OLD_SIZE, + size_t NEW_SIZE) + Resize a previously allocated block PTR of OLD_SIZE bytes to be + NEW_SIZE bytes. + + The block may be moved if necessary or if desired, and in that case + the smaller of OLD_SIZE and NEW_SIZE bytes must be copied to the + new location. The return value is a pointer to the resized block, + that being the new location if moved or just PTR if not. + + PTR is never 'NULL', it's always a previously allocated block. + NEW_SIZE may be bigger or smaller than OLD_SIZE. + + -- Function: void free_function (void *PTR, size_t SIZE) + De-allocate the space pointed to by PTR. + + PTR is never 'NULL', it's always a previously allocated block of + SIZE bytes. + + A "byte" here means the unit used by the 'sizeof' operator. + + The REALLOCATE_FUNCTION parameter OLD_SIZE and the FREE_FUNCTION +parameter SIZE are passed for convenience, but of course they can be +ignored if not needed by an implementation. The default functions using +'malloc' and friends for instance don't use them. + + No error return is allowed from any of these functions, if they +return then they must have performed the specified operation. In +particular note that ALLOCATE_FUNCTION or REALLOCATE_FUNCTION mustn't +return 'NULL'. + + Getting a different fatal error action is a good use for custom +allocation functions, for example giving a graphical dialog rather than +the default print to 'stderr'. How much is possible when genuinely out +of memory is another question though. + + There's currently no defined way for the allocation functions to +recover from an error such as out of memory, they must terminate program +execution. A 'longjmp' or throwing a C++ exception will have undefined +results. This may change in the future. + + GMP may use allocated blocks to hold pointers to other allocated +blocks. This will limit the assumptions a conservative garbage +collection scheme can make. + + Since the default GMP allocation uses 'malloc' and friends, those +functions will be linked in even if the first thing a program does is an +'mp_set_memory_functions'. It's necessary to change the GMP sources if +this is a problem. + + + -- Function: void mp_get_memory_functions ( + void *(**ALLOC_FUNC_PTR) (size_t), + void *(**REALLOC_FUNC_PTR) (void *, size_t, size_t), + void (**FREE_FUNC_PTR) (void *, size_t)) + Get the current allocation functions, storing function pointers to + the locations given by the arguments. If an argument is 'NULL', + that function pointer is not stored. + + For example, to get just the current free function, + + void (*freefunc) (void *, size_t); + + mp_get_memory_functions (NULL, NULL, &freefunc); + + +File: gmp.info, Node: Language Bindings, Next: Algorithms, Prev: Custom Allocation, Up: Top + +14 Language Bindings +******************** + +The following packages and projects offer access to GMP from languages +other than C, though perhaps with varying levels of functionality and +efficiency. + + +C++ + * GMP C++ class interface, *note C++ Class Interface:: + Straightforward interface, expression templates to eliminate + temporaries. + * ALP + Linear algebra and polynomials using templates. + * CLN + High level classes for arithmetic. + * Linbox + Sparse vectors and matrices. + * NTL + A C++ number theory library. + +Eiffel + * Eiffelroom + +Haskell + * Glasgow Haskell Compiler + +Java + * Kaffe + +Lisp + * GNU Common Lisp + * Librep + * XEmacs (21.5.18 beta and up) + Optional big integers, rationals and floats using GMP. + +ML + * MLton compiler + +Objective Caml + * MLGMP + * Numerix + Optionally using GMP. + +Oz + * Mozart + +Pascal + * GNU Pascal Compiler + GMP unit. + * Numerix + For Free Pascal, optionally using GMP. + +Perl + * GMP module, see 'demos/perl' in the GMP sources (*note + Demonstration Programs::). + * Math::GMP + Compatible with Math::BigInt, but not as many functions as the + GMP module above. + * Math::BigInt::GMP + Plug Math::GMP into normal Math::BigInt operations. + +Pike + * pikempz module in the standard distribution, + + +Prolog + * SWI Prolog + Arbitrary precision floats. + +Python + * GMPY + +Ruby + * + +Scheme + * GNU Guile + * RScheme + * STklos + +Smalltalk + * GNU Smalltalk + +Other + * Axiom + Computer algebra using GCL. + * DrGenius + Geometry system and mathematical programming language. + * GiNaC + C++ computer algebra using CLN. + * GOO + Dynamic object oriented language. + * Maxima + Macsyma computer algebra using GCL. + * Regina + Topological calculator. + * Yacas + Yet another computer algebra system. + + +File: gmp.info, Node: Algorithms, Next: Internals, Prev: Language Bindings, Up: Top + +15 Algorithms +************* + +This chapter is an introduction to some of the algorithms used for +various GMP operations. The code is likely to be hard to understand +without knowing something about the algorithms. + + Some GMP internals are mentioned, but applications that expect to be +compatible with future GMP releases should take care to use only the +documented functions. + +* Menu: + +* Multiplication Algorithms:: +* Division Algorithms:: +* Greatest Common Divisor Algorithms:: +* Powering Algorithms:: +* Root Extraction Algorithms:: +* Radix Conversion Algorithms:: +* Other Algorithms:: +* Assembly Coding:: + + +File: gmp.info, Node: Multiplication Algorithms, Next: Division Algorithms, Prev: Algorithms, Up: Algorithms + +15.1 Multiplication +=================== + +NxN limb multiplications and squares are done using one of seven +algorithms, as the size N increases. + + Algorithm Threshold + Basecase (none) + Karatsuba 'MUL_TOOM22_THRESHOLD' + Toom-3 'MUL_TOOM33_THRESHOLD' + Toom-4 'MUL_TOOM44_THRESHOLD' + Toom-6.5 'MUL_TOOM6H_THRESHOLD' + Toom-8.5 'MUL_TOOM8H_THRESHOLD' + FFT 'MUL_FFT_THRESHOLD' + + Similarly for squaring, with the 'SQR' thresholds. + + NxM multiplications of operands with different sizes above +'MUL_TOOM22_THRESHOLD' are currently done by special Toom-inspired +algorithms or directly with FFT, depending on operand size (*note +Unbalanced Multiplication::). + +* Menu: + +* Basecase Multiplication:: +* Karatsuba Multiplication:: +* Toom 3-Way Multiplication:: +* Toom 4-Way Multiplication:: +* Higher degree Toom'n'half:: +* FFT Multiplication:: +* Other Multiplication:: +* Unbalanced Multiplication:: + + +File: gmp.info, Node: Basecase Multiplication, Next: Karatsuba Multiplication, Prev: Multiplication Algorithms, Up: Multiplication Algorithms + +15.1.1 Basecase Multiplication +------------------------------ + +Basecase NxM multiplication is a straightforward rectangular set of +cross-products, the same as long multiplication done by hand and for +that reason sometimes known as the schoolbook or grammar school method. +This is an O(N*M) algorithm. See Knuth section 4.3.1 algorithm M (*note +References::), and the 'mpn/generic/mul_basecase.c' code. + + Assembly implementations of 'mpn_mul_basecase' are essentially the +same as the generic C code, but have all the usual assembly tricks and +obscurities introduced for speed. + + A square can be done in roughly half the time of a multiply, by using +the fact that the cross products above and below the diagonal are the +same. A triangle of products below the diagonal is formed, doubled +(left shift by one bit), and then the products on the diagonal added. +This can be seen in 'mpn/generic/sqr_basecase.c'. Again the assembly +implementations take essentially the same approach. + + u0 u1 u2 u3 u4 + +---+---+---+---+---+ + u0 | d | | | | | + +---+---+---+---+---+ + u1 | | d | | | | + +---+---+---+---+---+ + u2 | | | d | | | + +---+---+---+---+---+ + u3 | | | | d | | + +---+---+---+---+---+ + u4 | | | | | d | + +---+---+---+---+---+ + + In practice squaring isn't a full 2x faster than multiplying, it's +usually around 1.5x. Less than 1.5x probably indicates +'mpn_sqr_basecase' wants improving on that CPU. + + On some CPUs 'mpn_mul_basecase' can be faster than the generic C +'mpn_sqr_basecase' on some small sizes. 'SQR_BASECASE_THRESHOLD' is the +size at which to use 'mpn_sqr_basecase', this will be zero if that +routine should be used always. + + +File: gmp.info, Node: Karatsuba Multiplication, Next: Toom 3-Way Multiplication, Prev: Basecase Multiplication, Up: Multiplication Algorithms + +15.1.2 Karatsuba Multiplication +------------------------------- + +The Karatsuba multiplication algorithm is described in Knuth section +4.3.3 part A, and various other textbooks. A brief description is given +here. + + The inputs x and y are treated as each split into two parts of equal +length (or the most significant part one limb shorter if N is odd). + + high low + +----------+----------+ + | x1 | x0 | + +----------+----------+ + + +----------+----------+ + | y1 | y0 | + +----------+----------+ + + Let b be the power of 2 where the split occurs, i.e. if x0 is k limbs +(y0 the same) then b=2^(k*mp_bits_per_limb). With that x=x1*b+x0 and +y=y1*b+y0, and the following holds, + + x*y = (b^2+b)*x1*y1 - b*(x1-x0)*(y1-y0) + (b+1)*x0*y0 + + This formula means doing only three multiplies of (N/2)x(N/2) limbs, +whereas a basecase multiply of NxN limbs is equivalent to four +multiplies of (N/2)x(N/2). The factors (b^2+b) etc represent the +positions where the three products must be added. + + high low + +--------+--------+ +--------+--------+ + | x1*y1 | | x0*y0 | + +--------+--------+ +--------+--------+ + +--------+--------+ + add | x1*y1 | + +--------+--------+ + +--------+--------+ + add | x0*y0 | + +--------+--------+ + +--------+--------+ + sub | (x1-x0)*(y1-y0) | + +--------+--------+ + + The term (x1-x0)*(y1-y0) is best calculated as an absolute value, and +the sign used to choose to add or subtract. Notice the sum +high(x0*y0)+low(x1*y1) occurs twice, so it's possible to do 5*k limb +additions, rather than 6*k, but in GMP extra function call overheads +outweigh the saving. + + Squaring is similar to multiplying, but with x=y the formula reduces +to an equivalent with three squares, + + x^2 = (b^2+b)*x1^2 - b*(x1-x0)^2 + (b+1)*x0^2 + + The final result is accumulated from those three squares the same way +as for the three multiplies above. The middle term (x1-x0)^2 is now +always positive. + + A similar formula for both multiplying and squaring can be +constructed with a middle term (x1+x0)*(y1+y0). But those sums can +exceed k limbs, leading to more carry handling and additions than the +form above. + + Karatsuba multiplication is asymptotically an O(N^1.585) algorithm, +the exponent being log(3)/log(2), representing 3 multiplies each 1/2 the +size of the inputs. This is a big improvement over the basecase +multiply at O(N^2) and the advantage soon overcomes the extra additions +Karatsuba performs. 'MUL_TOOM22_THRESHOLD' can be as little as 10 +limbs. The 'SQR' threshold is usually about twice the 'MUL'. + + The basecase algorithm will take a time of the form M(N) = a*N^2 + +b*N + c and the Karatsuba algorithm K(N) = 3*M(N/2) + d*N + e, which +expands to K(N) = 3/4*a*N^2 + 3/2*b*N + 3*c + d*N + e. The factor 3/4 +for a means per-crossproduct speedups in the basecase code will increase +the threshold since they benefit M(N) more than K(N). And conversely the +3/2 for b means linear style speedups of b will increase the threshold +since they benefit K(N) more than M(N). The latter can be seen for +instance when adding an optimized 'mpn_sqr_diagonal' to +'mpn_sqr_basecase'. Of course all speedups reduce total time, and in +that sense the algorithm thresholds are merely of academic interest. + + +File: gmp.info, Node: Toom 3-Way Multiplication, Next: Toom 4-Way Multiplication, Prev: Karatsuba Multiplication, Up: Multiplication Algorithms + +15.1.3 Toom 3-Way Multiplication +-------------------------------- + +The Karatsuba formula is the simplest case of a general approach to +splitting inputs that leads to both Toom and FFT algorithms. A +description of Toom can be found in Knuth section 4.3.3, with an example +3-way calculation after Theorem A. The 3-way form used in GMP is +described here. + + The operands are each considered split into 3 pieces of equal length +(or the most significant part 1 or 2 limbs shorter than the other two). + + high low + +----------+----------+----------+ + | x2 | x1 | x0 | + +----------+----------+----------+ + + +----------+----------+----------+ + | y2 | y1 | y0 | + +----------+----------+----------+ + +These parts are treated as the coefficients of two polynomials + + X(t) = x2*t^2 + x1*t + x0 + Y(t) = y2*t^2 + y1*t + y0 + + Let b equal the power of 2 which is the size of the x0, x1, y0 and y1 +pieces, i.e. if they're k limbs each then b=2^(k*mp_bits_per_limb). +With this x=X(b) and y=Y(b). + + Let a polynomial W(t)=X(t)*Y(t) and suppose its coefficients are + + W(t) = w4*t^4 + w3*t^3 + w2*t^2 + w1*t + w0 + + The w[i] are going to be determined, and when they are they'll give +the final result using w=W(b), since x*y=X(b)*Y(b)=W(b). The +coefficients will be roughly b^2 each, and the final W(b) will be an +addition like this: + + high low + +-------+-------+ + | w4 | + +-------+-------+ + +--------+-------+ + | w3 | + +--------+-------+ + +--------+-------+ + | w2 | + +--------+-------+ + +--------+-------+ + | w1 | + +--------+-------+ + +-------+-------+ + | w0 | + +-------+-------+ + + The w[i] coefficients could be formed by a simple set of cross +products, like w4=x2*y2, w3=x2*y1+x1*y2, w2=x2*y0+x1*y1+x0*y2 etc, but +this would need all nine x[i]*y[j] for i,j=0,1,2, and would be +equivalent merely to a basecase multiply. Instead the following +approach is used. + + X(t) and Y(t) are evaluated and multiplied at 5 points, giving values +of W(t) at those points. In GMP the following points are used: + + Point Value + t=0 x0 * y0, which gives w0 immediately + t=1 (x2+x1+x0) * (y2+y1+y0) + t=-1 (x2-x1+x0) * (y2-y1+y0) + t=2 (4*x2+2*x1+x0) * (4*y2+2*y1+y0) + t=inf x2 * y2, which gives w4 immediately + + At t=-1 the values can be negative and that's handled using the +absolute values and tracking the sign separately. At t=inf the value is +actually X(t)*Y(t)/t^4 in the limit as t approaches infinity, but it's +much easier to think of as simply x2*y2 giving w4 immediately (much like +x0*y0 at t=0 gives w0 immediately). + + Each of the points substituted into W(t)=w4*t^4+...+w0 gives a linear +combination of the w[i] coefficients, and the value of those +combinations has just been calculated. + + W(0) = w0 + W(1) = w4 + w3 + w2 + w1 + w0 + W(-1) = w4 - w3 + w2 - w1 + w0 + W(2) = 16*w4 + 8*w3 + 4*w2 + 2*w1 + w0 + W(inf) = w4 + + This is a set of five equations in five unknowns, and some elementary +linear algebra quickly isolates each w[i]. This involves adding or +subtracting one W(t) value from another, and a couple of divisions by +powers of 2 and one division by 3, the latter using the special +'mpn_divexact_by3' (*note Exact Division::). + + The conversion of W(t) values to the coefficients is interpolation. +A polynomial of degree 4 like W(t) is uniquely determined by values +known at 5 different points. The points are arbitrary and can be chosen +to make the linear equations come out with a convenient set of steps for +quickly isolating the w[i]. + + Squaring follows the same procedure as multiplication, but there's +only one X(t) and it's evaluated at the 5 points, and those values +squared to give values of W(t). The interpolation is then identical, +and in fact the same 'toom_interpolate_5pts' subroutine is used for both +squaring and multiplying. + + Toom-3 is asymptotically O(N^1.465), the exponent being +log(5)/log(3), representing 5 recursive multiplies of 1/3 the original +size each. This is an improvement over Karatsuba at O(N^1.585), though +Toom does more work in the evaluation and interpolation and so it only +realizes its advantage above a certain size. + + Near the crossover between Toom-3 and Karatsuba there's generally a +range of sizes where the difference between the two is small. +'MUL_TOOM33_THRESHOLD' is a somewhat arbitrary point in that range and +successive runs of the tune program can give different values due to +small variations in measuring. A graph of time versus size for the two +shows the effect, see 'tune/README'. + + At the fairly small sizes where the Toom-3 thresholds occur it's +worth remembering that the asymptotic behaviour for Karatsuba and Toom-3 +can't be expected to make accurate predictions, due of course to the big +influence of all sorts of overheads, and the fact that only a few +recursions of each are being performed. Even at large sizes there's a +good chance machine dependent effects like cache architecture will mean +actual performance deviates from what might be predicted. + + The formula given for the Karatsuba algorithm (*note Karatsuba +Multiplication::) has an equivalent for Toom-3 involving only five +multiplies, but this would be complicated and unenlightening. + + An alternate view of Toom-3 can be found in Zuras (*note +References::), using a vector to represent the x and y splits and a +matrix multiplication for the evaluation and interpolation stages. The +matrix inverses are not meant to be actually used, and they have +elements with values much greater than in fact arise in the +interpolation steps. The diagram shown for the 3-way is attractive, but +again doesn't have to be implemented that way and for example with a bit +of rearrangement just one division by 6 can be done. + + +File: gmp.info, Node: Toom 4-Way Multiplication, Next: Higher degree Toom'n'half, Prev: Toom 3-Way Multiplication, Up: Multiplication Algorithms + +15.1.4 Toom 4-Way Multiplication +-------------------------------- + +Karatsuba and Toom-3 split the operands into 2 and 3 coefficients, +respectively. Toom-4 analogously splits the operands into 4 +coefficients. Using the notation from the section on Toom-3 +multiplication, we form two polynomials: + + X(t) = x3*t^3 + x2*t^2 + x1*t + x0 + Y(t) = y3*t^3 + y2*t^2 + y1*t + y0 + + X(t) and Y(t) are evaluated and multiplied at 7 points, giving values +of W(t) at those points. In GMP the following points are used, + + Point Value + t=0 x0 * y0, which gives w0 immediately + t=1/2 (x3+2*x2+4*x1+8*x0) * (y3+2*y2+4*y1+8*y0) + t=-1/2 (-x3+2*x2-4*x1+8*x0) * (-y3+2*y2-4*y1+8*y0) + t=1 (x3+x2+x1+x0) * (y3+y2+y1+y0) + t=-1 (-x3+x2-x1+x0) * (-y3+y2-y1+y0) + t=2 (8*x3+4*x2+2*x1+x0) * (8*y3+4*y2+2*y1+y0) + t=inf x3 * y3, which gives w6 immediately + + The number of additions and subtractions for Toom-4 is much larger +than for Toom-3. But several subexpressions occur multiple times, for +example x2+x0 occurs for both t=1 and t=-1. + + Toom-4 is asymptotically O(N^1.404), the exponent being +log(7)/log(4), representing 7 recursive multiplies of 1/4 the original +size each. + + +File: gmp.info, Node: Higher degree Toom'n'half, Next: FFT Multiplication, Prev: Toom 4-Way Multiplication, Up: Multiplication Algorithms + +15.1.5 Higher degree Toom'n'half +-------------------------------- + +The Toom algorithms described above (*note Toom 3-Way Multiplication::, +*note Toom 4-Way Multiplication::) generalize to split into an arbitrary +number of pieces. In general a split of two equally long operands into +r pieces leads to evaluations and pointwise multiplications done at +2*r-1 points. To fully exploit symmetries it would be better to have a +multiple of 4 points, that's why for higher degree Toom'n'half is used. + + Toom'n'half means that the existence of one more piece is considered +for a single operand. It can be virtual, i.e. zero, or real, when the +two operands are not exactly balanced. By choosing an even r, +Toom-r+1/2 requires 2r points, a multiple of four. + + The quadruplets of points include 0, inf, +1, and +-2^i, +-2^-i. +Each of them giving shortcuts for the evaluation phase and for some +steps in the interpolation phase. Further tricks are used to reduce the +memory footprint of the whole multiplication algorithm to a memory +buffer equal in size to the result of the product. + + Current GMP uses both Toom-6'n'half and Toom-8'n'half. + + +File: gmp.info, Node: FFT Multiplication, Next: Other Multiplication, Prev: Higher degree Toom'n'half, Up: Multiplication Algorithms + +15.1.6 FFT Multiplication +------------------------- + +At large to very large sizes a Fermat style FFT multiplication is used, +following Schönhage and Strassen (*note References::). Descriptions of +FFTs in various forms can be found in many textbooks, for instance Knuth +section 4.3.3 part C or Lipson chapter IX. A brief description of the +form used in GMP is given here. + + The multiplication done is x*y mod 2^N+1, for a given N. A full +product x*y is obtained by choosing N>=bits(x)+bits(y) and padding x and +y with high zero limbs. The modular product is the native form for the +algorithm, so padding to get a full product is unavoidable. + + The algorithm follows a split, evaluate, pointwise multiply, +interpolate and combine similar to that described above for Karatsuba +and Toom-3. A k parameter controls the split, with an FFT-k splitting +into 2^k pieces of M=N/2^k bits each. N must be a multiple of +(2^k)*mp_bits_per_limb so the split falls on limb boundaries, avoiding +bit shifts in the split and combine stages. + + The evaluations, pointwise multiplications, and interpolation are all +done modulo 2^N'+1 where N' is 2M+k+3 rounded up to a multiple of 2^k +and of 'mp_bits_per_limb'. The results of interpolation will be the +following negacyclic convolution of the input pieces, and the choice of +N' ensures these sums aren't truncated. + + --- + \ b + w[n] = / (-1) * x[i] * y[j] + --- + i+j==b*2^k+n + b=0,1 + + The points used for the evaluation are g^i for i=0 to 2^k-1 where +g=2^(2N'/2^k). g is a 2^k'th root of unity mod 2^N'+1, which produces +necessary cancellations at the interpolation stage, and it's also a +power of 2 so the fast Fourier transforms used for the evaluation and +interpolation do only shifts, adds and negations. + + The pointwise multiplications are done modulo 2^N'+1 and either +recurse into a further FFT or use a plain multiplication (Toom-3, +Karatsuba or basecase), whichever is optimal at the size N'. The +interpolation is an inverse fast Fourier transform. The resulting set +of sums of x[i]*y[j] are added at appropriate offsets to give the final +result. + + Squaring is the same, but x is the only input so it's one transform +at the evaluate stage and the pointwise multiplies are squares. The +interpolation is the same. + + For a mod 2^N+1 product, an FFT-k is an O(N^(k/(k-1))) algorithm, the +exponent representing 2^k recursed modular multiplies each 1/2^(k-1) the +size of the original. Each successive k is an asymptotic improvement, +but overheads mean each is only faster at bigger and bigger sizes. In +the code, 'MUL_FFT_TABLE' and 'SQR_FFT_TABLE' are the thresholds where +each k is used. Each new k effectively swaps some multiplying for some +shifts, adds and overheads. + + A mod 2^N+1 product can be formed with a normal NxN->2N bit multiply +plus a subtraction, so an FFT and Toom-3 etc can be compared directly. +A k=4 FFT at O(N^1.333) can be expected to be the first faster than +Toom-3 at O(N^1.465). In practice this is what's found, with +'MUL_FFT_MODF_THRESHOLD' and 'SQR_FFT_MODF_THRESHOLD' being between 300 +and 1000 limbs, depending on the CPU. So far it's been found that only +very large FFTs recurse into pointwise multiplies above these sizes. + + When an FFT is to give a full product, the change of N to 2N doesn't +alter the theoretical complexity for a given k, but for the purposes of +considering where an FFT might be first used it can be assumed that the +FFT is recursing into a normal multiply and that on that basis it's +doing 2^k recursed multiplies each 1/2^(k-2) the size of the inputs, +making it O(N^(k/(k-2))). This would mean k=7 at O(N^1.4) would be the +first FFT faster than Toom-3. In practice 'MUL_FFT_THRESHOLD' and +'SQR_FFT_THRESHOLD' have been found to be in the k=8 range, somewhere +between 3000 and 10000 limbs. + + The way N is split into 2^k pieces and then 2M+k+3 is rounded up to a +multiple of 2^k and 'mp_bits_per_limb' means that when +2^k>=mp\_bits\_per\_limb the effective N is a multiple of 2^(2k-1) bits. +The +k+3 means some values of N just under such a multiple will be +rounded to the next. The complexity calculations above assume that a +favourable size is used, meaning one which isn't padded through +rounding, and it's also assumed that the extra +k+3 bits are negligible +at typical FFT sizes. + + The practical effect of the 2^(2k-1) constraint is to introduce a +step-effect into measured speeds. For example k=8 will round N up to a +multiple of 32768 bits, so for a 32-bit limb there'll be 512 limb groups +of sizes for which 'mpn_mul_n' runs at the same speed. Or for k=9 +groups of 2048 limbs, k=10 groups of 8192 limbs, etc. In practice it's +been found each k is used at quite small multiples of its size +constraint and so the step effect is quite noticeable in a time versus +size graph. + + The threshold determinations currently measure at the mid-points of +size steps, but this is sub-optimal since at the start of a new step it +can happen that it's better to go back to the previous k for a while. +Something more sophisticated for 'MUL_FFT_TABLE' and 'SQR_FFT_TABLE' +will be needed. + + +File: gmp.info, Node: Other Multiplication, Next: Unbalanced Multiplication, Prev: FFT Multiplication, Up: Multiplication Algorithms + +15.1.7 Other Multiplication +--------------------------- + +The Toom algorithms described above (*note Toom 3-Way Multiplication::, +*note Toom 4-Way Multiplication::) generalizes to split into an +arbitrary number of pieces, as per Knuth section 4.3.3 algorithm C. +This is not currently used. The notes here are merely for interest. + + In general a split into r+1 pieces is made, and evaluations and +pointwise multiplications done at 2*r+1 points. A 4-way split does 7 +pointwise multiplies, 5-way does 9, etc. Asymptotically an (r+1)-way +algorithm is O(N^(log(2*r+1)/log(r+1))). Only the pointwise +multiplications count towards big-O complexity, but the time spent in +the evaluate and interpolate stages grows with r and has a significant +practical impact, with the asymptotic advantage of each r realized only +at bigger and bigger sizes. The overheads grow as O(N*r), whereas in an +r=2^k FFT they grow only as O(N*log(r)). + + Knuth algorithm C evaluates at points 0,1,2,...,2*r, but exercise 4 +uses -r,...,0,...,r and the latter saves some small multiplies in the +evaluate stage (or rather trades them for additions), and has a further +saving of nearly half the interpolate steps. The idea is to separate +odd and even final coefficients and then perform algorithm C steps C7 +and C8 on them separately. The divisors at step C7 become j^2 and the +multipliers at C8 become 2*t*j-j^2. + + Splitting odd and even parts through positive and negative points can +be thought of as using -1 as a square root of unity. If a 4th root of +unity was available then a further split and speedup would be possible, +but no such root exists for plain integers. Going to complex integers +with i=sqrt(-1) doesn't help, essentially because in Cartesian form it +takes three real multiplies to do a complex multiply. The existence of +2^k'th roots of unity in a suitable ring or field lets the fast Fourier +transform keep splitting and get to O(N*log(r)). + + Floating point FFTs use complex numbers approximating Nth roots of +unity. Some processors have special support for such FFTs. But these +are not used in GMP since it's very difficult to guarantee an exact +result (to some number of bits). An occasional difference of 1 in the +last bit might not matter to a typical signal processing algorithm, but +is of course of vital importance to GMP. + + +File: gmp.info, Node: Unbalanced Multiplication, Prev: Other Multiplication, Up: Multiplication Algorithms + +15.1.8 Unbalanced Multiplication +-------------------------------- + +Multiplication of operands with different sizes, both below +'MUL_TOOM22_THRESHOLD' are done with plain schoolbook multiplication +(*note Basecase Multiplication::). + + For really large operands, we invoke FFT directly. + + For operands between these sizes, we use Toom inspired algorithms +suggested by Alberto Zanoni and Marco Bodrato. The idea is to split the +operands into polynomials of different degree. GMP currently splits the +smaller operand into 2 coefficients, i.e., a polynomial of degree 1, but +the larger operand can be split into 2, 3, or 4 coefficients, i.e., a +polynomial of degree 1 to 3. + + +File: gmp.info, Node: Division Algorithms, Next: Greatest Common Divisor Algorithms, Prev: Multiplication Algorithms, Up: Algorithms + +15.2 Division Algorithms +======================== + +* Menu: + +* Single Limb Division:: +* Basecase Division:: +* Divide and Conquer Division:: +* Block-Wise Barrett Division:: +* Exact Division:: +* Exact Remainder:: +* Small Quotient Division:: + + +File: gmp.info, Node: Single Limb Division, Next: Basecase Division, Prev: Division Algorithms, Up: Division Algorithms + +15.2.1 Single Limb Division +--------------------------- + +Nx1 division is implemented using repeated 2x1 divisions from high to +low, either with a hardware divide instruction or a multiplication by +inverse, whichever is best on a given CPU. + + The multiply by inverse follows "Improved division by invariant +integers" by Möller and Granlund (*note References::) and is implemented +as 'udiv_qrnnd_preinv' in 'gmp-impl.h'. The idea is to have a +fixed-point approximation to 1/d (see 'invert_limb') and then multiply +by the high limb (plus one bit) of the dividend to get a quotient q. +With d normalized (high bit set), q is no more than 1 too small. +Subtracting q*d from the dividend gives a remainder, and reveals whether +q or q-1 is correct. + + The result is a division done with two multiplications and four or +five arithmetic operations. On CPUs with low latency multipliers this +can be much faster than a hardware divide, though the cost of +calculating the inverse at the start may mean it's only better on inputs +bigger than say 4 or 5 limbs. + + When a divisor must be normalized, either for the generic C +'__udiv_qrnnd_c' or the multiply by inverse, the division performed is +actually a*2^k by d*2^k where a is the dividend and k is the power +necessary to have the high bit of d*2^k set. The bit shifts for the +dividend are usually accomplished "on the fly" meaning by extracting the +appropriate bits at each step. Done this way the quotient limbs come +out aligned ready to store. When only the remainder is wanted, an +alternative is to take the dividend limbs unshifted and calculate r = a +mod d*2^k followed by an extra final step r*2^k mod d*2^k. This can +help on CPUs with poor bit shifts or few registers. + + The multiply by inverse can be done two limbs at a time. The +calculation is basically the same, but the inverse is two limbs and the +divisor treated as if padded with a low zero limb. This means more +work, since the inverse will need a 2x2 multiply, but the four 1x1s to +do that are independent and can therefore be done partly or wholly in +parallel. Likewise for a 2x1 calculating q*d. The net effect is to +process two limbs with roughly the same two multiplies worth of latency +that one limb at a time gives. This extends to 3 or 4 limbs at a time, +though the extra work to apply the inverse will almost certainly soon +reach the limits of multiplier throughput. + + A similar approach in reverse can be taken to process just half a +limb at a time if the divisor is only a half limb. In this case the 1x1 +multiply for the inverse effectively becomes two (1/2)x1 for each limb, +which can be a saving on CPUs with a fast half limb multiply, or in fact +if the only multiply is a half limb, and especially if it's not +pipelined. + + +File: gmp.info, Node: Basecase Division, Next: Divide and Conquer Division, Prev: Single Limb Division, Up: Division Algorithms + +15.2.2 Basecase Division +------------------------ + +Basecase NxM division is like long division done by hand, but in base +2^mp_bits_per_limb. See Knuth section 4.3.1 algorithm D, and +'mpn/generic/sb_divrem_mn.c'. + + Briefly stated, while the dividend remains larger than the divisor, a +high quotient limb is formed and the Nx1 product q*d subtracted at the +top end of the dividend. With a normalized divisor (most significant +bit set), each quotient limb can be formed with a 2x1 division and a 1x1 +multiplication plus some subtractions. The 2x1 division is by the high +limb of the divisor and is done either with a hardware divide or a +multiply by inverse (the same as in *note Single Limb Division::) +whichever is faster. Such a quotient is sometimes one too big, +requiring an addback of the divisor, but that happens rarely. + + With Q=N-M being the number of quotient limbs, this is an O(Q*M) +algorithm and will run at a speed similar to a basecase QxM +multiplication, differing in fact only in the extra multiply and divide +for each of the Q quotient limbs. + diff --git a/misc/builddeps/emscripten/gmp/share/info/gmp.info-2 b/misc/builddeps/emscripten/gmp/share/info/gmp.info-2 new file mode 100644 index 00000000..af839fbf --- /dev/null +++ b/misc/builddeps/emscripten/gmp/share/info/gmp.info-2 @@ -0,0 +1,4104 @@ +This is gmp.info, produced by makeinfo version 6.7 from gmp.texi. + +This manual describes how to install and use the GNU multiple precision +arithmetic library, version 6.3.0. + + Copyright 1991, 1993-2016, 2018-2020 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being "A GNU Manual", and +with the Back-Cover Texts being "You have freedom to copy and modify +this GNU Manual, like GNU software". A copy of the license is included +in *note GNU Free Documentation License::. +INFO-DIR-SECTION GNU libraries +START-INFO-DIR-ENTRY +* gmp: (gmp). GNU Multiple Precision Arithmetic Library. +END-INFO-DIR-ENTRY + + +File: gmp.info, Node: Divide and Conquer Division, Next: Block-Wise Barrett Division, Prev: Basecase Division, Up: Division Algorithms + +15.2.3 Divide and Conquer Division +---------------------------------- + +For divisors larger than 'DC_DIV_QR_THRESHOLD', division is done by +dividing. Or to be precise by a recursive divide and conquer algorithm +based on work by Moenck and Borodin, Jebelean, and Burnikel and Ziegler +(*note References::). + + The algorithm consists essentially of recognising that a 2NxN +division can be done with the basecase division algorithm (*note +Basecase Division::), but using N/2 limbs as a base, not just a single +limb. This way the multiplications that arise are (N/2)x(N/2) and can +take advantage of Karatsuba and higher multiplication algorithms (*note +Multiplication Algorithms::). The two "digits" of the quotient are +formed by recursive Nx(N/2) divisions. + + If the (N/2)x(N/2) multiplies are done with a basecase multiplication +then the work is about the same as a basecase division, but with more +function call overheads and with some subtractions separated from the +multiplies. These overheads mean that it's only when N/2 is above +'MUL_TOOM22_THRESHOLD' that divide and conquer is of use. + + 'DC_DIV_QR_THRESHOLD' is based on the divisor size N, so it will be +somewhere above twice 'MUL_TOOM22_THRESHOLD', but how much above depends +on the CPU. An optimized 'mpn_mul_basecase' can lower +'DC_DIV_QR_THRESHOLD' a little by offering a ready-made advantage over +repeated 'mpn_submul_1' calls. + + Divide and conquer is asymptotically O(M(N)*log(N)) where M(N) is the +time for an NxN multiplication done with FFTs. The actual time is a sum +over multiplications of the recursed sizes, as can be seen near the end +of section 2.2 of Burnikel and Ziegler. For example, within the Toom-3 +range, divide and conquer is 2.63*M(N). With higher algorithms the M(N) +term improves and the multiplier tends to log(N). In practice, at +moderate to large sizes, a 2NxN division is about 2 to 4 times slower +than an NxN multiplication. + + +File: gmp.info, Node: Block-Wise Barrett Division, Next: Exact Division, Prev: Divide and Conquer Division, Up: Division Algorithms + +15.2.4 Block-Wise Barrett Division +---------------------------------- + +For the largest divisions, a block-wise Barrett division algorithm is +used. Here, the divisor is inverted to a precision determined by the +relative size of the dividend and divisor. Blocks of quotient limbs are +then generated by multiplying blocks from the dividend by the inverse. + + Our block-wise algorithm computes a smaller inverse than in the plain +Barrett algorithm. For a 2n/n division, the inverse will be just +ceil(n/2) limbs. + + +File: gmp.info, Node: Exact Division, Next: Exact Remainder, Prev: Block-Wise Barrett Division, Up: Division Algorithms + +15.2.5 Exact Division +--------------------- + +A so-called exact division is when the dividend is known to be an exact +multiple of the divisor. Jebelean's exact division algorithm uses this +knowledge to make some significant optimizations (*note References::). + + The idea can be illustrated in decimal for example with 368154 +divided by 543. Because the low digit of the dividend is 4, the low +digit of the quotient must be 8. This is arrived at from 4*7 mod 10, +using the fact 7 is the modular inverse of 3 (the low digit of the +divisor), since 3*7 == 1 mod 10. So 8*543=4344 can be subtracted from +the dividend leaving 363810. Notice the low digit has become zero. + + The procedure is repeated at the second digit, with the next quotient +digit 7 (7 == 1*7 mod 10), subtracting 7*543=3801, leaving 325800. And +finally at the third digit with quotient digit 6 (8*7 mod 10), +subtracting 6*543=3258 leaving 0. So the quotient is 678. + + Notice however that the multiplies and subtractions don't need to +extend past the low three digits of the dividend, since that's enough to +determine the three quotient digits. For the last quotient digit no +subtraction is needed at all. On a 2NxN division like this one, only +about half the work of a normal basecase division is necessary. + + For an NxM exact division producing Q=N-M quotient limbs, the saving +over a normal basecase division is in two parts. Firstly, each of the Q +quotient limbs needs only one multiply, not a 2x1 divide and multiply. +Secondly, the crossproducts are reduced when Q>M to Q*M-M*(M+1)/2, or +when Q<=M to Q*(Q-1)/2. Notice the savings are complementary. If Q is +big then many divisions are saved, or if Q is small then the +crossproducts reduce to a small number. + + The modular inverse used is calculated efficiently by 'binvert_limb' +in 'gmp-impl.h'. This does four multiplies for a 32-bit limb, or six +for a 64-bit limb. 'tune/modlinv.c' has some alternate implementations +that might suit processors better at bit twiddling than multiplying. + + The sub-quadratic exact division described by Jebelean in "Exact +Division with Karatsuba Complexity" is not currently implemented. It +uses a rearrangement similar to the divide and conquer for normal +division (*note Divide and Conquer Division::), but operating from low +to high. A further possibility not currently implemented is +"Bidirectional Exact Integer Division" by Krandick and Jebelean which +forms quotient limbs from both the high and low ends of the dividend, +and can halve once more the number of crossproducts needed in a 2NxN +division. + + A special case exact division by 3 exists in 'mpn_divexact_by3', +supporting Toom-3 multiplication and 'mpq' canonicalizations. It forms +quotient digits with a multiply by the modular inverse of 3 (which is +'0xAA..AAB') and uses two comparisons to determine a borrow for the next +limb. The multiplications don't need to be on the dependent chain, as +long as the effect of the borrows is applied, which can help chips with +pipelined multipliers. + + +File: gmp.info, Node: Exact Remainder, Next: Small Quotient Division, Prev: Exact Division, Up: Division Algorithms + +15.2.6 Exact Remainder +---------------------- + +If the exact division algorithm is done with a full subtraction at each +stage and the dividend isn't a multiple of the divisor, then low zero +limbs are produced but with a remainder in the high limbs. For dividend +a, divisor d, quotient q, and b = 2^mp_bits_per_limb, this remainder r +is of the form + + a = q*d + r*b^n + + n represents the number of zero limbs produced by the subtractions, +that being the number of limbs produced for q. r will be in the range +0<=rb*r+u2 condition appropriately relaxed. + + +File: gmp.info, Node: Greatest Common Divisor Algorithms, Next: Powering Algorithms, Prev: Division Algorithms, Up: Algorithms + +15.3 Greatest Common Divisor +============================ + +* Menu: + +* Binary GCD:: +* Lehmer's Algorithm:: +* Subquadratic GCD:: +* Extended GCD:: +* Jacobi Symbol:: + + +File: gmp.info, Node: Binary GCD, Next: Lehmer's Algorithm, Prev: Greatest Common Divisor Algorithms, Up: Greatest Common Divisor Algorithms + +15.3.1 Binary GCD +----------------- + +At small sizes GMP uses an O(N^2) binary style GCD. This is described +in many textbooks, for example Knuth section 4.5.2 algorithm B. It +simply consists of successively reducing odd operands a and b using + + a,b = abs(a-b),min(a,b) + strip factors of 2 from a + + The Euclidean GCD algorithm, as per Knuth algorithms E and A, +repeatedly computes the quotient q = floor(a/b) and replaces a,b by v, u +- q v. The binary algorithm has so far been found to be faster than the +Euclidean algorithm everywhere. One reason the binary method does well +is that the implied quotient at each step is usually small, so often +only one or two subtractions are needed to get the same effect as a +division. Quotients 1, 2 and 3 for example occur 67.7% of the time, see +Knuth section 4.5.3 Theorem E. + + When the implied quotient is large, meaning b is much smaller than a, +then a division is worthwhile. This is the basis for the initial a mod +b reductions in 'mpn_gcd' and 'mpn_gcd_1' (the latter for both Nx1 and +1x1 cases). But after that initial reduction, big quotients occur too +rarely to make it worth checking for them. + + + The final 1x1 GCD in 'mpn_gcd_1' is done in the generic C code as +described above. For two N-bit operands, the algorithm takes about 0.68 +iterations per bit. For optimum performance some attention needs to be +paid to the way the factors of 2 are stripped from a. + + Firstly it may be noted that in two's complement the number of low +zero bits on a-b is the same as b-a, so counting or testing can begin on +a-b without waiting for abs(a-b) to be determined. + + A loop stripping low zero bits tends not to branch predict well, +since the condition is data dependent. But on average there's only a +few low zeros, so an option is to strip one or two bits arithmetically +then loop for more (as done for AMD K6). Or use a lookup table to get a +count for several bits then loop for more (as done for AMD K7). An +alternative approach is to keep just one of a and b odd and iterate + + a,b = abs(a-b), min(a,b) + a = a/2 if even + b = b/2 if even + + This requires about 1.25 iterations per bit, but stripping of a +single bit at each step avoids any branching. Repeating the bit strip +reduces to about 0.9 iterations per bit, which may be a worthwhile +tradeoff. + + Generally with the above approaches a speed of perhaps 6 cycles per +bit can be achieved, which is still not terribly fast with for instance +a 64-bit GCD taking nearly 400 cycles. It's this sort of time which +means it's not usually advantageous to combine a set of divisibility +tests into a GCD. + + Currently, the binary algorithm is used for GCD only when N < 3. + + +File: gmp.info, Node: Lehmer's Algorithm, Next: Subquadratic GCD, Prev: Binary GCD, Up: Greatest Common Divisor Algorithms + +15.3.2 Lehmer's algorithm +------------------------- + +Lehmer's improvement of the Euclidean algorithms is based on the +observation that the initial part of the quotient sequence depends only +on the most significant parts of the inputs. The variant of Lehmer's +algorithm used in GMP splits off the most significant two limbs, as +suggested, e.g., in "A Double-Digit Lehmer-Euclid Algorithm" by Jebelean +(*note References::). The quotients of two double-limb inputs are +collected as a 2 by 2 matrix with single-limb elements. This is done by +the function 'mpn_hgcd2'. The resulting matrix is applied to the inputs +using 'mpn_mul_1' and 'mpn_submul_1'. Each iteration usually reduces +the inputs by almost one limb. In the rare case of a large quotient, no +progress can be made by examining just the most significant two limbs, +and the quotient is computed using plain division. + + The resulting algorithm is asymptotically O(N^2), just as the +Euclidean algorithm and the binary algorithm. The quadratic part of the +work are the calls to 'mpn_mul_1' and 'mpn_submul_1'. For small sizes, +the linear work is also significant. There are roughly N calls to the +'mpn_hgcd2' function. This function uses a couple of important +optimizations: + + * It uses the same relaxed notion of correctness as 'mpn_hgcd' (see + next section). This means that when called with the most + significant two limbs of two large numbers, the returned matrix + does not always correspond exactly to the initial quotient sequence + for the two large numbers; the final quotient may sometimes be one + off. + + * It takes advantage of the fact that the quotients are usually + small. The division operator is not used, since the corresponding + assembler instruction is very slow on most architectures. (This + code could probably be improved further, it uses many branches that + are unfriendly to prediction.) + + * It switches from double-limb calculations to single-limb + calculations half-way through, when the input numbers have been + reduced in size from two limbs to one and a half. + + +File: gmp.info, Node: Subquadratic GCD, Next: Extended GCD, Prev: Lehmer's Algorithm, Up: Greatest Common Divisor Algorithms + +15.3.3 Subquadratic GCD +----------------------- + +For inputs larger than 'GCD_DC_THRESHOLD', GCD is computed via the HGCD +(Half GCD) function, as a generalization to Lehmer's algorithm. + + Let the inputs a,b be of size N limbs each. Put S = floor(N/2) + 1. +Then HGCD(a,b) returns a transformation matrix T with non-negative +elements, and reduced numbers (c;d) = T^{-1} (a;b). The reduced numbers +c,d must be larger than S limbs, while their difference abs(c-d) must +fit in S limbs. The matrix elements will also be of size roughly N/2. + + The HGCD base case uses Lehmer's algorithm, but with the above stop +condition that returns reduced numbers and the corresponding +transformation matrix half-way through. For inputs larger than +'HGCD_THRESHOLD', HGCD is computed recursively, using the divide and +conquer algorithm in "On Schönhage's algorithm and subquadratic integer +GCD computation" by Möller (*note References::). The recursive +algorithm consists of these main steps. + + * Call HGCD recursively, on the most significant N/2 limbs. Apply + the resulting matrix T_1 to the full numbers, reducing them to a + size just above 3N/2. + + * Perform a small number of division or subtraction steps to reduce + the numbers to size below 3N/2. This is essential mainly for the + unlikely case of large quotients. + + * Call HGCD recursively, on the most significant N/2 limbs of the + reduced numbers. Apply the resulting matrix T_2 to the full + numbers, reducing them to a size just above N/2. + + * Compute T = T_1 T_2. + + * Perform a small number of division and subtraction steps to satisfy + the requirements, and return. + + GCD is then implemented as a loop around HGCD, similarly to Lehmer's +algorithm. Where Lehmer repeatedly chops off the top two limbs, calls +'mpn_hgcd2', and applies the resulting matrix to the full numbers, the +sub-quadratic GCD chops off the most significant third of the limbs (the +proportion is a tuning parameter, and 1/3 seems to be more efficient +than, e.g., 1/2), calls 'mpn_hgcd', and applies the resulting matrix. +Once the input numbers are reduced to size below 'GCD_DC_THRESHOLD', +Lehmer's algorithm is used for the rest of the work. + + The asymptotic running time of both HGCD and GCD is O(M(N)*log(N)), +where M(N) is the time for multiplying two N-limb numbers. + + +File: gmp.info, Node: Extended GCD, Next: Jacobi Symbol, Prev: Subquadratic GCD, Up: Greatest Common Divisor Algorithms + +15.3.4 Extended GCD +------------------- + +The extended GCD function, or GCDEXT, calculates gcd(a,b) and also +cofactors x and y satisfying a*x+b*y=gcd(a,b). All the algorithms used +for plain GCD are extended to handle this case. The binary algorithm is +used only for single-limb GCDEXT. Lehmer's algorithm is used for sizes +up to 'GCDEXT_DC_THRESHOLD'. Above this threshold, GCDEXT is +implemented as a loop around HGCD, but with more book-keeping to keep +track of the cofactors. This gives the same asymptotic running time as +for GCD and HGCD, O(M(N)*log(N)). + + One difference to plain GCD is that while the inputs a and b are +reduced as the algorithm proceeds, the cofactors x and y grow in size. +This makes the tuning of the chopping-point more difficult. The current +code chops off the most significant half of the inputs for the call to +HGCD in the first iteration, and the most significant two thirds for the +remaining calls. This strategy could surely be improved. Also the stop +condition for the loop, where Lehmer's algorithm is invoked once the +inputs are reduced below 'GCDEXT_DC_THRESHOLD', could maybe be improved +by taking into account the current size of the cofactors. + + +File: gmp.info, Node: Jacobi Symbol, Prev: Extended GCD, Up: Greatest Common Divisor Algorithms + +15.3.5 Jacobi Symbol +-------------------- + +Jacobi symbol (A/B) + + Initially if either operand fits in a single limb, a reduction is +done with either 'mpn_mod_1' or 'mpn_modexact_1_odd', followed by the +binary algorithm on a single limb. The binary algorithm is well suited +to a single limb, and the whole calculation in this case is quite +efficient. + + For inputs larger than 'GCD_DC_THRESHOLD', 'mpz_jacobi', +'mpz_legendre' and 'mpz_kronecker' are computed via the HGCD (Half GCD) +function, as a generalization to Lehmer's algorithm. + + Most GCD algorithms reduce a and b by repeatedly computing the +quotient q = floor(a/b) and iteratively replacing + + a, b = b, a - q * b + + Different algorithms use different methods for calculating q, but the +core algorithm is the same if we use *note Lehmer's Algorithm:: or *note +HGCD: Subquadratic GCD. + + At each step it is possible to compute if the reduction inverts the +Jacobi symbol based on the two least significant bits of A and B. For +more details see "Efficient computation of the Jacobi symbol" by Möller +(*note References::). + + A small set of bits is thus used to track state + * current sign of result (1 bit) + + * two least significant bits of A and B (4 bits) + + * a pointer to which input is currently the denominator (1 bit) + + In all the routines sign changes for the result are accumulated using +fast bit twiddling which avoids conditional jumps. + + The final result is calculated after verifying the inputs are coprime +(GCD = 1) by raising (-1)^e. + + Much of the HGCD code is shared directly with the HGCD +implementations, such as the 2x2 matrix calculation, *Note Lehmer's +Algorithm:: basecase and 'GCD_DC_THRESHOLD'. + + The asymptotic running time is O(M(N)*log(N)), where M(N) is the time +for multiplying two N-limb numbers. + + +File: gmp.info, Node: Powering Algorithms, Next: Root Extraction Algorithms, Prev: Greatest Common Divisor Algorithms, Up: Algorithms + +15.4 Powering Algorithms +======================== + +* Menu: + +* Normal Powering Algorithm:: +* Modular Powering Algorithm:: + + +File: gmp.info, Node: Normal Powering Algorithm, Next: Modular Powering Algorithm, Prev: Powering Algorithms, Up: Powering Algorithms + +15.4.1 Normal Powering +---------------------- + +Normal 'mpz' or 'mpf' powering uses a simple binary algorithm, +successively squaring and then multiplying by the base when a 1 bit is +seen in the exponent, as per Knuth section 4.6.3. The "left to right" +variant described there is used rather than algorithm A, since it's just +as easy and can be done with somewhat less temporary memory. + + +File: gmp.info, Node: Modular Powering Algorithm, Prev: Normal Powering Algorithm, Up: Powering Algorithms + +15.4.2 Modular Powering +----------------------- + +Modular powering is implemented using a 2^k-ary sliding window +algorithm, as per "Handbook of Applied Cryptography" algorithm 14.85 +(*note References::). k is chosen according to the size of the +exponent. Larger exponents use larger values of k, the choice being +made to minimize the average number of multiplications that must +supplement the squaring. + + The modular multiplies and squarings use either a simple division or +the REDC method by Montgomery (*note References::). REDC is a little +faster, essentially saving N single limb divisions in a fashion similar +to an exact remainder (*note Exact Remainder::). + + +File: gmp.info, Node: Root Extraction Algorithms, Next: Radix Conversion Algorithms, Prev: Powering Algorithms, Up: Algorithms + +15.5 Root Extraction Algorithms +=============================== + +* Menu: + +* Square Root Algorithm:: +* Nth Root Algorithm:: +* Perfect Square Algorithm:: +* Perfect Power Algorithm:: + + +File: gmp.info, Node: Square Root Algorithm, Next: Nth Root Algorithm, Prev: Root Extraction Algorithms, Up: Root Extraction Algorithms + +15.5.1 Square Root +------------------ + +Square roots are taken using the "Karatsuba Square Root" algorithm by +Paul Zimmermann (*note References::). + + An input n is split into four parts of k bits each, so with b=2^k we +have n = a3*b^3 + a2*b^2 + a1*b + a0. Part a3 must be "normalized" so +that either the high or second highest bit is set. In GMP, k is kept on +a limb boundary and the input is left shifted (by an even number of +bits) to normalize. + + The square root of the high two parts is taken, by recursive +application of the algorithm (bottoming out in a one-limb Newton's +method), + + s1,r1 = sqrtrem (a3*b + a2) + + This is an approximation to the desired root and is extended by a +division to give s,r, + + q,u = divrem (r1*b + a1, 2*s1) + s = s1*b + q + r = u*b + a0 - q^2 + + The normalization requirement on a3 means at this point s is either +correct or 1 too big. r is negative in the latter case, so + + if r < 0 then + r = r + 2*s - 1 + s = s - 1 + + The algorithm is expressed in a divide and conquer form, but as noted +in the paper it can also be viewed as a discrete variant of Newton's +method, or as a variation on the schoolboy method (no longer taught) for +square roots two digits at a time. + + If the remainder r is not required then usually only a few high limbs +of r and u need to be calculated to determine whether an adjustment to s +is required. This optimization is not currently implemented. + + In the Karatsuba multiplication range this algorithm is +O(1.5*M(N/2)), where M(n) is the time to multiply two numbers of n +limbs. In the FFT multiplication range this grows to a bound of +O(6*M(N/2)). In practice a factor of about 1.5 to 1.8 is found in the +Karatsuba and Toom-3 ranges, growing to 2 or 3 in the FFT range. + + The algorithm does all its calculations in integers and the resulting +'mpn_sqrtrem' is used for both 'mpz_sqrt' and 'mpf_sqrt'. The extended +precision given by 'mpf_sqrt_ui' is obtained by padding with zero limbs. + + +File: gmp.info, Node: Nth Root Algorithm, Next: Perfect Square Algorithm, Prev: Square Root Algorithm, Up: Root Extraction Algorithms + +15.5.2 Nth Root +--------------- + +Integer Nth roots are taken using Newton's method with the following +iteration, where A is the input and n is the root to be taken. + + 1 A + a[i+1] = - * ( --------- + (n-1)*a[i] ) + n a[i]^(n-1) + + The initial approximation a[1] is generated bitwise by successively +powering a trial root with or without new 1 bits, aiming to be just +above the true root. The iteration converges quadratically when started +from a good approximation. When n is large more initial bits are needed +to get good convergence. The current implementation is not particularly +well optimized. + + +File: gmp.info, Node: Perfect Square Algorithm, Next: Perfect Power Algorithm, Prev: Nth Root Algorithm, Up: Root Extraction Algorithms + +15.5.3 Perfect Square +--------------------- + +A significant fraction of non-squares can be quickly identified by +checking whether the input is a quadratic residue modulo small integers. + + 'mpz_perfect_square_p' first tests the input mod 256, which means +just examining the low byte. Only 44 different values occur for squares +mod 256, so 82.8% of inputs can be immediately identified as +non-squares. + + On a 32-bit system similar tests are done mod 9, 5, 7, 13 and 17, for +a total 99.25% of inputs identified as non-squares. On a 64-bit system +97 is tested too, for a total 99.62%. + + These moduli are chosen because they're factors of 2^24-1 (or 2^48-1 +for 64-bits), and such a remainder can be quickly taken just using +additions (see 'mpn_mod_34lsub1'). + + When nails are in use moduli are instead selected by the 'gen-psqr.c' +program and applied with an 'mpn_mod_1'. The same 2^24-1 or 2^48-1 +could be done with nails using some extra bit shifts, but this is not +currently implemented. + + In any case each modulus is applied to the 'mpn_mod_34lsub1' or +'mpn_mod_1' remainder and a table lookup identifies non-squares. By +using a "modexact" style calculation, and suitably permuted tables, just +one multiply each is required, see the code for details. Moduli are +also combined to save operations, so long as the lookup tables don't +become too big. 'gen-psqr.c' does all the pre-calculations. + + A square root must still be taken for any value that passes these +tests, to verify it's really a square and not one of the small fraction +of non-squares that get through (i.e. a pseudo-square to all the tested +bases). + + Clearly more residue tests could be done, 'mpz_perfect_square_p' only +uses a compact and efficient set. Big inputs would probably benefit +from more residue testing, small inputs might be better off with less. +The assumed distribution of squares versus non-squares in the input +would affect such considerations. + + +File: gmp.info, Node: Perfect Power Algorithm, Prev: Perfect Square Algorithm, Up: Root Extraction Algorithms + +15.5.4 Perfect Power +-------------------- + +Detecting perfect powers is required by some factorization algorithms. +Currently 'mpz_perfect_power_p' is implemented using repeated Nth root +extractions, though naturally only prime roots need to be considered. +(*Note Nth Root Algorithm::.) + + If a prime divisor p with multiplicity e can be found, then only +roots which are divisors of e need to be considered, much reducing the +work necessary. To this end divisibility by a set of small primes is +checked. + + +File: gmp.info, Node: Radix Conversion Algorithms, Next: Other Algorithms, Prev: Root Extraction Algorithms, Up: Algorithms + +15.6 Radix Conversion +===================== + +Radix conversions are less important than other algorithms. A program +dominated by conversions should probably use a different data +representation. + +* Menu: + +* Binary to Radix:: +* Radix to Binary:: + + +File: gmp.info, Node: Binary to Radix, Next: Radix to Binary, Prev: Radix Conversion Algorithms, Up: Radix Conversion Algorithms + +15.6.1 Binary to Radix +---------------------- + +Conversions from binary to a power-of-2 radix use a simple and fast O(N) +bit extraction algorithm. + + Conversions from binary to other radices use one of two algorithms. +Sizes below 'GET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. +Repeated divisions by b^n are made, where b is the radix and n is the +biggest power that fits in a limb. But instead of simply using the +remainder r from such divisions, an extra divide step is done to give a +fractional limb representing r/b^n. The digits of r can then be +extracted using multiplications by b rather than divisions. Special +case code is provided for decimal, allowing multiplications by 10 to +optimize to shifts and adds. + + Above 'GET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is +used. For an input t, powers b^(n*2^i) of the radix are calculated, +until a power between t and sqrt(t) is reached. t is then divided by +that largest power, giving a quotient which is the digits above that +power, and a remainder which is those below. These two parts are in +turn divided by the second highest power, and so on recursively. When a +piece has been divided down to less than 'GET_STR_DC_THRESHOLD' limbs, +the basecase algorithm described above is used. + + The advantage of this algorithm is that big divisions can make use of +the sub-quadratic divide and conquer division (*note Divide and Conquer +Division::), and big divisions tend to have less overheads than lots of +separate single limb divisions anyway. But in any case the cost of +calculating the powers b^(n*2^i) must first be overcome. + + 'GET_STR_PRECOMPUTE_THRESHOLD' and 'GET_STR_DC_THRESHOLD' represent +the same basic thing, the point where it becomes worth doing a big +division to cut the input in half. 'GET_STR_PRECOMPUTE_THRESHOLD' +includes the cost of calculating the radix power required, whereas +'GET_STR_DC_THRESHOLD' assumes that's already available, which is the +case when recursing. + + Since the base case produces digits from least to most significant +but they want to be stored from most to least, it's necessary to +calculate in advance how many digits there will be, or at least be sure +not to underestimate that. For GMP the number of input bits is +multiplied by 'chars_per_bit_exactly' from 'mp_bases', rounding up. The +result is either correct or one too big. + + Examining some of the high bits of the input could increase the +chance of getting the exact number of digits, but an exact result every +time would not be practical, since in general the difference between +numbers 100... and 99... is only in the last few bits and the work to +identify 99... might well be almost as much as a full conversion. + + The r/b^n scheme described above for using multiplications to bring +out digits might be useful for more than a single limb. Some brief +experiments with it on the base case when recursing didn't give a +noticeable improvement, but perhaps that was only due to the +implementation. Something similar would work for the sub-quadratic +divisions too, though there would be the cost of calculating a bigger +radix power. + + Another possible improvement for the sub-quadratic part would be to +arrange for radix powers that balanced the sizes of quotient and +remainder produced, i.e. the highest power would be an b^(n*k) +approximately equal to sqrt(t), not restricted to a 2^i factor. That +ought to smooth out a graph of times against sizes, but may or may not +be a net speedup. + + +File: gmp.info, Node: Radix to Binary, Prev: Binary to Radix, Up: Radix Conversion Algorithms + +15.6.2 Radix to Binary +---------------------- + +*This section needs to be rewritten, it currently describes the +algorithms used before GMP 4.3.* + + Conversions from a power-of-2 radix into binary use a simple and fast +O(N) bitwise concatenation algorithm. + + Conversions from other radices use one of two algorithms. Sizes +below 'SET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. Groups +of n digits are converted to limbs, where n is the biggest power of the +base b which will fit in a limb, then those groups are accumulated into +the result by multiplying by b^n and adding. This saves multi-precision +operations, as per Knuth section 4.4 part E (*note References::). Some +special case code is provided for decimal, giving the compiler a chance +to optimize multiplications by 10. + + Above 'SET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is +used. First groups of n digits are converted into limbs. Then adjacent +limbs are combined into limb pairs with x*b^n+y, where x and y are the +limbs. Adjacent limb pairs are combined into quads similarly with +x*b^(2n)+y. This continues until a single block remains, that being the +result. + + The advantage of this method is that the multiplications for each x +are big blocks, allowing Karatsuba and higher algorithms to be used. +But the cost of calculating the powers b^(n*2^i) must be overcome. +'SET_STR_PRECOMPUTE_THRESHOLD' usually ends up quite big, around 5000 +digits, and on some processors much bigger still. + + 'SET_STR_PRECOMPUTE_THRESHOLD' is based on the input digits (and +tuned for decimal), though it might be better based on a limb count, so +as to be independent of the base. But that sort of count isn't used by +the base case and so would need some sort of initial calculation or +estimate. + + The main reason 'SET_STR_PRECOMPUTE_THRESHOLD' is so much bigger than +the corresponding 'GET_STR_PRECOMPUTE_THRESHOLD' is that 'mpn_mul_1' is +much faster than 'mpn_divrem_1' (often by a factor of 5, or more). + + +File: gmp.info, Node: Other Algorithms, Next: Assembly Coding, Prev: Radix Conversion Algorithms, Up: Algorithms + +15.7 Other Algorithms +===================== + +* Menu: + +* Prime Testing Algorithm:: +* Factorial Algorithm:: +* Binomial Coefficients Algorithm:: +* Fibonacci Numbers Algorithm:: +* Lucas Numbers Algorithm:: +* Random Number Algorithms:: + + +File: gmp.info, Node: Prime Testing Algorithm, Next: Factorial Algorithm, Prev: Other Algorithms, Up: Other Algorithms + +15.7.1 Prime Testing +-------------------- + +The primality testing in 'mpz_probab_prime_p' (*note Number Theoretic +Functions::) first does some trial division by small factors and then +uses the Miller-Rabin probabilistic primality testing algorithm, as +described in Knuth section 4.5.4 algorithm P (*note References::). + + For an odd input n, and with n = q*2^k+1 where q is odd, this +algorithm selects a random base x and tests whether x^q mod n is 1 or +-1, or an x^(q*2^j) mod n is 1, for 1<=j<=k. If so then n is probably +prime, if not then n is definitely composite. + + Any prime n will pass the test, but some composites do too. Such +composites are known as strong pseudoprimes to base x. No n is a strong +pseudoprime to more than 1/4 of all bases (see Knuth exercise 22), hence +with x chosen at random there's no more than a 1/4 chance a "probable +prime" will in fact be composite. + + In fact strong pseudoprimes are quite rare, making the test much more +powerful than this analysis would suggest, but 1/4 is all that's proven +for an arbitrary n. + + +File: gmp.info, Node: Factorial Algorithm, Next: Binomial Coefficients Algorithm, Prev: Prime Testing Algorithm, Up: Other Algorithms + +15.7.2 Factorial +---------------- + +Factorials are calculated by a combination of two algorithms. An idea +is shared among them: to compute the odd part of the factorial; a final +step takes account of the power of 2 term, by shifting. + + For small n, the odd factor of n! is computed with the simple +observation that it is equal to the product of all positive odd numbers +smaller than n times the odd factor of [n/2]!, where [x] is the integer +part of x, and so on recursively. The procedure can be best illustrated +with an example, + + 23! = (23.21.19.17.15.13.11.9.7.5.3)(11.9.7.5.3)(5.3)2^{19} + + Current code collects all the factors in a single list, with a loop +and no recursion, and computes the product, with no special care for +repeated chunks. + + When n is larger, computations pass through prime sieving. A helper +function is used, as suggested by Peter Luschny: + + n + ----- + n! | | L(p,n) + msf(n) = -------------- = | | p + [n/2]!^2.2^k p=3 + + Where p ranges on odd prime numbers. The exponent k is chosen to +obtain an odd integer number: k is the number of 1 bits in the binary +representation of [n/2]. The function L(p,n) can be defined as zero +when p is composite, and, for any prime p, it is computed with: + + --- + \ n + L(p,n) = / [---] mod 2 <= log (n) . + --- p^i p + i>0 + + With this helper function, we are able to compute the odd part of n! +using the recursion implied by n!=[n/2]!^2*msf(n)*2^k. The recursion +stops using the small-n algorithm on some [n/2^i]. + + Both the above algorithms use binary splitting to compute the product +of many small factors. At first as many products as possible are +accumulated in a single register, generating a list of factors that fit +in a machine word. This list is then split into halves, and the product +is computed recursively. + + Such splitting is more efficient than repeated Nx1 multiplies since +it forms big multiplies, allowing Karatsuba and higher algorithms to be +used. And even below the Karatsuba threshold a big block of work can be +more efficient for the basecase algorithm. + + +File: gmp.info, Node: Binomial Coefficients Algorithm, Next: Fibonacci Numbers Algorithm, Prev: Factorial Algorithm, Up: Other Algorithms + +15.7.3 Binomial Coefficients +---------------------------- + +Binomial coefficients C(n,k) are calculated by first arranging k <= n/2 +using C(n,k) = C(n,n-k) if necessary, and then evaluating the following +product simply from i=2 to i=k. + + k (n-k+i) + C(n,k) = (n-k+1) * prod ------- + i=2 i + + It's easy to show that each denominator i will divide the product so +far, so the exact division algorithm is used (*note Exact Division::). + + The numerators n-k+i and denominators i are first accumulated into as +many fit a limb, to save multi-precision operations, though for +'mpz_bin_ui' this applies only to the divisors, since n is an 'mpz_t' +and n-k+i in general won't fit in a limb at all. + + +File: gmp.info, Node: Fibonacci Numbers Algorithm, Next: Lucas Numbers Algorithm, Prev: Binomial Coefficients Algorithm, Up: Other Algorithms + +15.7.4 Fibonacci Numbers +------------------------ + +The Fibonacci functions 'mpz_fib_ui' and 'mpz_fib2_ui' are designed for +calculating isolated F[n] or F[n],F[n-1] values efficiently. + + For small n, a table of single limb values in '__gmp_fib_table' is +used. On a 32-bit limb this goes up to F[47], or on a 64-bit limb up to +F[93]. For convenience the table starts at F[-1]. + + Beyond the table, values are generated with a binary powering +algorithm, calculating a pair F[n] and F[n-1] working from high to low +across the bits of n. The formulas used are + + F[2k+1] = 4*F[k]^2 - F[k-1]^2 + 2*(-1)^k + F[2k-1] = F[k]^2 + F[k-1]^2 + + F[2k] = F[2k+1] - F[2k-1] + + At each step, k is the high b bits of n. If the next bit of n is 0 +then F[2k],F[2k-1] is used, or if it's a 1 then F[2k+1],F[2k] is used, +and the process repeated until all bits of n are incorporated. Notice +these formulas require just two squares per bit of n. + + It'd be possible to handle the first few n above the single limb +table with simple additions, using the defining Fibonacci recurrence +F[k+1]=F[k]+F[k-1], but this is not done since it usually turns out to +be faster for only about 10 or 20 values of n, and including a block of +code for just those doesn't seem worthwhile. If they really mattered +it'd be better to extend the data table. + + Using a table avoids lots of calculations on small numbers, and makes +small n go fast. A bigger table would make more small n go fast, it's +just a question of balancing size against desired speed. For GMP the +code is kept compact, with the emphasis primarily on a good powering +algorithm. + + 'mpz_fib2_ui' returns both F[n] and F[n-1], but 'mpz_fib_ui' is only +interested in F[n]. In this case the last step of the algorithm can +become one multiply instead of two squares. One of the following two +formulas is used, according as n is odd or even. + + F[2k] = F[k]*(F[k]+2F[k-1]) + + F[2k+1] = (2F[k]+F[k-1])*(2F[k]-F[k-1]) + 2*(-1)^k + + F[2k+1] here is the same as above, just rearranged to be a multiply. +For interest, the 2*(-1)^k term both here and above can be applied just +to the low limb of the calculation, without a carry or borrow into +further limbs, which saves some code size. See comments with +'mpz_fib_ui' and the internal 'mpn_fib2_ui' for how this is done. + + +File: gmp.info, Node: Lucas Numbers Algorithm, Next: Random Number Algorithms, Prev: Fibonacci Numbers Algorithm, Up: Other Algorithms + +15.7.5 Lucas Numbers +-------------------- + +'mpz_lucnum2_ui' derives a pair of Lucas numbers from a pair of +Fibonacci numbers with the following simple formulas. + + L[k] = F[k] + 2*F[k-1] + L[k-1] = 2*F[k] - F[k-1] + + 'mpz_lucnum_ui' is only interested in L[n], and some work can be +saved. Trailing zero bits on n can be handled with a single square +each. + + L[2k] = L[k]^2 - 2*(-1)^k + + And the lowest 1 bit can be handled with one multiply of a pair of +Fibonacci numbers, similar to what 'mpz_fib_ui' does. + + L[2k+1] = 5*F[k-1]*(2*F[k]+F[k-1]) - 4*(-1)^k + + +File: gmp.info, Node: Random Number Algorithms, Prev: Lucas Numbers Algorithm, Up: Other Algorithms + +15.7.6 Random Numbers +--------------------- + +For the 'urandomb' functions, random numbers are generated simply by +concatenating bits produced by the generator. As long as the generator +has good randomness properties this will produce well-distributed N bit +numbers. + + For the 'urandomm' functions, random numbers in a range 0<=R48 bit pieces is convenient. With some +care though six 21x32->53 bit products can be used, if one of the lower +two 21-bit pieces also uses the sign bit. + + For the 'mpn_mul_1' family of functions on a 64-bit machine, the +invariant single limb is split at the start, into 3 or 4 pieces. Inside +the loop, the bignum operand is split into 32-bit pieces. Fast +conversion of these unsigned 32-bit pieces to floating point is highly +machine-dependent. In some cases, reading the data into the integer +unit, zero-extending to 64-bits, then transferring to the floating point +unit back via memory is the only option. + + Converting partial products back to 64-bit limbs is usually best done +as a signed conversion. Since all values are smaller than 2^53, signed +and unsigned are the same, but most processors lack unsigned +conversions. + + + + Here is a diagram showing 16x32 bit products for an 'mpn_mul_1' or +'mpn_addmul_1' with a 64-bit limb. The single limb operand V is split +into four 16-bit parts. The multi-limb operand U is split in the loop +into two 32-bit parts. + + +---+---+---+---+ + |v48|v32|v16|v00| V operand + +---+---+---+---+ + + +-------+---+---+ + x | u32 | u00 | U operand (one limb) + +---------------+ + + --------------------------------- + + +-----------+ + | u00 x v00 | p00 48-bit products + +-----------+ + +-----------+ + | u00 x v16 | p16 + +-----------+ + +-----------+ + | u00 x v32 | p32 + +-----------+ + +-----------+ + | u00 x v48 | p48 + +-----------+ + +-----------+ + | u32 x v00 | r32 + +-----------+ + +-----------+ + | u32 x v16 | r48 + +-----------+ + +-----------+ + | u32 x v32 | r64 + +-----------+ + +-----------+ + | u32 x v48 | r80 + +-----------+ + + p32 and r32 can be summed using floating-point addition, and likewise +p48 and r48. p00 and p16 can be summed with r64 and r80 from the +previous iteration. + + For each loop then, four 49-bit quantities are transferred to the +integer unit, aligned as follows, + + |-----64bits----|-----64bits----| + +------------+ + | p00 + r64' | i00 + +------------+ + +------------+ + | p16 + r80' | i16 + +------------+ + +------------+ + | p32 + r32 | i32 + +------------+ + +------------+ + | p48 + r48 | i48 + +------------+ + + The challenge then is to sum these efficiently and add in a carry +limb, generating a low 64-bit result limb and a high 33-bit carry limb +(i48 extends 33 bits into the high half). + + +File: gmp.info, Node: Assembly SIMD Instructions, Next: Assembly Software Pipelining, Prev: Assembly Floating Point, Up: Assembly Coding + +15.8.7 SIMD Instructions +------------------------ + +The single-instruction multiple-data support in current microprocessors +is aimed at signal processing algorithms where each data point can be +treated more or less independently. There's generally not much support +for propagating the sort of carries that arise in GMP. + + SIMD multiplications of say four 16x16 bit multiplies only do as much +work as one 32x32 from GMP's point of view, and need some shifts and +adds besides. But of course if say the SIMD form is fully pipelined and +uses less instruction decoding then it may still be worthwhile. + + On the x86 chips, MMX has so far found a use in 'mpn_rshift' and +'mpn_lshift', and is used in a special case for 16-bit multipliers in +the P55 'mpn_mul_1'. SSE2 is used for Pentium 4 'mpn_mul_1', +'mpn_addmul_1', and 'mpn_submul_1'. + + +File: gmp.info, Node: Assembly Software Pipelining, Next: Assembly Loop Unrolling, Prev: Assembly SIMD Instructions, Up: Assembly Coding + +15.8.8 Software Pipelining +-------------------------- + +Software pipelining consists of scheduling instructions around the +branch point in a loop. For example a loop might issue a load not for +use in the present iteration but the next, thereby allowing extra cycles +for the data to arrive from memory. + + Naturally this is wanted only when doing things like loads or +multiplies that take several cycles to complete, and only where a CPU +has multiple functional units so that other work can be done in the +meantime. + + A pipeline with several stages will have a data value in progress at +each stage and each loop iteration moves them along one stage. This is +like juggling. + + If the latency of some instruction is greater than the loop time then +it will be necessary to unroll, so one register has a result ready to +use while another (or multiple others) are still in progress (*note +Assembly Loop Unrolling::). + + +File: gmp.info, Node: Assembly Loop Unrolling, Next: Assembly Writing Guide, Prev: Assembly Software Pipelining, Up: Assembly Coding + +15.8.9 Loop Unrolling +--------------------- + +Loop unrolling consists of replicating code so that several limbs are +processed in each loop. At a minimum this reduces loop overheads by a +corresponding factor, but it can also allow better register usage, for +example alternately using one register combination and then another. +Judicious use of 'm4' macros can help avoid lots of duplication in the +source code. + + Any amount of unrolling can be handled with a loop counter that's +decremented by N each time, stopping when the remaining count is less +than the further N the loop will process. Or by subtracting N at the +start, the termination condition becomes when the counter C is less than +0 (and the count of remaining limbs is C+N). + + Alternately for a power of 2 unroll the loop count and remainder can +be established with a shift and mask. This is convenient if also making +a computed jump into the middle of a large loop. + + The limbs not a multiple of the unrolling can be handled in various +ways, for example + + * A simple loop at the end (or the start) to process the excess. + Care will be wanted that it isn't too much slower than the unrolled + part. + + * A set of binary tests, for example after an 8-limb unrolling, test + for 4 more limbs to process, then a further 2 more or not, and + finally 1 more or not. This will probably take more code space + than a simple loop. + + * A 'switch' statement, providing separate code for each possible + excess, for example an 8-limb unrolling would have separate code + for 0 remaining, 1 remaining, etc, up to 7 remaining. This might + take a lot of code, but may be the best way to optimize all cases + in combination with a deep pipelined loop. + + * A computed jump into the middle of the loop, thus making the first + iteration handle the excess. This should make times smoothly + increase with size, which is attractive, but setups for the jump + and adjustments for pointers can be tricky and could become quite + difficult in combination with deep pipelining. + + +File: gmp.info, Node: Assembly Writing Guide, Prev: Assembly Loop Unrolling, Up: Assembly Coding + +15.8.10 Writing Guide +--------------------- + +This is a guide to writing software pipelined loops for processing limb +vectors in assembly. + + First determine the algorithm and which instructions are needed. +Code it without unrolling or scheduling, to make sure it works. On a +3-operand CPU try to write each new value to a new register, this will +greatly simplify later steps. + + Then note for each instruction the functional unit and/or issue port +requirements. If an instruction can use either of two units, like U0 or +U1 then make a category "U0/U1". Count the total using each unit (or +combined unit), and count all instructions. + + Figure out from those counts the best possible loop time. The goal +will be to find a perfect schedule where instruction latencies are +completely hidden. The total instruction count might be the limiting +factor, or perhaps a particular functional unit. It might be possible +to tweak the instructions to help the limiting factor. + + Suppose the loop time is N, then make N issue buckets, with the final +loop branch at the end of the last. Now fill the buckets with dummy +instructions using the functional units desired. Run this to make sure +the intended speed is reached. + + Now replace the dummy instructions with the real instructions from +the slow but correct loop you started with. The first will typically be +a load instruction. Then the instruction using that value is placed in +a bucket an appropriate distance down. Run the loop again, to check it +still runs at target speed. + + Keep placing instructions, frequently measuring the loop. After a +few you will need to wrap around from the last bucket back to the top of +the loop. If you used the new-register for new-value strategy above +then there will be no register conflicts. If not then take care not to +clobber something already in use. Changing registers at this time is +very error prone. + + The loop will overlap two or more of the original loop iterations, +and the computation of one vector element result will be started in one +iteration of the new loop, and completed one or several iterations +later. + + The final step is to create feed-in and wind-down code for the loop. +A good way to do this is to make a copy (or copies) of the loop at the +start and delete those instructions which don't have valid antecedents, +and at the end replicate and delete those whose results are unwanted +(including any further loads). + + The loop will have a minimum number of limbs loaded and processed, so +the feed-in code must test if the request size is smaller and skip +either to a suitable part of the wind-down or to special code for small +sizes. + + +File: gmp.info, Node: Internals, Next: Contributors, Prev: Algorithms, Up: Top + +16 Internals +************ + +*This chapter is provided only for informational purposes and the +various internals described here may change in future GMP releases. +Applications expecting to be compatible with future releases should use +only the documented interfaces described in previous chapters.* + +* Menu: + +* Integer Internals:: +* Rational Internals:: +* Float Internals:: +* Raw Output Internals:: +* C++ Interface Internals:: + + +File: gmp.info, Node: Integer Internals, Next: Rational Internals, Prev: Internals, Up: Internals + +16.1 Integer Internals +====================== + +'mpz_t' variables represent integers using sign and magnitude, in space +dynamically allocated and reallocated. The fields are as follows. + +'_mp_size' + The number of limbs, or the negative of that when representing a + negative integer. Zero is represented by '_mp_size' set to zero, + in which case the '_mp_d' data is undefined. + +'_mp_d' + A pointer to an array of limbs which is the magnitude. These are + stored "little endian" as per the 'mpn' functions, so '_mp_d[0]' is + the least significant limb and '_mp_d[ABS(_mp_size)-1]' is the most + significant. Whenever '_mp_size' is non-zero, the most significant + limb is non-zero. + + Currently there's always at least one readable limb, so for + instance 'mpz_get_ui' can fetch '_mp_d[0]' unconditionally (though + its value is undefined if '_mp_size' is zero). + +'_mp_alloc' + '_mp_alloc' is the number of limbs currently allocated at '_mp_d', + and normally '_mp_alloc >= ABS(_mp_size)'. When an 'mpz' routine + is about to (or might be about to) increase '_mp_size', it checks + '_mp_alloc' to see whether there's enough space, and reallocates if + not. 'MPZ_REALLOC' is generally used for this. + + 'mpz_t' variables initialised with the 'mpz_roinit_n' function or + the 'MPZ_ROINIT_N' macro have '_mp_alloc = 0' but can have a + non-zero '_mp_size'. They can only be used as read-only constants. + See *note Integer Special Functions:: for details. + + The various bitwise logical functions like 'mpz_and' behave as if +negative values were two's complement. But sign and magnitude is always +used internally, and necessary adjustments are made during the +calculations. Sometimes this isn't pretty, but sign and magnitude are +best for other routines. + + Some internal temporary variables are set up with 'MPZ_TMP_INIT' and +these have '_mp_d' space obtained from 'TMP_ALLOC' rather than the +memory allocation functions. Care is taken to ensure that these are big +enough that no reallocation is necessary (since it would have +unpredictable consequences). + + '_mp_size' and '_mp_alloc' are 'int', although 'mp_size_t' is usually +a 'long'. This is done to make the fields just 32 bits on some 64 bits +systems, thereby saving a few bytes of data space but still providing +plenty of range. + + +File: gmp.info, Node: Rational Internals, Next: Float Internals, Prev: Integer Internals, Up: Internals + +16.2 Rational Internals +======================= + +'mpq_t' variables represent rationals using an 'mpz_t' numerator and +denominator (*note Integer Internals::). + + The canonical form adopted is denominator positive (and non-zero), no +common factors between numerator and denominator, and zero uniquely +represented as 0/1. + + It's believed that casting out common factors at each stage of a +calculation is best in general. A GCD is an O(N^2) operation so it's +better to do a few small ones immediately than to delay and have to do a +big one later. Knowing the numerator and denominator have no common +factors can be used for example in 'mpq_mul' to make only two cross GCDs +necessary, not four. + + This general approach to common factors is badly sub-optimal in the +presence of simple factorizations or little prospect for cancellation, +but GMP has no way to know when this will occur. As per *note +Efficiency::, that's left to applications. The 'mpq_t' framework might +still suit, with 'mpq_numref' and 'mpq_denref' for direct access to the +numerator and denominator, or of course 'mpz_t' variables can be used +directly. + + +File: gmp.info, Node: Float Internals, Next: Raw Output Internals, Prev: Rational Internals, Up: Internals + +16.3 Float Internals +==================== + +Efficient calculation is the primary aim of GMP floats and the use of +whole limbs and simple rounding facilitates this. + + 'mpf_t' floats have a variable precision mantissa and a single +machine word signed exponent. The mantissa is represented using sign +and magnitude. + + most least + significant significant + limb limb + + _mp_d + |---- _mp_exp ---> | + _____ _____ _____ _____ _____ + |_____|_____|_____|_____|_____| + . <------------ radix point + + <-------- _mp_size ---------> + + +The fields are as follows. + +'_mp_size' + The number of limbs currently in use, or the negative of that when + representing a negative value. Zero is represented by '_mp_size' + and '_mp_exp' both set to zero, and in that case the '_mp_d' data + is unused. (In the future '_mp_exp' might be undefined when + representing zero.) + +'_mp_prec' + The precision of the mantissa, in limbs. In any calculation the + aim is to produce '_mp_prec' limbs of result (the most significant + being non-zero). + +'_mp_d' + A pointer to the array of limbs which is the absolute value of the + mantissa. These are stored "little endian" as per the 'mpn' + functions, so '_mp_d[0]' is the least significant limb and + '_mp_d[ABS(_mp_size)-1]' the most significant. + + The most significant limb is always non-zero, but there are no + other restrictions on its value, in particular the highest 1 bit + can be anywhere within the limb. + + '_mp_prec+1' limbs are allocated to '_mp_d', the extra limb being + for convenience (see below). There are no reallocations during a + calculation, only in a change of precision with 'mpf_set_prec'. + +'_mp_exp' + The exponent, in limbs, determining the location of the implied + radix point. Zero means the radix point is just above the most + significant limb. Positive values mean a radix point offset + towards the lower limbs and hence a value >= 1, as for example in + the diagram above. Negative exponents mean a radix point further + above the highest limb. + + Naturally the exponent can be any value, it doesn't have to fall + within the limbs as the diagram shows, it can be a long way above + or a long way below. Limbs other than those included in the + '{_mp_d,_mp_size}' data are treated as zero. + + The '_mp_size' and '_mp_prec' fields are 'int', although the +'mp_size_t' type is usually a 'long'. The '_mp_exp' field is usually +'long'. This is done to make some fields just 32 bits on some 64 bits +systems, thereby saving a few bytes of data space but still providing +plenty of precision and a very large range. + + +The following various points should be noted. + +Low Zeros + The least significant limbs '_mp_d[0]' etc can be zero, though such + low zeros can always be ignored. Routines likely to produce low + zeros check and avoid them to save time in subsequent calculations, + but for most routines they're quite unlikely and aren't checked. + +Mantissa Size Range + The '_mp_size' count of limbs in use can be less than '_mp_prec' if + the value can be represented in less. This means low precision + values or small integers stored in a high precision 'mpf_t' can + still be operated on efficiently. + + '_mp_size' can also be greater than '_mp_prec'. Firstly a value is + allowed to use all of the '_mp_prec+1' limbs available at '_mp_d', + and secondly when 'mpf_set_prec_raw' lowers '_mp_prec' it leaves + '_mp_size' unchanged and so the size can be arbitrarily bigger than + '_mp_prec'. + +Rounding + All rounding is done on limb boundaries. Calculating '_mp_prec' + limbs with the high non-zero will ensure the application requested + minimum precision is obtained. + + The use of simple "trunc" rounding towards zero is efficient, since + there's no need to examine extra limbs and increment or decrement. + +Bit Shifts + Since the exponent is in limbs, there are no bit shifts in basic + operations like 'mpf_add' and 'mpf_mul'. When differing exponents + are encountered all that's needed is to adjust pointers to line up + the relevant limbs. + + Of course 'mpf_mul_2exp' and 'mpf_div_2exp' will require bit + shifts, but the choice is between an exponent in limbs which + requires shifts there, or one in bits which requires them almost + everywhere else. + +Use of '_mp_prec+1' Limbs + The extra limb on '_mp_d' ('_mp_prec+1' rather than just + '_mp_prec') helps when an 'mpf' routine might get a carry from its + operation. 'mpf_add' for instance will do an 'mpn_add' of + '_mp_prec' limbs. If there's no carry then that's the result, but + if there is a carry then it's stored in the extra limb of space and + '_mp_size' becomes '_mp_prec+1'. + + Whenever '_mp_prec+1' limbs are held in a variable, the low limb is + not needed for the intended precision, only the '_mp_prec' high + limbs. But zeroing it out or moving the rest down is unnecessary. + Subsequent routines reading the value will simply take the high + limbs they need, and this will be '_mp_prec' if their target has + that same precision. This is no more than a pointer adjustment, + and must be checked anyway since the destination precision can be + different from the sources. + + Copy functions like 'mpf_set' will retain a full '_mp_prec+1' limbs + if available. This ensures that a variable which has '_mp_size' + equal to '_mp_prec+1' will get its full exact value copied. + Strictly speaking this is unnecessary since only '_mp_prec' limbs + are needed for the application's requested precision, but it's + considered that an 'mpf_set' from one variable into another of the + same precision ought to produce an exact copy. + +Application Precisions + '__GMPF_BITS_TO_PREC' converts an application requested precision + to an '_mp_prec'. The value in bits is rounded up to a whole limb + then an extra limb is added since the most significant limb of + '_mp_d' is only non-zero and therefore might contain only one bit. + + '__GMPF_PREC_TO_BITS' does the reverse conversion, and removes the + extra limb from '_mp_prec' before converting to bits. The net + effect of reading back with 'mpf_get_prec' is simply the precision + rounded up to a multiple of 'mp_bits_per_limb'. + + Note that the extra limb added here for the high only being + non-zero is in addition to the extra limb allocated to '_mp_d'. + For example with a 32-bit limb, an application request for 250 bits + will be rounded up to 8 limbs, then an extra added for the high + being only non-zero, giving an '_mp_prec' of 9. '_mp_d' then gets + 10 limbs allocated. Reading back with 'mpf_get_prec' will take + '_mp_prec' subtract 1 limb and multiply by 32, giving 256 bits. + + Strictly speaking, the fact that the high limb has at least one bit + means that a float with, say, 3 limbs of 32-bits each will be + holding at least 65 bits, but for the purposes of 'mpf_t' it's + considered simply to be 64 bits, a nice multiple of the limb size. + + +File: gmp.info, Node: Raw Output Internals, Next: C++ Interface Internals, Prev: Float Internals, Up: Internals + +16.4 Raw Output Internals +========================= + +'mpz_out_raw' uses the following format. + + +------+------------------------+ + | size | data bytes | + +------+------------------------+ + + The size is 4 bytes written most significant byte first, being the +number of subsequent data bytes, or the two's complement negative of +that when a negative integer is represented. The data bytes are the +absolute value of the integer, written most significant byte first. + + The most significant data byte is always non-zero, so the output is +the same on all systems, irrespective of limb size. + + In GMP 1, leading zero bytes were written to pad the data bytes to a +multiple of the limb size. 'mpz_inp_raw' will still accept this, for +compatibility. + + The use of "big endian" for both the size and data fields is +deliberate, it makes the data easy to read in a hex dump of a file. +Unfortunately it also means that the limb data must be reversed when +reading or writing, so neither a big endian nor little endian system can +just read and write '_mp_d'. + + +File: gmp.info, Node: C++ Interface Internals, Prev: Raw Output Internals, Up: Internals + +16.5 C++ Interface Internals +============================ + +A system of expression templates is used to ensure something like +'a=b+c' turns into a simple call to 'mpz_add' etc. For 'mpf_class' the +scheme also ensures the precision of the final destination is used for +any temporaries within a statement like 'f=w*x+y*z'. These are +important features which a naive implementation cannot provide. + + A simplified description of the scheme follows. The true scheme is +complicated by the fact that expressions have different return types. +For detailed information, refer to the source code. + + To perform an operation, say, addition, we first define a "function +object" evaluating it, + + struct __gmp_binary_plus + { + static void eval(mpf_t f, const mpf_t g, const mpf_t h) + { + mpf_add(f, g, h); + } + }; + +And an "additive expression" object, + + __gmp_expr<__gmp_binary_expr > + operator+(const mpf_class &f, const mpf_class &g) + { + return __gmp_expr + <__gmp_binary_expr >(f, g); + } + + The seemingly redundant '__gmp_expr<__gmp_binary_expr<...>>' is used +to encapsulate any possible kind of expression into a single template +type. In fact even 'mpf_class' etc are 'typedef' specializations of +'__gmp_expr'. + + Next we define assignment of '__gmp_expr' to 'mpf_class'. + + template + mpf_class & mpf_class::operator=(const __gmp_expr &expr) + { + expr.eval(this->get_mpf_t(), this->precision()); + return *this; + } + + template + void __gmp_expr<__gmp_binary_expr >::eval + (mpf_t f, mp_bitcnt_t precision) + { + Op::eval(f, expr.val1.get_mpf_t(), expr.val2.get_mpf_t()); + } + + where 'expr.val1' and 'expr.val2' are references to the expression's +operands (here 'expr' is the '__gmp_binary_expr' stored within the +'__gmp_expr'). + + This way, the expression is actually evaluated only at the time of +assignment, when the required precision (that of 'f') is known. +Furthermore the target 'mpf_t' is now available, thus we can call +'mpf_add' directly with 'f' as the output argument. + + Compound expressions are handled by defining operators taking +subexpressions as their arguments, like this: + + template + __gmp_expr + <__gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > + operator+(const __gmp_expr &expr1, const __gmp_expr &expr2) + { + return __gmp_expr + <__gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > + (expr1, expr2); + } + + And the corresponding specializations of '__gmp_expr::eval': + + template + void __gmp_expr + <__gmp_binary_expr<__gmp_expr, __gmp_expr, Op> >::eval + (mpf_t f, mp_bitcnt_t precision) + { + // declare two temporaries + mpf_class temp1(expr.val1, precision), temp2(expr.val2, precision); + Op::eval(f, temp1.get_mpf_t(), temp2.get_mpf_t()); + } + + The expression is thus recursively evaluated to any level of +complexity and all subexpressions are evaluated to the precision of 'f'. + + +File: gmp.info, Node: Contributors, Next: References, Prev: Internals, Up: Top + +Appendix A Contributors +*********************** + +Torbjörn Granlund wrote the original GMP library and is still the main +developer. Code not explicitly attributed to others was contributed by +Torbjörn. Several other individuals and organizations have contributed +GMP. Here is a list in chronological order on first contribution: + + Gunnar Sjödin and Hans Riesel helped with mathematical problems in +early versions of the library. + + Richard Stallman helped with the interface design and revised the +first version of this manual. + + Brian Beuning and Doug Lea helped with testing of early versions of +the library and made creative suggestions. + + John Amanatides of York University in Canada contributed the function +'mpz_probab_prime_p'. + + Paul Zimmermann wrote the REDC-based mpz_powm code, the +Schönhage-Strassen FFT multiply code, and the Karatsuba square root +code. He also improved the Toom3 code for GMP 4.2. Paul sparked the +development of GMP 2, with his comparisons between bignum packages. The +ECMNET project Paul is organizing was a driving force behind many of the +optimizations in GMP 3. Paul also wrote the new GMP 4.3 nth root code +(with Torbjörn). + + Ken Weber (Kent State University, Universidade Federal do Rio Grande +do Sul) contributed now defunct versions of 'mpz_gcd', 'mpz_divexact', +'mpn_gcd', and 'mpn_bdivmod', partially supported by CNPq (Brazil) grant +301314194-2. + + Per Bothner of Cygnus Support helped to set up GMP to use Cygnus' +configure. He has also made valuable suggestions and tested numerous +intermediary releases. + + Joachim Hollman was involved in the design of the 'mpf' interface, +and in the 'mpz' design revisions for version 2. + + Bennet Yee contributed the initial versions of 'mpz_jacobi' and +'mpz_legendre'. + + Andreas Schwab contributed the files 'mpn/m68k/lshift.S' and +'mpn/m68k/rshift.S' (now in '.asm' form). + + Robert Harley of Inria, France and David Seal of ARM, England, +suggested clever improvements for population count. Robert also wrote +highly optimized Karatsuba and 3-way Toom multiplication functions for +GMP 3, and contributed the ARM assembly code. + + Torsten Ekedahl of the Mathematical Department of Stockholm +University provided significant inspiration during several phases of the +GMP development. His mathematical expertise helped improve several +algorithms. + + Linus Nordberg wrote the new configure system based on autoconf and +implemented the new random functions. + + Kevin Ryde worked on a large number of things: optimized x86 code, m4 +asm macros, parameter tuning, speed measuring, the configure system, +function inlining, divisibility tests, bit scanning, Jacobi symbols, +Fibonacci and Lucas number functions, printf and scanf functions, perl +interface, demo expression parser, the algorithms chapter in the manual, +'gmpasm-mode.el', and various miscellaneous improvements elsewhere. + + Kent Boortz made the Mac OS 9 port. + + Steve Root helped write the optimized alpha 21264 assembly code. + + Gerardo Ballabio wrote the 'gmpxx.h' C++ class interface and the C++ +'istream' input routines. + + Jason Moxham rewrote 'mpz_fac_ui'. + + Pedro Gimeno implemented the Mersenne Twister and made other random +number improvements. + + Niels Möller wrote the sub-quadratic GCD, extended GCD and Jacobi +code, the quadratic Hensel division code, and (with Torbjörn) the new +divide and conquer division code for GMP 4.3. Niels also helped +implement the new Toom multiply code for GMP 4.3 and implemented helper +functions to simplify Toom evaluations for GMP 5.0. He wrote the +original version of mpn_mulmod_bnm1, and he is the main author of the +mini-gmp package used for gmp bootstrapping. + + Alberto Zanoni and Marco Bodrato suggested the unbalanced multiply +strategy, and found the optimal strategies for evaluation and +interpolation in Toom multiplication. + + Marco Bodrato helped implement the new Toom multiply code for GMP 4.3 +and implemented most of the new Toom multiply and squaring code for 5.0. +He is the main author of the current mpn_mulmod_bnm1, mpn_mullo_n, and +mpn_sqrlo. Marco also wrote the functions mpn_invert and +mpn_invertappr, and improved the speed of integer root extraction. He +is the author of mini-mpq, an additional layer to mini-gmp; of most of +the combinatorial functions and the BPSW primality testing +implementation, for both the main library and the mini-gmp package. + + David Harvey suggested the internal function 'mpn_bdiv_dbm1', +implementing division relevant to Toom multiplication. He also worked +on fast assembly sequences, in particular on a fast AMD64 +'mpn_mul_basecase'. He wrote the internal middle product functions +'mpn_mulmid_basecase', 'mpn_toom42_mulmid', 'mpn_mulmid_n' and related +helper routines. + + Martin Boij wrote 'mpn_perfect_power_p'. + + Marc Glisse improved 'gmpxx.h': use fewer temporaries (faster), +specializations of 'numeric_limits' and 'common_type', C++11 features +(move constructors, explicit bool conversion, UDL), make the conversion +from 'mpq_class' to 'mpz_class' explicit, optimize operations where one +argument is a small compile-time constant, replace some heap allocations +by stack allocations. He also fixed the eofbit handling of C++ streams, +and removed one division from 'mpq/aors.c'. + + David S Miller wrote assembly code for SPARC T3 and T4. + + Mark Sofroniou cleaned up the types of mul_fft.c, letting it work for +huge operands. + + Ulrich Weigand ported GMP to the powerpc64le ABI. + + (This list is chronological, not ordered after significance. If you +have contributed to GMP but are not listed above, please tell + about the omission!) + + The development of floating point functions of GNU MP 2 was supported +in part by the ESPRIT-BRA (Basic Research Activities) 6846 project POSSO +(POlynomial System SOlving). + + The development of GMP 2, 3, and 4.0 was supported in part by the IDA +Center for Computing Sciences. + + The development of GMP 4.3, 5.0, and 5.1 was supported in part by the +Swedish Foundation for Strategic Research. + + Thanks go to Hans Thorsen for donating an SGI system for the GMP test +system environment. + + +File: gmp.info, Node: References, Next: GNU Free Documentation License, Prev: Contributors, Up: Top + +Appendix B References +********************* + +B.1 Books +========= + + * Jonathan M. Borwein and Peter B. Borwein, "Pi and the AGM: A Study + in Analytic Number Theory and Computational Complexity", Wiley, + 1998. + + * Richard Crandall and Carl Pomerance, "Prime Numbers: A + Computational Perspective", 2nd edition, Springer-Verlag, 2005. + + + * Henri Cohen, "A Course in Computational Algebraic Number Theory", + Graduate Texts in Mathematics number 138, Springer-Verlag, 1993. + + + * Donald E. Knuth, "The Art of Computer Programming", volume 2, + "Seminumerical Algorithms", 3rd edition, Addison-Wesley, 1998. + + + * John D. Lipson, "Elements of Algebra and Algebraic Computing", The + Benjamin Cummings Publishing Company Inc, 1981. + + * Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone, + "Handbook of Applied Cryptography", + + + * Richard M. Stallman and the GCC Developer Community, "Using the GNU + Compiler Collection", Free Software Foundation, 2008, available + online , and in the GCC package + + +B.2 Papers +========== + + * Yves Bertot, Nicolas Magaud and Paul Zimmermann, "A Proof of GMP + Square Root", Journal of Automated Reasoning, volume 29, 2002, pp. + 225-252. Also available online as INRIA Research Report 4475, June + 2002, + + * Christoph Burnikel and Joachim Ziegler, "Fast Recursive Division", + Max-Planck-Institut fuer Informatik Research Report MPI-I-98-1-022, + + + * Torbjörn Granlund and Peter L. Montgomery, "Division by Invariant + Integers using Multiplication", in Proceedings of the SIGPLAN + PLDI'94 Conference, June 1994. Also available + . + + * Niels Möller and Torbjörn Granlund, "Improved division by invariant + integers", IEEE Transactions on Computers, 11 June 2010. + + + * Torbjörn Granlund and Niels Möller, "Division of integers large and + small", to appear. + + * Tudor Jebelean, "An algorithm for exact division", Journal of + Symbolic Computation, volume 15, 1993, pp. 169-180. Research + report version available + + + * Tudor Jebelean, "Exact Division with Karatsuba Complexity - + Extended Abstract", RISC-Linz technical report 96-31, + + + * Tudor Jebelean, "Practical Integer Division with Karatsuba + Complexity", ISSAC 97, pp. 339-341. Technical report available + + + * Tudor Jebelean, "A Generalization of the Binary GCD Algorithm", + ISSAC 93, pp. 111-116. Technical report version available + + + * Tudor Jebelean, "A Double-Digit Lehmer-Euclid Algorithm for Finding + the GCD of Long Integers", Journal of Symbolic Computation, volume + 19, 1995, pp. 145-157. Technical report version also available + + + * Werner Krandick and Tudor Jebelean, "Bidirectional Exact Integer + Division", Journal of Symbolic Computation, volume 21, 1996, pp. + 441-455. Early technical report version also available + + + * Makoto Matsumoto and Takuji Nishimura, "Mersenne Twister: A + 623-dimensionally equidistributed uniform pseudorandom number + generator", ACM Transactions on Modelling and Computer Simulation, + volume 8, January 1998, pp. 3-30. Available online + + + * R. Moenck and A. Borodin, "Fast Modular Transforms via Division", + Proceedings of the 13th Annual IEEE Symposium on Switching and + Automata Theory, October 1972, pp. 90-96. Reprinted as "Fast + Modular Transforms", Journal of Computer and System Sciences, + volume 8, number 3, June 1974, pp. 366-386. + + * Niels Möller, "On Schönhage's algorithm and subquadratic integer + GCD computation", in Mathematics of Computation, volume 77, January + 2008, pp. 589-607, + + + * Peter L. Montgomery, "Modular Multiplication Without Trial + Division", in Mathematics of Computation, volume 44, number 170, + April 1985. + + * Arnold Schönhage and Volker Strassen, "Schnelle Multiplikation + grosser Zahlen", Computing 7, 1971, pp. 281-292. + + * Kenneth Weber, "The accelerated integer GCD algorithm", ACM + Transactions on Mathematical Software, volume 21, number 1, March + 1995, pp. 111-122. + + * Paul Zimmermann, "Karatsuba Square Root", INRIA Research Report + 3805, November 1999, + + + * Paul Zimmermann, "A Proof of GMP Fast Division and Square Root + Implementations", + + + * Dan Zuras, "On Squaring and Multiplying Large Integers", ARITH-11: + IEEE Symposium on Computer Arithmetic, 1993, pp. 260 to 271. + Reprinted as "More on Multiplying and Squaring Large Integers", + IEEE Transactions on Computers, volume 43, number 8, August 1994, + pp. 899-908. + + * Niels Möller, "Efficient computation of the Jacobi symbol", + + + +File: gmp.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: References, Up: Top + +Appendix C GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright © 2000-2002, 2007, 2008 Free Software Foundation, Inc. + + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + . + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + +File: gmp.info, Node: Concept Index, Next: Function Index, Prev: GNU Free Documentation License, Up: Top + +Concept Index +************* + +[index] +* Menu: + +* #include: Headers and Libraries. + (line 6) +* --build: Build Options. (line 51) +* --disable-fft: Build Options. (line 307) +* --disable-shared: Build Options. (line 44) +* --disable-static: Build Options. (line 44) +* --enable-alloca: Build Options. (line 273) +* --enable-assert: Build Options. (line 313) +* --enable-cxx: Build Options. (line 225) +* --enable-fat: Build Options. (line 160) +* --enable-profiling: Build Options. (line 317) +* --enable-profiling <1>: Profiling. (line 6) +* --exec-prefix: Build Options. (line 32) +* --host: Build Options. (line 65) +* --prefix: Build Options. (line 32) +* -finstrument-functions: Profiling. (line 66) +* 2exp functions: Efficiency. (line 43) +* 68000: Notes for Particular Systems. + (line 94) +* 80x86: Notes for Particular Systems. + (line 150) +* ABI: Build Options. (line 167) +* ABI <1>: ABI and ISA. (line 6) +* About this manual: Introduction to GMP. (line 57) +* AC_CHECK_LIB: Autoconf. (line 11) +* AIX: ABI and ISA. (line 174) +* AIX <1>: Notes for Particular Systems. + (line 7) +* Algorithms: Algorithms. (line 6) +* alloca: Build Options. (line 273) +* Allocation of memory: Custom Allocation. (line 6) +* AMD64: ABI and ISA. (line 44) +* Anonymous FTP of latest version: Introduction to GMP. (line 37) +* Application Binary Interface: ABI and ISA. (line 6) +* Arithmetic functions: Integer Arithmetic. (line 6) +* Arithmetic functions <1>: Rational Arithmetic. (line 6) +* Arithmetic functions <2>: Float Arithmetic. (line 6) +* ARM: Notes for Particular Systems. + (line 20) +* Assembly cache handling: Assembly Cache Handling. + (line 6) +* Assembly carry propagation: Assembly Carry Propagation. + (line 6) +* Assembly code organisation: Assembly Code Organisation. + (line 6) +* Assembly coding: Assembly Coding. (line 6) +* Assembly floating point: Assembly Floating Point. + (line 6) +* Assembly loop unrolling: Assembly Loop Unrolling. + (line 6) +* Assembly SIMD: Assembly SIMD Instructions. + (line 6) +* Assembly software pipelining: Assembly Software Pipelining. + (line 6) +* Assembly writing guide: Assembly Writing Guide. + (line 6) +* Assertion checking: Build Options. (line 313) +* Assertion checking <1>: Debugging. (line 74) +* Assignment functions: Assigning Integers. (line 6) +* Assignment functions <1>: Simultaneous Integer Init & Assign. + (line 6) +* Assignment functions <2>: Initializing Rationals. + (line 6) +* Assignment functions <3>: Assigning Floats. (line 6) +* Assignment functions <4>: Simultaneous Float Init & Assign. + (line 6) +* Autoconf: Autoconf. (line 6) +* Basics: GMP Basics. (line 6) +* Binomial coefficient algorithm: Binomial Coefficients Algorithm. + (line 6) +* Binomial coefficient functions: Number Theoretic Functions. + (line 137) +* Binutils strip: Known Build Problems. + (line 28) +* Bit manipulation functions: Integer Logic and Bit Fiddling. + (line 6) +* Bit scanning functions: Integer Logic and Bit Fiddling. + (line 39) +* Bit shift left: Integer Arithmetic. (line 38) +* Bit shift right: Integer Division. (line 74) +* Bits per limb: Useful Macros and Constants. + (line 7) +* Bug reporting: Reporting Bugs. (line 6) +* Build directory: Build Options. (line 19) +* Build notes for binary packaging: Notes for Package Builds. + (line 6) +* Build notes for particular systems: Notes for Particular Systems. + (line 6) +* Build options: Build Options. (line 6) +* Build problems known: Known Build Problems. + (line 6) +* Build system: Build Options. (line 51) +* Building GMP: Installing GMP. (line 6) +* Bus error: Debugging. (line 7) +* C compiler: Build Options. (line 178) +* C++ compiler: Build Options. (line 249) +* C++ interface: C++ Class Interface. (line 6) +* C++ interface internals: C++ Interface Internals. + (line 6) +* C++ istream input: C++ Formatted Input. (line 6) +* C++ ostream output: C++ Formatted Output. + (line 6) +* C++ support: Build Options. (line 225) +* CC: Build Options. (line 178) +* CC_FOR_BUILD: Build Options. (line 212) +* CFLAGS: Build Options. (line 178) +* Checker: Debugging. (line 110) +* checkergcc: Debugging. (line 117) +* Code organisation: Assembly Code Organisation. + (line 6) +* Compaq C++: Notes for Particular Systems. + (line 25) +* Comparison functions: Integer Comparisons. (line 6) +* Comparison functions <1>: Comparing Rationals. (line 6) +* Comparison functions <2>: Float Comparison. (line 6) +* Compatibility with older versions: Compatibility with older versions. + (line 6) +* Conditions for copying GNU MP: Copying. (line 6) +* Configuring GMP: Installing GMP. (line 6) +* Congruence algorithm: Exact Remainder. (line 30) +* Congruence functions: Integer Division. (line 150) +* Constants: Useful Macros and Constants. + (line 6) +* Contributors: Contributors. (line 6) +* Conventions for parameters: Parameter Conventions. + (line 6) +* Conventions for variables: Variable Conventions. + (line 6) +* Conversion functions: Converting Integers. (line 6) +* Conversion functions <1>: Rational Conversions. + (line 6) +* Conversion functions <2>: Converting Floats. (line 6) +* Copying conditions: Copying. (line 6) +* CPPFLAGS: Build Options. (line 204) +* CPU types: Introduction to GMP. (line 24) +* CPU types <1>: Build Options. (line 107) +* Cross compiling: Build Options. (line 65) +* Cryptography functions, low-level: Low-level Functions. (line 507) +* Custom allocation: Custom Allocation. (line 6) +* CXX: Build Options. (line 249) +* CXXFLAGS: Build Options. (line 249) +* Cygwin: Notes for Particular Systems. + (line 57) +* Darwin: Known Build Problems. + (line 51) +* Debugging: Debugging. (line 6) +* Demonstration programs: Demonstration Programs. + (line 6) +* Digits in an integer: Miscellaneous Integer Functions. + (line 23) +* Divisibility algorithm: Exact Remainder. (line 30) +* Divisibility functions: Integer Division. (line 136) +* Divisibility functions <1>: Integer Division. (line 150) +* Divisibility testing: Efficiency. (line 91) +* Division algorithms: Division Algorithms. (line 6) +* Division functions: Integer Division. (line 6) +* Division functions <1>: Rational Arithmetic. (line 24) +* Division functions <2>: Float Arithmetic. (line 33) +* DJGPP: Notes for Particular Systems. + (line 57) +* DJGPP <1>: Known Build Problems. + (line 18) +* DLLs: Notes for Particular Systems. + (line 70) +* DocBook: Build Options. (line 340) +* Documentation formats: Build Options. (line 333) +* Documentation license: GNU Free Documentation License. + (line 6) +* DVI: Build Options. (line 336) +* Efficiency: Efficiency. (line 6) +* Emacs: Emacs. (line 6) +* Exact division functions: Integer Division. (line 125) +* Exact remainder: Exact Remainder. (line 6) +* Example programs: Demonstration Programs. + (line 6) +* Exec prefix: Build Options. (line 32) +* Execution profiling: Build Options. (line 317) +* Execution profiling <1>: Profiling. (line 6) +* Exponentiation functions: Integer Exponentiation. + (line 6) +* Exponentiation functions <1>: Float Arithmetic. (line 41) +* Export: Integer Import and Export. + (line 45) +* Expression parsing demo: Demonstration Programs. + (line 15) +* Expression parsing demo <1>: Demonstration Programs. + (line 17) +* Expression parsing demo <2>: Demonstration Programs. + (line 19) +* Extended GCD: Number Theoretic Functions. + (line 56) +* Factor removal functions: Number Theoretic Functions. + (line 117) +* Factorial algorithm: Factorial Algorithm. (line 6) +* Factorial functions: Number Theoretic Functions. + (line 125) +* Factorization demo: Demonstration Programs. + (line 22) +* Fast Fourier Transform: FFT Multiplication. (line 6) +* Fat binary: Build Options. (line 160) +* FFT multiplication: Build Options. (line 307) +* FFT multiplication <1>: FFT Multiplication. (line 6) +* Fibonacci number algorithm: Fibonacci Numbers Algorithm. + (line 6) +* Fibonacci sequence functions: Number Theoretic Functions. + (line 145) +* Float arithmetic functions: Float Arithmetic. (line 6) +* Float assignment functions: Assigning Floats. (line 6) +* Float assignment functions <1>: Simultaneous Float Init & Assign. + (line 6) +* Float comparison functions: Float Comparison. (line 6) +* Float conversion functions: Converting Floats. (line 6) +* Float functions: Floating-point Functions. + (line 6) +* Float initialization functions: Initializing Floats. (line 6) +* Float initialization functions <1>: Simultaneous Float Init & Assign. + (line 6) +* Float input and output functions: I/O of Floats. (line 6) +* Float internals: Float Internals. (line 6) +* Float miscellaneous functions: Miscellaneous Float Functions. + (line 6) +* Float random number functions: Miscellaneous Float Functions. + (line 27) +* Float rounding functions: Miscellaneous Float Functions. + (line 9) +* Float sign tests: Float Comparison. (line 34) +* Floating point mode: Notes for Particular Systems. + (line 34) +* Floating-point functions: Floating-point Functions. + (line 6) +* Floating-point number: Nomenclature and Types. + (line 21) +* fnccheck: Profiling. (line 77) +* Formatted input: Formatted Input. (line 6) +* Formatted output: Formatted Output. (line 6) +* Free Documentation License: GNU Free Documentation License. + (line 6) +* FreeBSD: Notes for Particular Systems. + (line 43) +* FreeBSD <1>: Notes for Particular Systems. + (line 52) +* frexp: Converting Integers. (line 43) +* frexp <1>: Converting Floats. (line 24) +* FTP of latest version: Introduction to GMP. (line 37) +* Function classes: Function Classes. (line 6) +* FunctionCheck: Profiling. (line 77) +* GCC Checker: Debugging. (line 110) +* GCD algorithms: Greatest Common Divisor Algorithms. + (line 6) +* GCD extended: Number Theoretic Functions. + (line 56) +* GCD functions: Number Theoretic Functions. + (line 39) +* GDB: Debugging. (line 53) +* Generic C: Build Options. (line 151) +* GMP Perl module: Demonstration Programs. + (line 28) +* GMP version number: Useful Macros and Constants. + (line 12) +* gmp.h: Headers and Libraries. + (line 6) +* gmpxx.h: C++ Interface General. + (line 8) +* GNU Debugger: Debugging. (line 53) +* GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* GNU strip: Known Build Problems. + (line 28) +* gprof: Profiling. (line 41) +* Greatest common divisor algorithms: Greatest Common Divisor Algorithms. + (line 6) +* Greatest common divisor functions: Number Theoretic Functions. + (line 39) +* Hardware floating point mode: Notes for Particular Systems. + (line 34) +* Headers: Headers and Libraries. + (line 6) +* Heap problems: Debugging. (line 23) +* Home page: Introduction to GMP. (line 33) +* Host system: Build Options. (line 65) +* HP-UX: ABI and ISA. (line 76) +* HP-UX <1>: ABI and ISA. (line 114) +* HPPA: ABI and ISA. (line 76) +* I/O functions: I/O of Integers. (line 6) +* I/O functions <1>: I/O of Rationals. (line 6) +* I/O functions <2>: I/O of Floats. (line 6) +* i386: Notes for Particular Systems. + (line 150) +* IA-64: ABI and ISA. (line 114) +* Import: Integer Import and Export. + (line 11) +* In-place operations: Efficiency. (line 57) +* Include files: Headers and Libraries. + (line 6) +* info-lookup-symbol: Emacs. (line 6) +* Initialization functions: Initializing Integers. + (line 6) +* Initialization functions <1>: Simultaneous Integer Init & Assign. + (line 6) +* Initialization functions <2>: Initializing Rationals. + (line 6) +* Initialization functions <3>: Initializing Floats. (line 6) +* Initialization functions <4>: Simultaneous Float Init & Assign. + (line 6) +* Initialization functions <5>: Random State Initialization. + (line 6) +* Initializing and clearing: Efficiency. (line 21) +* Input functions: I/O of Integers. (line 6) +* Input functions <1>: I/O of Rationals. (line 6) +* Input functions <2>: I/O of Floats. (line 6) +* Input functions <3>: Formatted Input Functions. + (line 6) +* Install prefix: Build Options. (line 32) +* Installing GMP: Installing GMP. (line 6) +* Instruction Set Architecture: ABI and ISA. (line 6) +* instrument-functions: Profiling. (line 66) +* Integer: Nomenclature and Types. + (line 6) +* Integer arithmetic functions: Integer Arithmetic. (line 6) +* Integer assignment functions: Assigning Integers. (line 6) +* Integer assignment functions <1>: Simultaneous Integer Init & Assign. + (line 6) +* Integer bit manipulation functions: Integer Logic and Bit Fiddling. + (line 6) +* Integer comparison functions: Integer Comparisons. (line 6) +* Integer conversion functions: Converting Integers. (line 6) +* Integer division functions: Integer Division. (line 6) +* Integer exponentiation functions: Integer Exponentiation. + (line 6) +* Integer export: Integer Import and Export. + (line 45) +* Integer functions: Integer Functions. (line 6) +* Integer import: Integer Import and Export. + (line 11) +* Integer initialization functions: Initializing Integers. + (line 6) +* Integer initialization functions <1>: Simultaneous Integer Init & Assign. + (line 6) +* Integer input and output functions: I/O of Integers. (line 6) +* Integer internals: Integer Internals. (line 6) +* Integer logical functions: Integer Logic and Bit Fiddling. + (line 6) +* Integer miscellaneous functions: Miscellaneous Integer Functions. + (line 6) +* Integer random number functions: Integer Random Numbers. + (line 6) +* Integer root functions: Integer Roots. (line 6) +* Integer sign tests: Integer Comparisons. (line 28) +* Integer special functions: Integer Special Functions. + (line 6) +* Interix: Notes for Particular Systems. + (line 65) +* Internals: Internals. (line 6) +* Introduction: Introduction to GMP. (line 6) +* Inverse modulo functions: Number Theoretic Functions. + (line 83) +* IRIX: ABI and ISA. (line 139) +* IRIX <1>: Known Build Problems. + (line 38) +* ISA: ABI and ISA. (line 6) +* istream input: C++ Formatted Input. (line 6) +* Jacobi symbol algorithm: Jacobi Symbol. (line 6) +* Jacobi symbol functions: Number Theoretic Functions. + (line 92) +* Karatsuba multiplication: Karatsuba Multiplication. + (line 6) +* Karatsuba square root algorithm: Square Root Algorithm. + (line 6) +* Kronecker symbol functions: Number Theoretic Functions. + (line 104) +* Language bindings: Language Bindings. (line 6) +* Latest version of GMP: Introduction to GMP. (line 37) +* LCM functions: Number Theoretic Functions. + (line 77) +* Least common multiple functions: Number Theoretic Functions. + (line 77) +* Legendre symbol functions: Number Theoretic Functions. + (line 95) +* libgmp: Headers and Libraries. + (line 24) +* libgmpxx: Headers and Libraries. + (line 29) +* Libraries: Headers and Libraries. + (line 24) +* Libtool: Headers and Libraries. + (line 36) +* Libtool versioning: Notes for Package Builds. + (line 9) +* License conditions: Copying. (line 6) +* Limb: Nomenclature and Types. + (line 31) +* Limb size: Useful Macros and Constants. + (line 7) +* Linear congruential algorithm: Random Number Algorithms. + (line 25) +* Linear congruential random numbers: Random State Initialization. + (line 18) +* Linear congruential random numbers <1>: Random State Initialization. + (line 32) +* Linking: Headers and Libraries. + (line 24) +* Logical functions: Integer Logic and Bit Fiddling. + (line 6) +* Low-level functions: Low-level Functions. (line 6) +* Low-level functions for cryptography: Low-level Functions. (line 507) +* Lucas number algorithm: Lucas Numbers Algorithm. + (line 6) +* Lucas number functions: Number Theoretic Functions. + (line 156) +* MacOS X: Known Build Problems. + (line 51) +* Mailing lists: Introduction to GMP. (line 44) +* Malloc debugger: Debugging. (line 29) +* Malloc problems: Debugging. (line 23) +* Memory allocation: Custom Allocation. (line 6) +* Memory management: Memory Management. (line 6) +* Mersenne twister algorithm: Random Number Algorithms. + (line 17) +* Mersenne twister random numbers: Random State Initialization. + (line 13) +* MINGW: Notes for Particular Systems. + (line 57) +* MIPS: ABI and ISA. (line 139) +* Miscellaneous float functions: Miscellaneous Float Functions. + (line 6) +* Miscellaneous integer functions: Miscellaneous Integer Functions. + (line 6) +* MMX: Notes for Particular Systems. + (line 156) +* Modular inverse functions: Number Theoretic Functions. + (line 83) +* Most significant bit: Miscellaneous Integer Functions. + (line 34) +* MPN_PATH: Build Options. (line 321) +* MS Windows: Notes for Particular Systems. + (line 57) +* MS Windows <1>: Notes for Particular Systems. + (line 70) +* MS-DOS: Notes for Particular Systems. + (line 57) +* Multi-threading: Reentrancy. (line 6) +* Multiplication algorithms: Multiplication Algorithms. + (line 6) +* Nails: Low-level Functions. (line 686) +* Native compilation: Build Options. (line 51) +* NetBSD: Notes for Particular Systems. + (line 100) +* NeXT: Known Build Problems. + (line 57) +* Next prime function: Number Theoretic Functions. + (line 23) +* Nomenclature: Nomenclature and Types. + (line 6) +* Non-Unix systems: Build Options. (line 11) +* Nth root algorithm: Nth Root Algorithm. (line 6) +* Number sequences: Efficiency. (line 145) +* Number theoretic functions: Number Theoretic Functions. + (line 6) +* Numerator and denominator: Applying Integer Functions. + (line 6) +* obstack output: Formatted Output Functions. + (line 79) +* OpenBSD: Notes for Particular Systems. + (line 109) +* Optimizing performance: Performance optimization. + (line 6) +* ostream output: C++ Formatted Output. + (line 6) +* Other languages: Language Bindings. (line 6) +* Output functions: I/O of Integers. (line 6) +* Output functions <1>: I/O of Rationals. (line 6) +* Output functions <2>: I/O of Floats. (line 6) +* Output functions <3>: Formatted Output Functions. + (line 6) +* Packaged builds: Notes for Package Builds. + (line 6) +* Parameter conventions: Parameter Conventions. + (line 6) +* Parsing expressions demo: Demonstration Programs. + (line 15) +* Parsing expressions demo <1>: Demonstration Programs. + (line 17) +* Parsing expressions demo <2>: Demonstration Programs. + (line 19) +* Particular systems: Notes for Particular Systems. + (line 6) +* Past GMP versions: Compatibility with older versions. + (line 6) +* PDF: Build Options. (line 336) +* Perfect power algorithm: Perfect Power Algorithm. + (line 6) +* Perfect power functions: Integer Roots. (line 28) +* Perfect square algorithm: Perfect Square Algorithm. + (line 6) +* Perfect square functions: Integer Roots. (line 37) +* perl: Demonstration Programs. + (line 28) +* Perl module: Demonstration Programs. + (line 28) +* Pointer types: Nomenclature and Types. + (line 55) +* Postscript: Build Options. (line 336) +* Power/PowerPC: Notes for Particular Systems. + (line 115) +* Power/PowerPC <1>: Known Build Problems. + (line 63) +* Powering algorithms: Powering Algorithms. (line 6) +* Powering functions: Integer Exponentiation. + (line 6) +* Powering functions <1>: Float Arithmetic. (line 41) +* PowerPC: ABI and ISA. (line 173) +* Precision of floats: Floating-point Functions. + (line 6) +* Precision of hardware floating point: Notes for Particular Systems. + (line 34) +* Prefix: Build Options. (line 32) +* Previous prime function: Number Theoretic Functions. + (line 26) +* Prime testing algorithms: Prime Testing Algorithm. + (line 6) +* Prime testing functions: Number Theoretic Functions. + (line 7) +* Primorial functions: Number Theoretic Functions. + (line 130) +* printf formatted output: Formatted Output. (line 6) +* Probable prime testing functions: Number Theoretic Functions. + (line 7) +* prof: Profiling. (line 24) +* Profiling: Profiling. (line 6) +* Radix conversion algorithms: Radix Conversion Algorithms. + (line 6) +* Random number algorithms: Random Number Algorithms. + (line 6) +* Random number functions: Integer Random Numbers. + (line 6) +* Random number functions <1>: Miscellaneous Float Functions. + (line 27) +* Random number functions <2>: Random Number Functions. + (line 6) +* Random number seeding: Random State Seeding. + (line 6) +* Random number state: Random State Initialization. + (line 6) +* Random state: Nomenclature and Types. + (line 46) +* Rational arithmetic: Efficiency. (line 111) +* Rational arithmetic functions: Rational Arithmetic. (line 6) +* Rational assignment functions: Initializing Rationals. + (line 6) +* Rational comparison functions: Comparing Rationals. (line 6) +* Rational conversion functions: Rational Conversions. + (line 6) +* Rational initialization functions: Initializing Rationals. + (line 6) +* Rational input and output functions: I/O of Rationals. (line 6) +* Rational internals: Rational Internals. (line 6) +* Rational number: Nomenclature and Types. + (line 16) +* Rational number functions: Rational Number Functions. + (line 6) +* Rational numerator and denominator: Applying Integer Functions. + (line 6) +* Rational sign tests: Comparing Rationals. (line 28) +* Raw output internals: Raw Output Internals. + (line 6) +* Reallocations: Efficiency. (line 30) +* Reentrancy: Reentrancy. (line 6) +* References: References. (line 5) +* Remove factor functions: Number Theoretic Functions. + (line 117) +* Reporting bugs: Reporting Bugs. (line 6) +* Root extraction algorithm: Nth Root Algorithm. (line 6) +* Root extraction algorithms: Root Extraction Algorithms. + (line 6) +* Root extraction functions: Integer Roots. (line 6) +* Root extraction functions <1>: Float Arithmetic. (line 37) +* Root testing functions: Integer Roots. (line 28) +* Root testing functions <1>: Integer Roots. (line 37) +* Rounding functions: Miscellaneous Float Functions. + (line 9) +* Sample programs: Demonstration Programs. + (line 6) +* Scan bit functions: Integer Logic and Bit Fiddling. + (line 39) +* scanf formatted input: Formatted Input. (line 6) +* SCO: Known Build Problems. + (line 38) +* Seeding random numbers: Random State Seeding. + (line 6) +* Segmentation violation: Debugging. (line 7) +* Sequent Symmetry: Known Build Problems. + (line 68) +* Services for Unix: Notes for Particular Systems. + (line 65) +* Shared library versioning: Notes for Package Builds. + (line 9) +* Sign tests: Integer Comparisons. (line 28) +* Sign tests <1>: Comparing Rationals. (line 28) +* Sign tests <2>: Float Comparison. (line 34) +* Size in digits: Miscellaneous Integer Functions. + (line 23) +* Small operands: Efficiency. (line 7) +* Solaris: ABI and ISA. (line 204) +* Solaris <1>: Known Build Problems. + (line 72) +* Solaris <2>: Known Build Problems. + (line 77) +* Sparc: Notes for Particular Systems. + (line 127) +* Sparc <1>: Notes for Particular Systems. + (line 132) +* Sparc V9: ABI and ISA. (line 204) +* Special integer functions: Integer Special Functions. + (line 6) +* Square root algorithm: Square Root Algorithm. + (line 6) +* SSE2: Notes for Particular Systems. + (line 156) +* Stack backtrace: Debugging. (line 45) +* Stack overflow: Build Options. (line 273) +* Stack overflow <1>: Debugging. (line 7) +* Static linking: Efficiency. (line 14) +* stdarg.h: Headers and Libraries. + (line 19) +* stdio.h: Headers and Libraries. + (line 13) +* Stripped libraries: Known Build Problems. + (line 28) +* Sun: ABI and ISA. (line 204) +* SunOS: Notes for Particular Systems. + (line 144) +* Systems: Notes for Particular Systems. + (line 6) +* Temporary memory: Build Options. (line 273) +* Texinfo: Build Options. (line 333) +* Text input/output: Efficiency. (line 151) +* Thread safety: Reentrancy. (line 6) +* Toom multiplication: Toom 3-Way Multiplication. + (line 6) +* Toom multiplication <1>: Toom 4-Way Multiplication. + (line 6) +* Toom multiplication <2>: Higher degree Toom'n'half. + (line 6) +* Toom multiplication <3>: Other Multiplication. + (line 6) +* Types: Nomenclature and Types. + (line 6) +* ui and si functions: Efficiency. (line 50) +* Unbalanced multiplication: Unbalanced Multiplication. + (line 6) +* Upward compatibility: Compatibility with older versions. + (line 6) +* Useful macros and constants: Useful Macros and Constants. + (line 6) +* User-defined precision: Floating-point Functions. + (line 6) +* Valgrind: Debugging. (line 125) +* Variable conventions: Variable Conventions. + (line 6) +* Version number: Useful Macros and Constants. + (line 12) +* Web page: Introduction to GMP. (line 33) +* Windows: Notes for Particular Systems. + (line 57) +* Windows <1>: Notes for Particular Systems. + (line 70) +* x86: Notes for Particular Systems. + (line 150) +* x87: Notes for Particular Systems. + (line 34) +* XML: Build Options. (line 340) + + +File: gmp.info, Node: Function Index, Prev: Concept Index, Up: Top + +Function and Type Index +*********************** + +[index] +* Menu: + +* _mpz_realloc: Integer Special Functions. + (line 13) +* __GMP_CC: Useful Macros and Constants. + (line 22) +* __GMP_CFLAGS: Useful Macros and Constants. + (line 23) +* __GNU_MP_VERSION: Useful Macros and Constants. + (line 9) +* __GNU_MP_VERSION_MINOR: Useful Macros and Constants. + (line 10) +* __GNU_MP_VERSION_PATCHLEVEL: Useful Macros and Constants. + (line 11) +* abs: C++ Interface Integers. + (line 46) +* abs <1>: C++ Interface Rationals. + (line 47) +* abs <2>: C++ Interface Floats. + (line 82) +* ceil: C++ Interface Floats. + (line 83) +* cmp: C++ Interface Integers. + (line 47) +* cmp <1>: C++ Interface Integers. + (line 48) +* cmp <2>: C++ Interface Rationals. + (line 48) +* cmp <3>: C++ Interface Rationals. + (line 49) +* cmp <4>: C++ Interface Floats. + (line 84) +* cmp <5>: C++ Interface Floats. + (line 85) +* factorial: C++ Interface Integers. + (line 71) +* fibonacci: C++ Interface Integers. + (line 75) +* floor: C++ Interface Floats. + (line 95) +* gcd: C++ Interface Integers. + (line 68) +* gmp_asprintf: Formatted Output Functions. + (line 63) +* gmp_errno: Random State Initialization. + (line 56) +* GMP_ERROR_INVALID_ARGUMENT: Random State Initialization. + (line 56) +* GMP_ERROR_UNSUPPORTED_ARGUMENT: Random State Initialization. + (line 56) +* gmp_fprintf: Formatted Output Functions. + (line 28) +* gmp_fscanf: Formatted Input Functions. + (line 24) +* GMP_LIMB_BITS: Low-level Functions. (line 714) +* GMP_NAIL_BITS: Low-level Functions. (line 712) +* GMP_NAIL_MASK: Low-level Functions. (line 722) +* GMP_NUMB_BITS: Low-level Functions. (line 713) +* GMP_NUMB_MASK: Low-level Functions. (line 723) +* GMP_NUMB_MAX: Low-level Functions. (line 731) +* gmp_obstack_printf: Formatted Output Functions. + (line 75) +* gmp_obstack_vprintf: Formatted Output Functions. + (line 77) +* gmp_printf: Formatted Output Functions. + (line 23) +* gmp_randclass: C++ Interface Random Numbers. + (line 6) +* gmp_randclass::get_f: C++ Interface Random Numbers. + (line 44) +* gmp_randclass::get_f <1>: C++ Interface Random Numbers. + (line 45) +* gmp_randclass::get_z_bits: C++ Interface Random Numbers. + (line 37) +* gmp_randclass::get_z_bits <1>: C++ Interface Random Numbers. + (line 38) +* gmp_randclass::get_z_range: C++ Interface Random Numbers. + (line 41) +* gmp_randclass::gmp_randclass: C++ Interface Random Numbers. + (line 11) +* gmp_randclass::gmp_randclass <1>: C++ Interface Random Numbers. + (line 26) +* gmp_randclass::seed: C++ Interface Random Numbers. + (line 32) +* gmp_randclass::seed <1>: C++ Interface Random Numbers. + (line 33) +* gmp_randclear: Random State Initialization. + (line 62) +* gmp_randinit: Random State Initialization. + (line 45) +* gmp_randinit_default: Random State Initialization. + (line 6) +* gmp_randinit_lc_2exp: Random State Initialization. + (line 16) +* gmp_randinit_lc_2exp_size: Random State Initialization. + (line 30) +* gmp_randinit_mt: Random State Initialization. + (line 12) +* gmp_randinit_set: Random State Initialization. + (line 41) +* gmp_randseed: Random State Seeding. + (line 6) +* gmp_randseed_ui: Random State Seeding. + (line 8) +* gmp_randstate_ptr: Nomenclature and Types. + (line 55) +* gmp_randstate_srcptr: Nomenclature and Types. + (line 55) +* gmp_randstate_t: Nomenclature and Types. + (line 46) +* GMP_RAND_ALG_DEFAULT: Random State Initialization. + (line 50) +* GMP_RAND_ALG_LC: Random State Initialization. + (line 50) +* gmp_scanf: Formatted Input Functions. + (line 20) +* gmp_snprintf: Formatted Output Functions. + (line 44) +* gmp_sprintf: Formatted Output Functions. + (line 33) +* gmp_sscanf: Formatted Input Functions. + (line 28) +* gmp_urandomb_ui: Random State Miscellaneous. + (line 6) +* gmp_urandomm_ui: Random State Miscellaneous. + (line 12) +* gmp_vasprintf: Formatted Output Functions. + (line 64) +* gmp_version: Useful Macros and Constants. + (line 18) +* gmp_vfprintf: Formatted Output Functions. + (line 29) +* gmp_vfscanf: Formatted Input Functions. + (line 25) +* gmp_vprintf: Formatted Output Functions. + (line 24) +* gmp_vscanf: Formatted Input Functions. + (line 21) +* gmp_vsnprintf: Formatted Output Functions. + (line 46) +* gmp_vsprintf: Formatted Output Functions. + (line 34) +* gmp_vsscanf: Formatted Input Functions. + (line 29) +* hypot: C++ Interface Floats. + (line 96) +* lcm: C++ Interface Integers. + (line 69) +* mpf_abs: Float Arithmetic. (line 46) +* mpf_add: Float Arithmetic. (line 6) +* mpf_add_ui: Float Arithmetic. (line 7) +* mpf_ceil: Miscellaneous Float Functions. + (line 6) +* mpf_class: C++ Interface General. + (line 19) +* mpf_class::fits_sint_p: C++ Interface Floats. + (line 87) +* mpf_class::fits_slong_p: C++ Interface Floats. + (line 88) +* mpf_class::fits_sshort_p: C++ Interface Floats. + (line 89) +* mpf_class::fits_uint_p: C++ Interface Floats. + (line 91) +* mpf_class::fits_ulong_p: C++ Interface Floats. + (line 92) +* mpf_class::fits_ushort_p: C++ Interface Floats. + (line 93) +* mpf_class::get_d: C++ Interface Floats. + (line 98) +* mpf_class::get_mpf_t: C++ Interface General. + (line 65) +* mpf_class::get_prec: C++ Interface Floats. + (line 120) +* mpf_class::get_si: C++ Interface Floats. + (line 99) +* mpf_class::get_str: C++ Interface Floats. + (line 100) +* mpf_class::get_ui: C++ Interface Floats. + (line 102) +* mpf_class::mpf_class: C++ Interface Floats. + (line 11) +* mpf_class::mpf_class <1>: C++ Interface Floats. + (line 12) +* mpf_class::mpf_class <2>: C++ Interface Floats. + (line 32) +* mpf_class::mpf_class <3>: C++ Interface Floats. + (line 33) +* mpf_class::mpf_class <4>: C++ Interface Floats. + (line 41) +* mpf_class::mpf_class <5>: C++ Interface Floats. + (line 42) +* mpf_class::mpf_class <6>: C++ Interface Floats. + (line 44) +* mpf_class::mpf_class <7>: C++ Interface Floats. + (line 45) +* mpf_class::operator=: C++ Interface Floats. + (line 59) +* mpf_class::set_prec: C++ Interface Floats. + (line 121) +* mpf_class::set_prec_raw: C++ Interface Floats. + (line 122) +* mpf_class::set_str: C++ Interface Floats. + (line 104) +* mpf_class::set_str <1>: C++ Interface Floats. + (line 105) +* mpf_class::swap: C++ Interface Floats. + (line 109) +* mpf_clear: Initializing Floats. (line 36) +* mpf_clears: Initializing Floats. (line 40) +* mpf_cmp: Float Comparison. (line 6) +* mpf_cmp_d: Float Comparison. (line 8) +* mpf_cmp_si: Float Comparison. (line 10) +* mpf_cmp_ui: Float Comparison. (line 9) +* mpf_cmp_z: Float Comparison. (line 7) +* mpf_div: Float Arithmetic. (line 28) +* mpf_div_2exp: Float Arithmetic. (line 53) +* mpf_div_ui: Float Arithmetic. (line 31) +* mpf_eq: Float Comparison. (line 17) +* mpf_fits_sint_p: Miscellaneous Float Functions. + (line 19) +* mpf_fits_slong_p: Miscellaneous Float Functions. + (line 17) +* mpf_fits_sshort_p: Miscellaneous Float Functions. + (line 21) +* mpf_fits_uint_p: Miscellaneous Float Functions. + (line 18) +* mpf_fits_ulong_p: Miscellaneous Float Functions. + (line 16) +* mpf_fits_ushort_p: Miscellaneous Float Functions. + (line 20) +* mpf_floor: Miscellaneous Float Functions. + (line 7) +* mpf_get_d: Converting Floats. (line 6) +* mpf_get_default_prec: Initializing Floats. (line 11) +* mpf_get_d_2exp: Converting Floats. (line 15) +* mpf_get_prec: Initializing Floats. (line 61) +* mpf_get_si: Converting Floats. (line 27) +* mpf_get_str: Converting Floats. (line 36) +* mpf_get_ui: Converting Floats. (line 28) +* mpf_init: Initializing Floats. (line 18) +* mpf_init2: Initializing Floats. (line 25) +* mpf_inits: Initializing Floats. (line 30) +* mpf_init_set: Simultaneous Float Init & Assign. + (line 15) +* mpf_init_set_d: Simultaneous Float Init & Assign. + (line 18) +* mpf_init_set_si: Simultaneous Float Init & Assign. + (line 17) +* mpf_init_set_str: Simultaneous Float Init & Assign. + (line 24) +* mpf_init_set_ui: Simultaneous Float Init & Assign. + (line 16) +* mpf_inp_str: I/O of Floats. (line 38) +* mpf_integer_p: Miscellaneous Float Functions. + (line 13) +* mpf_mul: Float Arithmetic. (line 18) +* mpf_mul_2exp: Float Arithmetic. (line 49) +* mpf_mul_ui: Float Arithmetic. (line 19) +* mpf_neg: Float Arithmetic. (line 43) +* mpf_out_str: I/O of Floats. (line 17) +* mpf_pow_ui: Float Arithmetic. (line 39) +* mpf_ptr: Nomenclature and Types. + (line 55) +* mpf_random2: Miscellaneous Float Functions. + (line 35) +* mpf_reldiff: Float Comparison. (line 28) +* mpf_set: Assigning Floats. (line 9) +* mpf_set_d: Assigning Floats. (line 12) +* mpf_set_default_prec: Initializing Floats. (line 6) +* mpf_set_prec: Initializing Floats. (line 64) +* mpf_set_prec_raw: Initializing Floats. (line 71) +* mpf_set_q: Assigning Floats. (line 14) +* mpf_set_si: Assigning Floats. (line 11) +* mpf_set_str: Assigning Floats. (line 17) +* mpf_set_ui: Assigning Floats. (line 10) +* mpf_set_z: Assigning Floats. (line 13) +* mpf_sgn: Float Comparison. (line 33) +* mpf_sqrt: Float Arithmetic. (line 35) +* mpf_sqrt_ui: Float Arithmetic. (line 36) +* mpf_srcptr: Nomenclature and Types. + (line 55) +* mpf_sub: Float Arithmetic. (line 11) +* mpf_sub_ui: Float Arithmetic. (line 14) +* mpf_swap: Assigning Floats. (line 50) +* mpf_t: Nomenclature and Types. + (line 21) +* mpf_trunc: Miscellaneous Float Functions. + (line 8) +* mpf_ui_div: Float Arithmetic. (line 29) +* mpf_ui_sub: Float Arithmetic. (line 12) +* mpf_urandomb: Miscellaneous Float Functions. + (line 25) +* mpn_add: Low-level Functions. (line 67) +* mpn_addmul_1: Low-level Functions. (line 148) +* mpn_add_1: Low-level Functions. (line 62) +* mpn_add_n: Low-level Functions. (line 52) +* mpn_andn_n: Low-level Functions. (line 462) +* mpn_and_n: Low-level Functions. (line 447) +* mpn_cmp: Low-level Functions. (line 293) +* mpn_cnd_add_n: Low-level Functions. (line 540) +* mpn_cnd_sub_n: Low-level Functions. (line 542) +* mpn_cnd_swap: Low-level Functions. (line 567) +* mpn_com: Low-level Functions. (line 487) +* mpn_copyd: Low-level Functions. (line 496) +* mpn_copyi: Low-level Functions. (line 492) +* mpn_divexact_1: Low-level Functions. (line 231) +* mpn_divexact_by3: Low-level Functions. (line 238) +* mpn_divexact_by3c: Low-level Functions. (line 240) +* mpn_divmod: Low-level Functions. (line 226) +* mpn_divmod_1: Low-level Functions. (line 210) +* mpn_divrem: Low-level Functions. (line 183) +* mpn_divrem_1: Low-level Functions. (line 208) +* mpn_gcd: Low-level Functions. (line 301) +* mpn_gcdext: Low-level Functions. (line 316) +* mpn_gcd_1: Low-level Functions. (line 311) +* mpn_get_str: Low-level Functions. (line 371) +* mpn_hamdist: Low-level Functions. (line 436) +* mpn_iorn_n: Low-level Functions. (line 467) +* mpn_ior_n: Low-level Functions. (line 452) +* mpn_lshift: Low-level Functions. (line 269) +* mpn_mod_1: Low-level Functions. (line 264) +* mpn_mul: Low-level Functions. (line 114) +* mpn_mul_1: Low-level Functions. (line 133) +* mpn_mul_n: Low-level Functions. (line 103) +* mpn_nand_n: Low-level Functions. (line 472) +* mpn_neg: Low-level Functions. (line 96) +* mpn_nior_n: Low-level Functions. (line 477) +* mpn_perfect_square_p: Low-level Functions. (line 442) +* mpn_popcount: Low-level Functions. (line 432) +* mpn_random: Low-level Functions. (line 422) +* mpn_random2: Low-level Functions. (line 423) +* mpn_rshift: Low-level Functions. (line 281) +* mpn_scan0: Low-level Functions. (line 406) +* mpn_scan1: Low-level Functions. (line 414) +* mpn_sec_add_1: Low-level Functions. (line 553) +* mpn_sec_div_qr: Low-level Functions. (line 630) +* mpn_sec_div_qr_itch: Low-level Functions. (line 633) +* mpn_sec_div_r: Low-level Functions. (line 649) +* mpn_sec_div_r_itch: Low-level Functions. (line 651) +* mpn_sec_invert: Low-level Functions. (line 665) +* mpn_sec_invert_itch: Low-level Functions. (line 667) +* mpn_sec_mul: Low-level Functions. (line 574) +* mpn_sec_mul_itch: Low-level Functions. (line 577) +* mpn_sec_powm: Low-level Functions. (line 604) +* mpn_sec_powm_itch: Low-level Functions. (line 607) +* mpn_sec_sqr: Low-level Functions. (line 590) +* mpn_sec_sqr_itch: Low-level Functions. (line 592) +* mpn_sec_sub_1: Low-level Functions. (line 555) +* mpn_sec_tabselect: Low-level Functions. (line 622) +* mpn_set_str: Low-level Functions. (line 386) +* mpn_sizeinbase: Low-level Functions. (line 364) +* mpn_sqr: Low-level Functions. (line 125) +* mpn_sqrtrem: Low-level Functions. (line 346) +* mpn_sub: Low-level Functions. (line 88) +* mpn_submul_1: Low-level Functions. (line 160) +* mpn_sub_1: Low-level Functions. (line 83) +* mpn_sub_n: Low-level Functions. (line 74) +* mpn_tdiv_qr: Low-level Functions. (line 172) +* mpn_xnor_n: Low-level Functions. (line 482) +* mpn_xor_n: Low-level Functions. (line 457) +* mpn_zero: Low-level Functions. (line 500) +* mpn_zero_p: Low-level Functions. (line 298) +* mpq_abs: Rational Arithmetic. (line 33) +* mpq_add: Rational Arithmetic. (line 6) +* mpq_canonicalize: Rational Number Functions. + (line 21) +* mpq_class: C++ Interface General. + (line 18) +* mpq_class::canonicalize: C++ Interface Rationals. + (line 41) +* mpq_class::get_d: C++ Interface Rationals. + (line 51) +* mpq_class::get_den: C++ Interface Rationals. + (line 67) +* mpq_class::get_den_mpz_t: C++ Interface Rationals. + (line 77) +* mpq_class::get_mpq_t: C++ Interface General. + (line 64) +* mpq_class::get_num: C++ Interface Rationals. + (line 66) +* mpq_class::get_num_mpz_t: C++ Interface Rationals. + (line 76) +* mpq_class::get_str: C++ Interface Rationals. + (line 52) +* mpq_class::mpq_class: C++ Interface Rationals. + (line 9) +* mpq_class::mpq_class <1>: C++ Interface Rationals. + (line 10) +* mpq_class::mpq_class <2>: C++ Interface Rationals. + (line 21) +* mpq_class::mpq_class <3>: C++ Interface Rationals. + (line 26) +* mpq_class::mpq_class <4>: C++ Interface Rationals. + (line 28) +* mpq_class::set_str: C++ Interface Rationals. + (line 54) +* mpq_class::set_str <1>: C++ Interface Rationals. + (line 55) +* mpq_class::swap: C++ Interface Rationals. + (line 58) +* mpq_clear: Initializing Rationals. + (line 15) +* mpq_clears: Initializing Rationals. + (line 19) +* mpq_cmp: Comparing Rationals. (line 6) +* mpq_cmp_si: Comparing Rationals. (line 16) +* mpq_cmp_ui: Comparing Rationals. (line 14) +* mpq_cmp_z: Comparing Rationals. (line 7) +* mpq_denref: Applying Integer Functions. + (line 16) +* mpq_div: Rational Arithmetic. (line 22) +* mpq_div_2exp: Rational Arithmetic. (line 26) +* mpq_equal: Comparing Rationals. (line 33) +* mpq_get_d: Rational Conversions. + (line 6) +* mpq_get_den: Applying Integer Functions. + (line 24) +* mpq_get_num: Applying Integer Functions. + (line 23) +* mpq_get_str: Rational Conversions. + (line 21) +* mpq_init: Initializing Rationals. + (line 6) +* mpq_inits: Initializing Rationals. + (line 11) +* mpq_inp_str: I/O of Rationals. (line 32) +* mpq_inv: Rational Arithmetic. (line 36) +* mpq_mul: Rational Arithmetic. (line 14) +* mpq_mul_2exp: Rational Arithmetic. (line 18) +* mpq_neg: Rational Arithmetic. (line 30) +* mpq_numref: Applying Integer Functions. + (line 15) +* mpq_out_str: I/O of Rationals. (line 17) +* mpq_ptr: Nomenclature and Types. + (line 55) +* mpq_set: Initializing Rationals. + (line 23) +* mpq_set_d: Rational Conversions. + (line 16) +* mpq_set_den: Applying Integer Functions. + (line 26) +* mpq_set_f: Rational Conversions. + (line 17) +* mpq_set_num: Applying Integer Functions. + (line 25) +* mpq_set_si: Initializing Rationals. + (line 29) +* mpq_set_str: Initializing Rationals. + (line 35) +* mpq_set_ui: Initializing Rationals. + (line 27) +* mpq_set_z: Initializing Rationals. + (line 24) +* mpq_sgn: Comparing Rationals. (line 27) +* mpq_srcptr: Nomenclature and Types. + (line 55) +* mpq_sub: Rational Arithmetic. (line 10) +* mpq_swap: Initializing Rationals. + (line 54) +* mpq_t: Nomenclature and Types. + (line 16) +* mpz_2fac_ui: Number Theoretic Functions. + (line 122) +* mpz_abs: Integer Arithmetic. (line 44) +* mpz_add: Integer Arithmetic. (line 6) +* mpz_addmul: Integer Arithmetic. (line 24) +* mpz_addmul_ui: Integer Arithmetic. (line 26) +* mpz_add_ui: Integer Arithmetic. (line 7) +* mpz_and: Integer Logic and Bit Fiddling. + (line 10) +* mpz_array_init: Integer Special Functions. + (line 9) +* mpz_bin_ui: Number Theoretic Functions. + (line 133) +* mpz_bin_uiui: Number Theoretic Functions. + (line 135) +* mpz_cdiv_q: Integer Division. (line 12) +* mpz_cdiv_qr: Integer Division. (line 14) +* mpz_cdiv_qr_ui: Integer Division. (line 21) +* mpz_cdiv_q_2exp: Integer Division. (line 26) +* mpz_cdiv_q_ui: Integer Division. (line 17) +* mpz_cdiv_r: Integer Division. (line 13) +* mpz_cdiv_r_2exp: Integer Division. (line 29) +* mpz_cdiv_r_ui: Integer Division. (line 19) +* mpz_cdiv_ui: Integer Division. (line 23) +* mpz_class: C++ Interface General. + (line 17) +* mpz_class::factorial: C++ Interface Integers. + (line 70) +* mpz_class::fibonacci: C++ Interface Integers. + (line 74) +* mpz_class::fits_sint_p: C++ Interface Integers. + (line 50) +* mpz_class::fits_slong_p: C++ Interface Integers. + (line 51) +* mpz_class::fits_sshort_p: C++ Interface Integers. + (line 52) +* mpz_class::fits_uint_p: C++ Interface Integers. + (line 54) +* mpz_class::fits_ulong_p: C++ Interface Integers. + (line 55) +* mpz_class::fits_ushort_p: C++ Interface Integers. + (line 56) +* mpz_class::get_d: C++ Interface Integers. + (line 58) +* mpz_class::get_mpz_t: C++ Interface General. + (line 63) +* mpz_class::get_si: C++ Interface Integers. + (line 59) +* mpz_class::get_str: C++ Interface Integers. + (line 60) +* mpz_class::get_ui: C++ Interface Integers. + (line 61) +* mpz_class::mpz_class: C++ Interface Integers. + (line 6) +* mpz_class::mpz_class <1>: C++ Interface Integers. + (line 14) +* mpz_class::mpz_class <2>: C++ Interface Integers. + (line 19) +* mpz_class::mpz_class <3>: C++ Interface Integers. + (line 21) +* mpz_class::primorial: C++ Interface Integers. + (line 72) +* mpz_class::set_str: C++ Interface Integers. + (line 63) +* mpz_class::set_str <1>: C++ Interface Integers. + (line 64) +* mpz_class::swap: C++ Interface Integers. + (line 77) +* mpz_clear: Initializing Integers. + (line 48) +* mpz_clears: Initializing Integers. + (line 52) +* mpz_clrbit: Integer Logic and Bit Fiddling. + (line 54) +* mpz_cmp: Integer Comparisons. (line 6) +* mpz_cmpabs: Integer Comparisons. (line 17) +* mpz_cmpabs_d: Integer Comparisons. (line 18) +* mpz_cmpabs_ui: Integer Comparisons. (line 19) +* mpz_cmp_d: Integer Comparisons. (line 7) +* mpz_cmp_si: Integer Comparisons. (line 8) +* mpz_cmp_ui: Integer Comparisons. (line 9) +* mpz_com: Integer Logic and Bit Fiddling. + (line 19) +* mpz_combit: Integer Logic and Bit Fiddling. + (line 57) +* mpz_congruent_2exp_p: Integer Division. (line 148) +* mpz_congruent_p: Integer Division. (line 144) +* mpz_congruent_ui_p: Integer Division. (line 146) +* mpz_divexact: Integer Division. (line 122) +* mpz_divexact_ui: Integer Division. (line 123) +* mpz_divisible_2exp_p: Integer Division. (line 135) +* mpz_divisible_p: Integer Division. (line 132) +* mpz_divisible_ui_p: Integer Division. (line 133) +* mpz_even_p: Miscellaneous Integer Functions. + (line 17) +* mpz_export: Integer Import and Export. + (line 43) +* mpz_fac_ui: Number Theoretic Functions. + (line 121) +* mpz_fdiv_q: Integer Division. (line 33) +* mpz_fdiv_qr: Integer Division. (line 35) +* mpz_fdiv_qr_ui: Integer Division. (line 42) +* mpz_fdiv_q_2exp: Integer Division. (line 47) +* mpz_fdiv_q_ui: Integer Division. (line 38) +* mpz_fdiv_r: Integer Division. (line 34) +* mpz_fdiv_r_2exp: Integer Division. (line 50) +* mpz_fdiv_r_ui: Integer Division. (line 40) +* mpz_fdiv_ui: Integer Division. (line 44) +* mpz_fib2_ui: Number Theoretic Functions. + (line 143) +* mpz_fib_ui: Number Theoretic Functions. + (line 142) +* mpz_fits_sint_p: Miscellaneous Integer Functions. + (line 9) +* mpz_fits_slong_p: Miscellaneous Integer Functions. + (line 7) +* mpz_fits_sshort_p: Miscellaneous Integer Functions. + (line 11) +* mpz_fits_uint_p: Miscellaneous Integer Functions. + (line 8) +* mpz_fits_ulong_p: Miscellaneous Integer Functions. + (line 6) +* mpz_fits_ushort_p: Miscellaneous Integer Functions. + (line 10) +* mpz_gcd: Number Theoretic Functions. + (line 38) +* mpz_gcdext: Number Theoretic Functions. + (line 54) +* mpz_gcd_ui: Number Theoretic Functions. + (line 44) +* mpz_getlimbn: Integer Special Functions. + (line 22) +* mpz_get_d: Converting Integers. (line 26) +* mpz_get_d_2exp: Converting Integers. (line 34) +* mpz_get_si: Converting Integers. (line 17) +* mpz_get_str: Converting Integers. (line 46) +* mpz_get_ui: Converting Integers. (line 10) +* mpz_hamdist: Integer Logic and Bit Fiddling. + (line 28) +* mpz_import: Integer Import and Export. + (line 9) +* mpz_init: Initializing Integers. + (line 25) +* mpz_init2: Initializing Integers. + (line 32) +* mpz_inits: Initializing Integers. + (line 28) +* mpz_init_set: Simultaneous Integer Init & Assign. + (line 26) +* mpz_init_set_d: Simultaneous Integer Init & Assign. + (line 29) +* mpz_init_set_si: Simultaneous Integer Init & Assign. + (line 28) +* mpz_init_set_str: Simultaneous Integer Init & Assign. + (line 33) +* mpz_init_set_ui: Simultaneous Integer Init & Assign. + (line 27) +* mpz_inp_raw: I/O of Integers. (line 61) +* mpz_inp_str: I/O of Integers. (line 30) +* mpz_invert: Number Theoretic Functions. + (line 81) +* mpz_ior: Integer Logic and Bit Fiddling. + (line 13) +* mpz_jacobi: Number Theoretic Functions. + (line 91) +* mpz_kronecker: Number Theoretic Functions. + (line 99) +* mpz_kronecker_si: Number Theoretic Functions. + (line 100) +* mpz_kronecker_ui: Number Theoretic Functions. + (line 101) +* mpz_lcm: Number Theoretic Functions. + (line 74) +* mpz_lcm_ui: Number Theoretic Functions. + (line 75) +* mpz_legendre: Number Theoretic Functions. + (line 94) +* mpz_limbs_finish: Integer Special Functions. + (line 47) +* mpz_limbs_modify: Integer Special Functions. + (line 40) +* mpz_limbs_read: Integer Special Functions. + (line 34) +* mpz_limbs_write: Integer Special Functions. + (line 39) +* mpz_lucnum2_ui: Number Theoretic Functions. + (line 154) +* mpz_lucnum_ui: Number Theoretic Functions. + (line 153) +* mpz_mfac_uiui: Number Theoretic Functions. + (line 123) +* mpz_mod: Integer Division. (line 112) +* mpz_mod_ui: Integer Division. (line 113) +* mpz_mul: Integer Arithmetic. (line 18) +* mpz_mul_2exp: Integer Arithmetic. (line 36) +* mpz_mul_si: Integer Arithmetic. (line 19) +* mpz_mul_ui: Integer Arithmetic. (line 20) +* mpz_neg: Integer Arithmetic. (line 41) +* mpz_nextprime: Number Theoretic Functions. + (line 22) +* mpz_odd_p: Miscellaneous Integer Functions. + (line 16) +* mpz_out_raw: I/O of Integers. (line 45) +* mpz_out_str: I/O of Integers. (line 17) +* mpz_perfect_power_p: Integer Roots. (line 27) +* mpz_perfect_square_p: Integer Roots. (line 36) +* mpz_popcount: Integer Logic and Bit Fiddling. + (line 22) +* mpz_powm: Integer Exponentiation. + (line 6) +* mpz_powm_sec: Integer Exponentiation. + (line 16) +* mpz_powm_ui: Integer Exponentiation. + (line 8) +* mpz_pow_ui: Integer Exponentiation. + (line 29) +* mpz_prevprime: Number Theoretic Functions. + (line 25) +* mpz_primorial_ui: Number Theoretic Functions. + (line 129) +* mpz_probab_prime_p: Number Theoretic Functions. + (line 6) +* mpz_ptr: Nomenclature and Types. + (line 55) +* mpz_random: Integer Random Numbers. + (line 41) +* mpz_random2: Integer Random Numbers. + (line 50) +* mpz_realloc2: Initializing Integers. + (line 56) +* mpz_remove: Number Theoretic Functions. + (line 115) +* mpz_roinit_n: Integer Special Functions. + (line 67) +* MPZ_ROINIT_N: Integer Special Functions. + (line 83) +* mpz_root: Integer Roots. (line 6) +* mpz_rootrem: Integer Roots. (line 12) +* mpz_rrandomb: Integer Random Numbers. + (line 29) +* mpz_scan0: Integer Logic and Bit Fiddling. + (line 35) +* mpz_scan1: Integer Logic and Bit Fiddling. + (line 37) +* mpz_set: Assigning Integers. (line 9) +* mpz_setbit: Integer Logic and Bit Fiddling. + (line 51) +* mpz_set_d: Assigning Integers. (line 12) +* mpz_set_f: Assigning Integers. (line 14) +* mpz_set_q: Assigning Integers. (line 13) +* mpz_set_si: Assigning Integers. (line 11) +* mpz_set_str: Assigning Integers. (line 20) +* mpz_set_ui: Assigning Integers. (line 10) +* mpz_sgn: Integer Comparisons. (line 27) +* mpz_size: Integer Special Functions. + (line 30) +* mpz_sizeinbase: Miscellaneous Integer Functions. + (line 22) +* mpz_si_kronecker: Number Theoretic Functions. + (line 102) +* mpz_sqrt: Integer Roots. (line 17) +* mpz_sqrtrem: Integer Roots. (line 20) +* mpz_srcptr: Nomenclature and Types. + (line 55) +* mpz_sub: Integer Arithmetic. (line 11) +* mpz_submul: Integer Arithmetic. (line 30) +* mpz_submul_ui: Integer Arithmetic. (line 32) +* mpz_sub_ui: Integer Arithmetic. (line 12) +* mpz_swap: Assigning Integers. (line 36) +* mpz_t: Nomenclature and Types. + (line 6) +* mpz_tdiv_q: Integer Division. (line 54) +* mpz_tdiv_qr: Integer Division. (line 56) +* mpz_tdiv_qr_ui: Integer Division. (line 63) +* mpz_tdiv_q_2exp: Integer Division. (line 68) +* mpz_tdiv_q_ui: Integer Division. (line 59) +* mpz_tdiv_r: Integer Division. (line 55) +* mpz_tdiv_r_2exp: Integer Division. (line 71) +* mpz_tdiv_r_ui: Integer Division. (line 61) +* mpz_tdiv_ui: Integer Division. (line 65) +* mpz_tstbit: Integer Logic and Bit Fiddling. + (line 60) +* mpz_ui_kronecker: Number Theoretic Functions. + (line 103) +* mpz_ui_pow_ui: Integer Exponentiation. + (line 31) +* mpz_ui_sub: Integer Arithmetic. (line 14) +* mpz_urandomb: Integer Random Numbers. + (line 12) +* mpz_urandomm: Integer Random Numbers. + (line 21) +* mpz_xor: Integer Logic and Bit Fiddling. + (line 16) +* mp_bitcnt_t: Nomenclature and Types. + (line 42) +* mp_bits_per_limb: Useful Macros and Constants. + (line 7) +* mp_exp_t: Nomenclature and Types. + (line 27) +* mp_get_memory_functions: Custom Allocation. (line 86) +* mp_limb_t: Nomenclature and Types. + (line 31) +* mp_set_memory_functions: Custom Allocation. (line 14) +* mp_size_t: Nomenclature and Types. + (line 37) +* operator"": C++ Interface Integers. + (line 29) +* operator"" <1>: C++ Interface Rationals. + (line 36) +* operator"" <2>: C++ Interface Floats. + (line 55) +* operator%: C++ Interface Integers. + (line 34) +* operator/: C++ Interface Integers. + (line 33) +* operator<<: C++ Formatted Output. + (line 10) +* operator<< <1>: C++ Formatted Output. + (line 19) +* operator<< <2>: C++ Formatted Output. + (line 32) +* operator>>: C++ Formatted Input. (line 10) +* operator>> <1>: C++ Formatted Input. (line 13) +* operator>> <2>: C++ Formatted Input. (line 24) +* operator>> <3>: C++ Interface Rationals. + (line 86) +* primorial: C++ Interface Integers. + (line 73) +* sgn: C++ Interface Integers. + (line 65) +* sgn <1>: C++ Interface Rationals. + (line 56) +* sgn <2>: C++ Interface Floats. + (line 106) +* sqrt: C++ Interface Integers. + (line 66) +* sqrt <1>: C++ Interface Floats. + (line 107) +* swap: C++ Interface Integers. + (line 78) +* swap <1>: C++ Interface Rationals. + (line 59) +* swap <2>: C++ Interface Floats. + (line 110) +* trunc: C++ Interface Floats. + (line 111) + diff --git a/misc/builddeps/emscripten/ode/bin/ode-config b/misc/builddeps/emscripten/ode/bin/ode-config new file mode 100755 index 00000000..dddc75da --- /dev/null +++ b/misc/builddeps/emscripten/ode/bin/ode-config @@ -0,0 +1,53 @@ +#!/bin/sh + +prefix=/usr/local +exec_prefix=${prefix} +exec_prefix_set=no + +usage="\ +Usage: ode-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs]" + +if test $# -eq 0; then + echo "${usage}" 1>&2 + exit 1 +fi + +while test $# -gt 0; do + case "$1" in + -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + case $1 in + --prefix=*) + prefix=$optarg + if test $exec_prefix_set = no ; then + exec_prefix=$optarg + fi + ;; + --prefix) + echo $prefix + ;; + --exec-prefix=*) + exec_prefix=$optarg + exec_prefix_set=yes + ;; + --exec-prefix) + echo $exec_prefix + ;; + --version) + echo 0.12 + ;; + --cflags) + echo -I${prefix}/include -DdDOUBLE + ;; + --libs) + echo -L${exec_prefix}/lib -lode + ;; + *) + echo "${usage}" 1>&2 + exit 1 + ;; + esac + shift +done diff --git a/misc/builddeps/emscripten/ode/include/Makefile.am b/misc/builddeps/emscripten/ode/include/Makefile.am new file mode 100644 index 00000000..2f77d2ed --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = ode \ No newline at end of file diff --git a/misc/builddeps/emscripten/ode/include/Makefile.in b/misc/builddeps/emscripten/ode/include/Makefile.in new file mode 100644 index 00000000..dcfbefc9 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/Makefile.in @@ -0,0 +1,482 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +LIBOBJDIR = +subdir = include +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/ode/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +ARCHFLAGS = @ARCHFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRAWSTUFF = @DRAWSTUFF@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GL_LIBS = @GL_LIBS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +ODE_AGE = @ODE_AGE@ +ODE_CURRENT = @ODE_CURRENT@ +ODE_RELEASE = @ODE_RELEASE@ +ODE_REVISION = @ODE_REVISION@ +ODE_SONAME = @ODE_SONAME@ +OPCODE_FALSE = @OPCODE_FALSE@ +OPCODE_TRUE = @OPCODE_TRUE@ +OSX_FALSE = @OSX_FALSE@ +OSX_TRUE = @OSX_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHARED_LDFLAGS = @SHARED_LDFLAGS@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPDIR = @TOPDIR@ +USE_SONAME_FALSE = @USE_SONAME_FALSE@ +USE_SONAME_TRUE = @USE_SONAME_TRUE@ +VERSION = @VERSION@ +WIN32_FALSE = @WIN32_FALSE@ +WIN32_TRUE = @WIN32_TRUE@ +WINDRES = @WINDRES@ +X11_FALSE = @X11_FALSE@ +X11_TRUE = @X11_TRUE@ +X86_64_SYSTEM_FALSE = @X86_64_SYSTEM_FALSE@ +X86_64_SYSTEM_TRUE = @X86_64_SYSTEM_TRUE@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +ac_ct_WINDRES = @ac_ct_WINDRES@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +so_ext = @so_ext@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +SUBDIRS = ode +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-recursive ctags ctags-recursive \ + distclean distclean-generic distclean-recursive distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-generic \ + mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/misc/builddeps/emscripten/ode/include/drawstuff/drawstuff.h b/misc/builddeps/emscripten/ode/include/drawstuff/drawstuff.h new file mode 100644 index 00000000..024dbe14 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/drawstuff/drawstuff.h @@ -0,0 +1,281 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/** @defgroup drawstuff DrawStuff + +DrawStuff is a library for rendering simple 3D objects in a virtual +environment, for the purposes of demonstrating the features of ODE. +It is provided for demonstration purposes and is not intended for +production use. + +@section Notes + +In the virtual world, the z axis is "up" and z=0 is the floor. + +The user is able to click+drag in the main window to move the camera: + * left button - pan and tilt. + * right button - forward and sideways. + * left + right button (or middle button) - sideways and up. +*/ + + +#ifndef __DRAWSTUFF_H__ +#define __DRAWSTUFF_H__ + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + + +/* texture numbers */ +#define DS_NONE 0 /* uses the current color instead of a texture */ +#define DS_WOOD 1 + + +/** + * @struct dsFunctions + * @brief Set of functions to be used as callbacks by the simulation loop. + * @ingroup drawstuff + */ +typedef struct dsFunctions { + int version; /* put DS_VERSION here */ + /* version 1 data */ + void (*start)(); /* called before sim loop starts */ + void (*step) (int pause); /* called before every frame */ + void (*command) (int cmd); /* called if a command key is pressed */ + void (*stop)(); /* called after sim loop exits */ + /* version 2 data */ + char *path_to_textures; /* if nonzero, path to texture files */ +} dsFunctions; + + +/** + * @brief Does the complete simulation. + * @ingroup drawstuff + * This function starts running the simulation, and only exits when the simulation is done. + * Function pointers should be provided for the callbacks. + * @param argv supports flags like '-notex' '-noshadow' '-pause' + * @param fn Callback functions. + */ +void dsSimulationLoop (int argc, char **argv, + int window_width, int window_height, + struct dsFunctions *fn); + +/** + * @brief exit with error message. + * @ingroup drawstuff + * This function displays an error message then exit. + * @param msg format strin, like printf, without the newline character. + */ +void dsError (char *msg, ...); + +/** + * @brief exit with error message and core dump. + * @ingroup drawstuff + * this functions tries to dump core or start the debugger. + * @param msg format strin, like printf, without the newline character. + */ +void dsDebug (char *msg, ...); + +/** + * @brief print log message + * @ingroup drawstuff + * @param msg format string, like printf, without the \n. + */ +void dsPrint (char *msg, ...); + +/** + * @brief Sets the viewpoint + * @ingroup drawstuff + * @param xyz camera position. + * @param hpr contains heading, pitch and roll numbers in degrees. heading=0 + * points along the x axis, pitch=0 is looking towards the horizon, and + * roll 0 is "unrotated". + */ +void dsSetViewpoint (float xyz[3], float hpr[3]); + + +/** + * @brief Gets the viewpoint + * @ingroup drawstuff + * @param xyz position + * @param hpr heading,pitch,roll. + */ +void dsGetViewpoint (float xyz[3], float hpr[3]); + +/** + * @brief Stop the simulation loop. + * @ingroup drawstuff + * Calling this from within dsSimulationLoop() + * will cause it to exit and return to the caller. it is the same as if the + * user used the exit command. using this outside the loop will have no + * effect. + */ +void dsStop(); + +/** + * @brief Get the elapsed time (on wall-clock) + * @ingroup drawstuff + * It returns the nr of seconds since the last call to this function. + */ +double dsElapsedTime(); + +/** + * @brief Toggle the rendering of textures. + * @ingroup drawstuff + * It changes the way objects are drawn. these changes will apply to all further + * dsDrawXXX() functions. + * @param the texture number must be a DS_xxx texture constant. + * The current texture is colored according to the current color. + * At the start of each frame, the texture is reset to none and the color is + * reset to white. + */ +void dsSetTexture (int texture_number); + +/** + * @brief Set the color with which geometry is drawn. + * @ingroup drawstuff + * @param red Red component from 0 to 1 + * @param green Green component from 0 to 1 + * @param blue Blue component from 0 to 1 + */ +void dsSetColor (float red, float green, float blue); + +/** + * @brief Set the color and transparency with which geometry is drawn. + * @ingroup drawstuff + * @param alpha Note that alpha transparency is a misnomer: it is alpha opacity. + * 1.0 means fully opaque, and 0.0 means fully transparent. + */ +void dsSetColorAlpha (float red, float green, float blue, float alpha); + +/** + * @brief Draw a box. + * @ingroup drawstuff + * @param pos is the x,y,z of the center of the object. + * @param R is a 3x3 rotation matrix for the object, stored by row like this: + * [ R11 R12 R13 0 ] + * [ R21 R22 R23 0 ] + * [ R31 R32 R33 0 ] + * @param sides[] is an array of x,y,z side lengths. + */ +void dsDrawBox (const float pos[3], const float R[12], const float sides[3]); + +/** + * @brief Draw a sphere. + * @ingroup drawstuff + * @param pos Position of center. + * @param R orientation. + * @param radius + */ +void dsDrawSphere (const float pos[3], const float R[12], float radius); + +/** + * @brief Draw a triangle. + * @ingroup drawstuff + * @param pos Position of center + * @param R orientation + * @param v0 first vertex + * @param v1 second + * @param v2 third vertex + * @param solid set to 0 for wireframe + */ +void dsDrawTriangle (const float pos[3], const float R[12], + const float *v0, const float *v1, const float *v2, int solid); + +/** + * @brief Draw a z-aligned cylinder + * @ingroup drawstuff + */ +void dsDrawCylinder (const float pos[3], const float R[12], + float length, float radius); + +/** + * @brief Draw a z-aligned capsule + * @ingroup drawstuff + */ +void dsDrawCapsule (const float pos[3], const float R[12], + float length, float radius); + +/** + * @brief Draw a line. + * @ingroup drawstuff + */ +void dsDrawLine (const float pos1[3], const float pos2[3]); + +/** + * @brief Draw a convex shape. + * @ingroup drawstuff + */ +void dsDrawConvex(const float pos[3], const float R[12], + float *_planes, + unsigned int _planecount, + float *_points, + unsigned int _pointcount, + unsigned int *_polygons); + + /* these drawing functions are identical to the ones above, except they take + * double arrays for `pos' and `R'. + */ +void dsDrawBoxD (const double pos[3], const double R[12], + const double sides[3]); +void dsDrawSphereD (const double pos[3], const double R[12], + const float radius); +void dsDrawTriangleD (const double pos[3], const double R[12], + const double *v0, const double *v1, const double *v2, int solid); +void dsDrawCylinderD (const double pos[3], const double R[12], + float length, float radius); +void dsDrawCapsuleD (const double pos[3], const double R[12], + float length, float radius); +void dsDrawLineD (const double pos1[3], const double pos2[3]); +void dsDrawConvexD(const double pos[3], const double R[12], + double *_planes, + unsigned int _planecount, + double *_points, + unsigned int _pointcount, + unsigned int *_polygons); + +/** + * @brief Set the quality with which curved objects are rendered. + * @ingroup drawstuff + * Higher numbers are higher quality, but slower to draw. + * This must be set before the first objects are drawn to be effective. + * Default sphere quality is 1, default capsule quality is 3. + */ +void dsSetSphereQuality (int n); /* default = 1 */ +void dsSetCapsuleQuality (int n); /* default = 3 */ + +// Backwards compatible API +#define dsDrawCappedCylinder dsDrawCapsule +#define dsDrawCappedCylinderD dsDrawCapsuleD +#define dsSetCappedCylinderQuality dsSetCapsuleQuality + +/* closing bracket for extern "C" */ +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/misc/builddeps/emscripten/ode/include/drawstuff/version.h b/misc/builddeps/emscripten/ode/include/drawstuff/version.h new file mode 100644 index 00000000..71d95f46 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/drawstuff/version.h @@ -0,0 +1,29 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef __VERSION_H +#define __VERSION_H + +/* high byte is major version, low byte is minor version */ +#define DS_VERSION 0x0002 + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/Makefile.am b/misc/builddeps/emscripten/ode/include/ode/Makefile.am new file mode 100644 index 00000000..f2563a92 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/Makefile.am @@ -0,0 +1,24 @@ +libglitch_includedir = $(includedir)/ode +libglitch_include_HEADERS = collision_trimesh.h \ + mass.h \ + odecpp.h \ + common.h \ + matrix.h \ + odecpp_collision.h \ + compatibility.h \ + memory.h \ + odecpp_old.h \ + contact.h \ + misc.h \ + odemath.h \ + collision.h \ + error.h \ + objects.h \ + rotation.h \ + collision_space.h \ + export-dif.h \ + ode.h \ + timer.h \ + config.h + +EXTRA_DIST = config.h.in diff --git a/misc/builddeps/emscripten/ode/include/ode/Makefile.in b/misc/builddeps/emscripten/ode/include/ode/Makefile.in new file mode 100644 index 00000000..9fbd3faf --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/Makefile.in @@ -0,0 +1,445 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +LIBOBJDIR = +subdir = include/ode +DIST_COMMON = README $(libglitch_include_HEADERS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libglitch_includedir)" +libglitch_includeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(libglitch_include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +ARCHFLAGS = @ARCHFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DRAWSTUFF = @DRAWSTUFF@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GL_LIBS = @GL_LIBS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +ODE_AGE = @ODE_AGE@ +ODE_CURRENT = @ODE_CURRENT@ +ODE_RELEASE = @ODE_RELEASE@ +ODE_REVISION = @ODE_REVISION@ +ODE_SONAME = @ODE_SONAME@ +OPCODE_FALSE = @OPCODE_FALSE@ +OPCODE_TRUE = @OPCODE_TRUE@ +OSX_FALSE = @OSX_FALSE@ +OSX_TRUE = @OSX_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHARED_LDFLAGS = @SHARED_LDFLAGS@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPDIR = @TOPDIR@ +USE_SONAME_FALSE = @USE_SONAME_FALSE@ +USE_SONAME_TRUE = @USE_SONAME_TRUE@ +VERSION = @VERSION@ +WIN32_FALSE = @WIN32_FALSE@ +WIN32_TRUE = @WIN32_TRUE@ +WINDRES = @WINDRES@ +X11_FALSE = @X11_FALSE@ +X11_TRUE = @X11_TRUE@ +X86_64_SYSTEM_FALSE = @X86_64_SYSTEM_FALSE@ +X86_64_SYSTEM_TRUE = @X86_64_SYSTEM_TRUE@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +ac_ct_WINDRES = @ac_ct_WINDRES@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +so_ext = @so_ext@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +libglitch_includedir = $(includedir)/ode +libglitch_include_HEADERS = collision_trimesh.h \ + mass.h \ + odecpp.h \ + common.h \ + matrix.h \ + odecpp_collision.h \ + compatibility.h \ + memory.h \ + odecpp_old.h \ + contact.h \ + misc.h \ + odemath.h \ + collision.h \ + error.h \ + objects.h \ + rotation.h \ + collision_space.h \ + export-dif.h \ + ode.h \ + timer.h \ + config.h + +EXTRA_DIST = config.h.in +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/ode/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/ode/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status include/ode/config.h +$(srcdir)/config.h.in: $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +uninstall-info-am: +install-libglitch_includeHEADERS: $(libglitch_include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(libglitch_includedir)" || $(mkdir_p) "$(DESTDIR)$(libglitch_includedir)" + @list='$(libglitch_include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(libglitch_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libglitch_includedir)/$$f'"; \ + $(libglitch_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libglitch_includedir)/$$f"; \ + done + +uninstall-libglitch_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libglitch_include_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libglitch_includedir)/$$f'"; \ + rm -f "$(DESTDIR)$(libglitch_includedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) config.h +installdirs: + for dir in "$(DESTDIR)$(libglitch_includedir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-libglitch_includeHEADERS + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libglitch_includeHEADERS + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + ctags distclean distclean-generic distclean-hdr distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am \ + install-libglitch_includeHEADERS install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am \ + uninstall-libglitch_includeHEADERS + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/misc/builddeps/emscripten/ode/include/ode/README b/misc/builddeps/emscripten/ode/include/ode/README new file mode 100644 index 00000000..9d7e99a8 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/README @@ -0,0 +1,18 @@ + +this is the public C interface to the ODE library. + +all these files should be includable from C, i.e. they should not use any +C++ features. everything should be protected with + + #ifdef __cplusplus + extern "C" { + #endif + + ... + + #ifdef __cplusplus + } + #endif + +the only exceptions are the odecpp.h and odecpp_collisioh.h files, which define a C++ wrapper for +the C interface. remember to keep this in sync! diff --git a/misc/builddeps/emscripten/ode/include/ode/collision.h b/misc/builddeps/emscripten/ode/include/ode/collision.h new file mode 100644 index 00000000..4a5fb5cf --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/collision.h @@ -0,0 +1,1323 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_COLLISION_H_ +#define _ODE_COLLISION_H_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup collide Collision Detection + * + * ODE has two main components: a dynamics simulation engine and a collision + * detection engine. The collision engine is given information about the + * shape of each body. At each time step it figures out which bodies touch + * each other and passes the resulting contact point information to the user. + * The user in turn creates contact joints between bodies. + * + * Using ODE's collision detection is optional - an alternative collision + * detection system can be used as long as it can supply the right kinds of + * contact information. + */ + + +/* ************************************************************************ */ +/* general functions */ + +/** + * @brief Destroy a geom, removing it from any space. + * + * Destroy a geom, removing it from any space it is in first. This one + * function destroys a geom of any type, but to create a geom you must call + * a creation function for that type. + * + * When a space is destroyed, if its cleanup mode is 1 (the default) then all + * the geoms in that space are automatically destroyed as well. + * + * @param geom the geom to be destroyed. + * @ingroup collide + */ +ODE_API void dGeomDestroy (dGeomID geom); + + +/** + * @brief Set the user-defined data pointer stored in the geom. + * + * @param geom the geom to hold the data + * @param data the data pointer to be stored + * @ingroup collide + */ +ODE_API void dGeomSetData (dGeomID geom, void* data); + + +/** + * @brief Get the user-defined data pointer stored in the geom. + * + * @param geom the geom containing the data + * @ingroup collide + */ +ODE_API void *dGeomGetData (dGeomID geom); + + +/** + * @brief Set the body associated with a placeable geom. + * + * Setting a body on a geom automatically combines the position vector and + * rotation matrix of the body and geom, so that setting the position or + * orientation of one will set the value for both objects. Setting a body + * ID of zero gives the geom its own position and rotation, independent + * from any body. If the geom was previously connected to a body then its + * new independent position/rotation is set to the current position/rotation + * of the body. + * + * Calling these functions on a non-placeable geom results in a runtime + * error in the debug build of ODE. + * + * @param geom the geom to connect + * @param body the body to attach to the geom + * @ingroup collide + */ +ODE_API void dGeomSetBody (dGeomID geom, dBodyID body); + + +/** + * @brief Get the body associated with a placeable geom. + * @param geom the geom to query. + * @sa dGeomSetBody + * @ingroup collide + */ +ODE_API dBodyID dGeomGetBody (dGeomID geom); + + +/** + * @brief Set the position vector of a placeable geom. + * + * If the geom is attached to a body, the body's position will also be changed. + * Calling this function on a non-placeable geom results in a runtime error in + * the debug build of ODE. + * + * @param geom the geom to set. + * @param x the new X coordinate. + * @param y the new Y coordinate. + * @param z the new Z coordinate. + * @sa dBodySetPosition + * @ingroup collide + */ +ODE_API void dGeomSetPosition (dGeomID geom, dReal x, dReal y, dReal z); + + +/** + * @brief Set the rotation matrix of a placeable geom. + * + * If the geom is attached to a body, the body's rotation will also be changed. + * Calling this function on a non-placeable geom results in a runtime error in + * the debug build of ODE. + * + * @param geom the geom to set. + * @param R the new rotation matrix. + * @sa dBodySetRotation + * @ingroup collide + */ +ODE_API void dGeomSetRotation (dGeomID geom, const dMatrix3 R); + + +/** + * @brief Set the rotation of a placeable geom. + * + * If the geom is attached to a body, the body's rotation will also be changed. + * + * Calling this function on a non-placeable geom results in a runtime error in + * the debug build of ODE. + * + * @param geom the geom to set. + * @param Q the new rotation. + * @sa dBodySetQuaternion + * @ingroup collide + */ +ODE_API void dGeomSetQuaternion (dGeomID geom, const dQuaternion Q); + + +/** + * @brief Get the position vector of a placeable geom. + * + * If the geom is attached to a body, the body's position will be returned. + * + * Calling this function on a non-placeable geom results in a runtime error in + * the debug build of ODE. + * + * @param geom the geom to query. + * @returns A pointer to the geom's position vector. + * @remarks The returned value is a pointer to the geom's internal + * data structure. It is valid until any changes are made + * to the geom. + * @sa dBodyGetPosition + * @ingroup collide + */ +ODE_API const dReal * dGeomGetPosition (dGeomID geom); + + +/** + * @brief Get the rotation matrix of a placeable geom. + * + * If the geom is attached to a body, the body's rotation will be returned. + * + * Calling this function on a non-placeable geom results in a runtime error in + * the debug build of ODE. + * + * @param geom the geom to query. + * @returns A pointer to the geom's rotation matrix. + * @remarks The returned value is a pointer to the geom's internal + * data structure. It is valid until any changes are made + * to the geom. + * @sa dBodyGetRotation + * @ingroup collide + */ +ODE_API const dReal * dGeomGetRotation (dGeomID geom); + + +/** + * @brief Get the rotation quaternion of a placeable geom. + * + * If the geom is attached to a body, the body's quaternion will be returned. + * + * Calling this function on a non-placeable geom results in a runtime error in + * the debug build of ODE. + * + * @param geom the geom to query. + * @param result a copy of the rotation quaternion. + * @sa dBodyGetQuaternion + * @ingroup collide + */ +ODE_API void dGeomGetQuaternion (dGeomID geom, dQuaternion result); + + +/** + * @brief Return the axis-aligned bounding box. + * + * Return in aabb an axis aligned bounding box that surrounds the given geom. + * The aabb array has elements (minx, maxx, miny, maxy, minz, maxz). If the + * geom is a space, a bounding box that surrounds all contained geoms is + * returned. + * + * This function may return a pre-computed cached bounding box, if it can + * determine that the geom has not moved since the last time the bounding + * box was computed. + * + * @param geom the geom to query + * @param aabb the returned bounding box + * @ingroup collide + */ +ODE_API void dGeomGetAABB (dGeomID geom, dReal aabb[6]); + + +/** + * @brief Determing if a geom is a space. + * @param geom the geom to query + * @returns Non-zero if the geom is a space, zero otherwise. + * @ingroup collide + */ +ODE_API int dGeomIsSpace (dGeomID geom); + + +/** + * @brief Query for the space containing a particular geom. + * @param geom the geom to query + * @returns The space that contains the geom, or NULL if the geom is + * not contained by a space. + * @ingroup collide + */ +ODE_API dSpaceID dGeomGetSpace (dGeomID); + + +/** + * @brief Given a geom, this returns its class. + * + * The ODE classes are: + * @li dSphereClass + * @li dBoxClass + * @li dCylinderClass + * @li dPlaneClass + * @li dRayClass + * @li dConvexClass + * @li dGeomTransformClass + * @li dTriMeshClass + * @li dSimpleSpaceClass + * @li dHashSpaceClass + * @li dQuadTreeSpaceClass + * @li dFirstUserClass + * @li dLastUserClass + * + * User-defined class will return their own number. + * + * @param geom the geom to query + * @returns The geom class ID. + * @ingroup collide + */ +ODE_API int dGeomGetClass (dGeomID geom); + + +/** + * @brief Set the "category" bitfield for the given geom. + * + * The category bitfield is used by spaces to govern which geoms will + * interact with each other. The bitfield is guaranteed to be at least + * 32 bits wide. The default category values for newly created geoms + * have all bits set. + * + * @param geom the geom to set + * @param bits the new bitfield value + * @ingroup collide + */ +ODE_API void dGeomSetCategoryBits (dGeomID geom, unsigned long bits); + + +/** + * @brief Set the "collide" bitfield for the given geom. + * + * The collide bitfield is used by spaces to govern which geoms will + * interact with each other. The bitfield is guaranteed to be at least + * 32 bits wide. The default category values for newly created geoms + * have all bits set. + * + * @param geom the geom to set + * @param bits the new bitfield value + * @ingroup collide + */ +ODE_API void dGeomSetCollideBits (dGeomID geom, unsigned long bits); + + +/** + * @brief Get the "category" bitfield for the given geom. + * + * @param geom the geom to set + * @param bits the new bitfield value + * @sa dGeomSetCategoryBits + * @ingroup collide + */ +ODE_API unsigned long dGeomGetCategoryBits (dGeomID); + + +/** + * @brief Get the "collide" bitfield for the given geom. + * + * @param geom the geom to set + * @param bits the new bitfield value + * @sa dGeomSetCollideBits + * @ingroup collide + */ +ODE_API unsigned long dGeomGetCollideBits (dGeomID); + + +/** + * @brief Enable a geom. + * + * Disabled geoms are completely ignored by dSpaceCollide and dSpaceCollide2, + * although they can still be members of a space. New geoms are created in + * the enabled state. + * + * @param geom the geom to enable + * @sa dGeomDisable + * @sa dGeomIsEnabled + * @ingroup collide + */ +ODE_API void dGeomEnable (dGeomID geom); + + +/** + * @brief Disable a geom. + * + * Disabled geoms are completely ignored by dSpaceCollide and dSpaceCollide2, + * although they can still be members of a space. New geoms are created in + * the enabled state. + * + * @param geom the geom to disable + * @sa dGeomDisable + * @sa dGeomIsEnabled + * @ingroup collide + */ +ODE_API void dGeomDisable (dGeomID geom); + + +/** + * @brief Check to see if a geom is enabled. + * + * Disabled geoms are completely ignored by dSpaceCollide and dSpaceCollide2, + * although they can still be members of a space. New geoms are created in + * the enabled state. + * + * @param geom the geom to query + * @returns Non-zero if the geom is enabled, zero otherwise. + * @sa dGeomDisable + * @sa dGeomIsEnabled + * @ingroup collide + */ +ODE_API int dGeomIsEnabled (dGeomID geom); + +/* ************************************************************************ */ +/* geom offset from body */ + +/** + * @brief Set the local offset position of a geom from its body. + * + * Sets the geom's positional offset in local coordinates. + * After this call, the geom will be at a new position determined from the + * body's position and the offset. + * The geom must be attached to a body. + * If the geom did not have an offset, it is automatically created. + * + * @param geom the geom to set. + * @param x the new X coordinate. + * @param y the new Y coordinate. + * @param z the new Z coordinate. + * @ingroup collide + */ +ODE_API void dGeomSetOffsetPosition (dGeomID geom, dReal x, dReal y, dReal z); + + +/** + * @brief Set the local offset rotation matrix of a geom from its body. + * + * Sets the geom's rotational offset in local coordinates. + * After this call, the geom will be at a new position determined from the + * body's position and the offset. + * The geom must be attached to a body. + * If the geom did not have an offset, it is automatically created. + * + * @param geom the geom to set. + * @param R the new rotation matrix. + * @ingroup collide + */ +ODE_API void dGeomSetOffsetRotation (dGeomID geom, const dMatrix3 R); + + +/** + * @brief Set the local offset rotation of a geom from its body. + * + * Sets the geom's rotational offset in local coordinates. + * After this call, the geom will be at a new position determined from the + * body's position and the offset. + * The geom must be attached to a body. + * If the geom did not have an offset, it is automatically created. + * + * @param geom the geom to set. + * @param Q the new rotation. + * @ingroup collide + */ +ODE_API void dGeomSetOffsetQuaternion (dGeomID geom, const dQuaternion Q); + + +/** + * @brief Set the offset position of a geom from its body. + * + * Sets the geom's positional offset to move it to the new world + * coordinates. + * After this call, the geom will be at the world position passed in, + * and the offset will be the difference from the current body position. + * The geom must be attached to a body. + * If the geom did not have an offset, it is automatically created. + * + * @param geom the geom to set. + * @param x the new X coordinate. + * @param y the new Y coordinate. + * @param z the new Z coordinate. + * @ingroup collide + */ +ODE_API void dGeomSetOffsetWorldPosition (dGeomID geom, dReal x, dReal y, dReal z); + + +/** + * @brief Set the offset rotation of a geom from its body. + * + * Sets the geom's rotational offset to orient it to the new world + * rotation matrix. + * After this call, the geom will be at the world orientation passed in, + * and the offset will be the difference from the current body orientation. + * The geom must be attached to a body. + * If the geom did not have an offset, it is automatically created. + * + * @param geom the geom to set. + * @param R the new rotation matrix. + * @ingroup collide + */ +ODE_API void dGeomSetOffsetWorldRotation (dGeomID geom, const dMatrix3 R); + + +/** + * @brief Set the offset rotation of a geom from its body. + * + * Sets the geom's rotational offset to orient it to the new world + * rotation matrix. + * After this call, the geom will be at the world orientation passed in, + * and the offset will be the difference from the current body orientation. + * The geom must be attached to a body. + * If the geom did not have an offset, it is automatically created. + * + * @param geom the geom to set. + * @param Q the new rotation. + * @ingroup collide + */ +ODE_API void dGeomSetOffsetWorldQuaternion (dGeomID geom, const dQuaternion); + + +/** + * @brief Clear any offset from the geom. + * + * If the geom has an offset, it is eliminated and the geom is + * repositioned at the body's position. If the geom has no offset, + * this function does nothing. + * This is more efficient than calling dGeomSetOffsetPosition(zero) + * and dGeomSetOffsetRotation(identiy), because this function actually + * eliminates the offset, rather than leaving it as the identity transform. + * + * @param geom the geom to have its offset destroyed. + * @ingroup collide + */ +ODE_API void dGeomClearOffset(dGeomID geom); + + +/** + * @brief Check to see whether the geom has an offset. + * + * This function will return non-zero if the offset has been created. + * Note that there is a difference between a geom with no offset, + * and a geom with an offset that is the identity transform. + * In the latter case, although the observed behaviour is identical, + * there is a unnecessary computation involved because the geom will + * be applying the transform whenever it needs to recalculate its world + * position. + * + * @param geom the geom to query. + * @returns Non-zero if the geom has an offset, zero otherwise. + * @ingroup collide + */ +ODE_API int dGeomIsOffset(dGeomID geom); + + +/** + * @brief Get the offset position vector of a geom. + * + * Returns the positional offset of the geom in local coordinates. + * If the geom has no offset, this function returns the zero vector. + * + * @param geom the geom to query. + * @returns A pointer to the geom's offset vector. + * @remarks The returned value is a pointer to the geom's internal + * data structure. It is valid until any changes are made + * to the geom. + * @ingroup collide + */ +ODE_API const dReal * dGeomGetOffsetPosition (dGeomID geom); + + +/** + * @brief Get the offset position vector of a geom. + * + * Returns the positional offset of the geom in local coordinates. + * If the geom has no offset, this function returns the zero vector. + * + * @param geom the geom to query. + * @returns A pointer to the geom's offset vector. + * @remarks The returned value is a pointer to the geom's internal + * data structure. It is valid until any changes are made + * to the geom. + * @ingroup collide + */ +ODE_API const dReal * dGeomGetOffsetRotation (dGeomID geom); + + +/** + * @brief Get the offset rotation quaternion of a geom. + * + * Returns the rotation offset of the geom as a quaternion. + * If the geom has no offset, the identity quaternion is returned. + * + * @param geom the geom to query. + * @param result a copy of the rotation quaternion. + * @ingroup collide + */ +ODE_API void dGeomGetOffsetQuaternion (dGeomID geom, dQuaternion result); + +/* ************************************************************************ */ +/* collision detection */ + +/** + * + * @brief Given two geoms o1 and o2 that potentially intersect, + * generate contact information for them. + * + * Internally, this just calls the correct class-specific collision + * functions for o1 and o2. + * + * @param o1 The first geom to test. + * @param o2 The second geom to test. + * + * @param flags The flags specify how contacts should be generated if + * the geoms touch. The lower 16 bits of flags is an integer that + * specifies the maximum number of contact points to generate. Note + * that if this number is zero, this function just pretends that it is + * one -- in other words you can not ask for zero contacts. All other bits + * in flags must be zero. In the future the other bits may be used to + * select from different contact generation strategies. + * + * @param contact Points to an array of dContactGeom structures. The array + * must be able to hold at least the maximum number of contacts. These + * dContactGeom structures may be embedded within larger structures in the + * array -- the skip parameter is the byte offset from one dContactGeom to + * the next in the array. If skip is sizeof(dContactGeom) then contact + * points to a normal (C-style) array. It is an error for skip to be smaller + * than sizeof(dContactGeom). + * + * @returns If the geoms intersect, this function returns the number of contact + * points generated (and updates the contact array), otherwise it returns 0 + * (and the contact array is not touched). + * + * @remarks If a space is passed as o1 or o2 then this function will collide + * all objects contained in o1 with all objects contained in o2, and return + * the resulting contact points. This method for colliding spaces with geoms + * (or spaces with spaces) provides no user control over the individual + * collisions. To get that control, use dSpaceCollide or dSpaceCollide2 instead. + * + * @remarks If o1 and o2 are the same geom then this function will do nothing + * and return 0. Technically speaking an object intersects with itself, but it + * is not useful to find contact points in this case. + * + * @remarks This function does not care if o1 and o2 are in the same space or not + * (or indeed if they are in any space at all). + * + * @ingroup collide + */ +ODE_API int dCollide (dGeomID o1, dGeomID o2, int flags, dContactGeom *contact, + int skip); + +/** + * @brief Determines which pairs of geoms in a space may potentially intersect, + * and calls the callback function for each candidate pair. + * + * @param space The space to test. + * + * @param data Passed from dSpaceCollide directly to the callback + * function. Its meaning is user defined. The o1 and o2 arguments are the + * geoms that may be near each other. + * + * @param callback A callback function is of type @ref dNearCallback. + * + * @remarks Other spaces that are contained within the colliding space are + * not treated specially, i.e. they are not recursed into. The callback + * function may be passed these contained spaces as one or both geom + * arguments. + * + * @remarks dSpaceCollide() is guaranteed to pass all intersecting geom + * pairs to the callback function, but may also pass close but + * non-intersecting pairs. The number of these calls depends on the + * internal algorithms used by the space. Thus you should not expect + * that dCollide will return contacts for every pair passed to the + * callback. + * + * @sa dSpaceCollide2 + * @ingroup collide + */ +ODE_API void dSpaceCollide (dSpaceID space, void *data, dNearCallback *callback); + + +/** + * @brief Determines which geoms from one space may potentially intersect with + * geoms from another space, and calls the callback function for each candidate + * pair. + * + * @param space1 The first space to test. + * + * @param space2 The second space to test. + * + * @param data Passed from dSpaceCollide directly to the callback + * function. Its meaning is user defined. The o1 and o2 arguments are the + * geoms that may be near each other. + * + * @param callback A callback function is of type @ref dNearCallback. + * + * @remarks This function can also test a single non-space geom against a + * space. This function is useful when there is a collision hierarchy, i.e. + * when there are spaces that contain other spaces. + * + * @remarks Other spaces that are contained within the colliding space are + * not treated specially, i.e. they are not recursed into. The callback + * function may be passed these contained spaces as one or both geom + * arguments. + * + * @remarks dSpaceCollide2() is guaranteed to pass all intersecting geom + * pairs to the callback function, but may also pass close but + * non-intersecting pairs. The number of these calls depends on the + * internal algorithms used by the space. Thus you should not expect + * that dCollide will return contacts for every pair passed to the + * callback. + * + * @sa dSpaceCollide + * @ingroup collide + */ +ODE_API void dSpaceCollide2 (dGeomID space1, dGeomID space2, void *data, dNearCallback *callback); + + +/* ************************************************************************ */ +/* standard classes */ + +/* the maximum number of user classes that are supported */ +enum { + dMaxUserClasses = 4 +}; + +/* class numbers - each geometry object needs a unique number */ +enum { + dSphereClass = 0, + dBoxClass, + dCapsuleClass, + dCylinderClass, + dPlaneClass, + dRayClass, + dConvexClass, + dGeomTransformClass, + dTriMeshClass, + dHeightfieldClass, + + dFirstSpaceClass, + dSimpleSpaceClass = dFirstSpaceClass, + dHashSpaceClass, + dQuadTreeSpaceClass, + dLastSpaceClass = dQuadTreeSpaceClass, + + dFirstUserClass, + dLastUserClass = dFirstUserClass + dMaxUserClasses - 1, + dGeomNumClasses +}; + + +/** + * @defgroup collide_sphere Sphere Class + * @ingroup collide + */ + +/** + * @brief Create a sphere geom of the given radius, and return its ID. + * + * @param space a space to contain the new geom. May be null. + * @param radius the radius of the sphere. + * + * @returns A new sphere geom. + * + * @remarks The point of reference for a sphere is its center. + * + * @sa dGeomDestroy + * @sa dGeomSphereSetRadius + * @ingroup collide_sphere + */ +ODE_API dGeomID dCreateSphere (dSpaceID space, dReal radius); + + +/** + * @brief Set the radius of a sphere geom. + * + * @param sphere the sphere to set. + * @param radius the new radius. + * + * @sa dGeomSphereGetRadius + * @ingroup collide_sphere + */ +ODE_API void dGeomSphereSetRadius (dGeomID sphere, dReal radius); + + +/** + * @brief Retrieves the radius of a sphere geom. + * + * @param sphere the sphere to query. + * + * @sa dGeomSphereSetRadius + * @ingroup collide_sphere + */ +ODE_API dReal dGeomSphereGetRadius (dGeomID sphere); + + +/** + * @brief Calculate the depth of the a given point within a sphere. + * + * @param sphere the sphere to query. + * @param x the X coordinate of the point. + * @param y the Y coordinate of the point. + * @param z the Z coordinate of the point. + * + * @returns The depth of the point. Points inside the sphere will have a + * positive depth, points outside it will have a negative depth, and points + * on the surface will have a depth of zero. + * + * @ingroup collide_sphere + */ +ODE_API dReal dGeomSpherePointDepth (dGeomID sphere, dReal x, dReal y, dReal z); + + +//--> Convex Functions +ODE_API dGeomID dCreateConvex (dSpaceID space, + dReal *_planes, + unsigned int _planecount, + dReal *_points, + unsigned int _pointcount,unsigned int *_polygons); + +ODE_API void dGeomSetConvex (dGeomID g, + dReal *_planes, + unsigned int _count, + dReal *_points, + unsigned int _pointcount,unsigned int *_polygons); +//<-- Convex Functions + +/** + * @defgroup collide_box Box Class + * @ingroup collide + */ + +/** + * @brief Create a box geom with the provided side lengths. + * + * @param space a space to contain the new geom. May be null. + * @param lx the length of the box along the X axis + * @param ly the length of the box along the Y axis + * @param lz the length of the box along the Z axis + * + * @returns A new box geom. + * + * @remarks The point of reference for a box is its center. + * + * @sa dGeomDestroy + * @sa dGeomBoxSetLengths + * @ingroup collide_box + */ +ODE_API dGeomID dCreateBox (dSpaceID space, dReal lx, dReal ly, dReal lz); + + +/** + * @brief Set the side lengths of the given box. + * + * @param box the box to set + * @param lx the length of the box along the X axis + * @param ly the length of the box along the Y axis + * @param lz the length of the box along the Z axis + * + * @sa dGeomBoxGetLengths + * @ingroup collide_box + */ +ODE_API void dGeomBoxSetLengths (dGeomID box, dReal lx, dReal ly, dReal lz); + + +/** + * @brief Get the side lengths of a box. + * + * @param box the box to query + * @param result the returned side lengths + * + * @sa dGeomBoxSetLengths + * @ingroup collide_box + */ +ODE_API void dGeomBoxGetLengths (dGeomID box, dVector3 result); + + +/** + * @brief Return the depth of a point in a box. + * + * @param box the box to query + * @param x the X coordinate of the point to test. + * @param y the Y coordinate of the point to test. + * @param z the Z coordinate of the point to test. + * + * @returns The depth of the point. Points inside the box will have a + * positive depth, points outside it will have a negative depth, and points + * on the surface will have a depth of zero. + */ +ODE_API dReal dGeomBoxPointDepth (dGeomID box, dReal x, dReal y, dReal z); + + +ODE_API dGeomID dCreatePlane (dSpaceID space, dReal a, dReal b, dReal c, dReal d); +ODE_API void dGeomPlaneSetParams (dGeomID plane, dReal a, dReal b, dReal c, dReal d); +ODE_API void dGeomPlaneGetParams (dGeomID plane, dVector4 result); +ODE_API dReal dGeomPlanePointDepth (dGeomID plane, dReal x, dReal y, dReal z); + +ODE_API dGeomID dCreateCapsule (dSpaceID space, dReal radius, dReal length); +ODE_API void dGeomCapsuleSetParams (dGeomID ccylinder, dReal radius, dReal length); +ODE_API void dGeomCapsuleGetParams (dGeomID ccylinder, dReal *radius, dReal *length); +ODE_API dReal dGeomCapsulePointDepth (dGeomID ccylinder, dReal x, dReal y, dReal z); + +// For now we want to have a backwards compatible C-API, note: C++ API is not. +#define dCreateCCylinder dCreateCapsule +#define dGeomCCylinderSetParams dGeomCapsuleSetParams +#define dGeomCCylinderGetParams dGeomCapsuleGetParams +#define dGeomCCylinderPointDepth dGeomCapsulePointDepth +#define dCCylinderClass dCapsuleClass + +ODE_API dGeomID dCreateCylinder (dSpaceID space, dReal radius, dReal length); +ODE_API void dGeomCylinderSetParams (dGeomID cylinder, dReal radius, dReal length); +ODE_API void dGeomCylinderGetParams (dGeomID cylinder, dReal *radius, dReal *length); + +ODE_API dGeomID dCreateRay (dSpaceID space, dReal length); +ODE_API void dGeomRaySetLength (dGeomID ray, dReal length); +ODE_API dReal dGeomRayGetLength (dGeomID ray); +ODE_API void dGeomRaySet (dGeomID ray, dReal px, dReal py, dReal pz, + dReal dx, dReal dy, dReal dz); +ODE_API void dGeomRayGet (dGeomID ray, dVector3 start, dVector3 dir); + +/* + * Set/get ray flags that influence ray collision detection. + * These flags are currently only noticed by the trimesh collider, because + * they can make a major differences there. + */ +ODE_API void dGeomRaySetParams (dGeomID g, int FirstContact, int BackfaceCull); +ODE_API void dGeomRayGetParams (dGeomID g, int *FirstContact, int *BackfaceCull); +ODE_API void dGeomRaySetClosestHit (dGeomID g, int closestHit); +ODE_API int dGeomRayGetClosestHit (dGeomID g); + +#include "collision_trimesh.h" + +ODE_API dGeomID dCreateGeomTransform (dSpaceID space); +ODE_API void dGeomTransformSetGeom (dGeomID g, dGeomID obj); +ODE_API dGeomID dGeomTransformGetGeom (dGeomID g); +ODE_API void dGeomTransformSetCleanup (dGeomID g, int mode); +ODE_API int dGeomTransformGetCleanup (dGeomID g); +ODE_API void dGeomTransformSetInfo (dGeomID g, int mode); +ODE_API int dGeomTransformGetInfo (dGeomID g); + + +/* ************************************************************************ */ +/* heightfield functions */ + + +// Data storage for heightfield data. +struct dxHeightfieldData; +typedef struct dxHeightfieldData* dHeightfieldDataID; + + +/** + * @brief Callback prototype + * + * Used by the callback heightfield data type to sample a height for a + * given cell position. + * + * @param p_user_data User data specified when creating the dHeightfieldDataID + * @param x The index of a sample in the local x axis. It is a value + * in the range zero to ( nWidthSamples - 1 ). + * @param x The index of a sample in the local z axis. It is a value + * in the range zero to ( nDepthSamples - 1 ). + * + * @return The sample height which is then scaled and offset using the + * values specified when the heightfield data was created. + * + * @ingroup collide + */ +typedef dReal dHeightfieldGetHeight( void* p_user_data, int x, int z ); + + + +/** + * @brief Creates a heightfield geom. + * + * Uses the information in the given dHeightfieldDataID to construct + * a geom representing a heightfield in a collision space. + * + * @param space The space to add the geom to. + * @param data The dHeightfieldDataID created by dGeomHeightfieldDataCreate and + * setup by dGeomHeightfieldDataBuildCallback, dGeomHeightfieldDataBuildByte, + * dGeomHeightfieldDataBuildShort or dGeomHeightfieldDataBuildFloat. + * @param bPlaceable If non-zero this geom can be transformed in the world using the + * usual functions such as dGeomSetPosition and dGeomSetRotation. If the geom is + * not set as placeable, then it uses a fixed orientation where the global y axis + * represents the dynamic 'height' of the heightfield. + * + * @return A geom id to reference this geom in other calls. + * + * @ingroup collide + */ +ODE_API dGeomID dCreateHeightfield( dSpaceID space, + dHeightfieldDataID data, int bPlaceable ); + + +/** + * @brief Creates a new empty dHeightfieldDataID. + * + * Allocates a new dHeightfieldDataID and returns it. You must call + * dGeomHeightfieldDataDestroy to destroy it after the geom has been removed. + * The dHeightfieldDataID value is used when specifying a data format type. + * + * @return A dHeightfieldDataID for use with dGeomHeightfieldDataBuildCallback, + * dGeomHeightfieldDataBuildByte, dGeomHeightfieldDataBuildShort or + * dGeomHeightfieldDataBuildFloat. + * @ingroup collide + */ +ODE_API dHeightfieldDataID dGeomHeightfieldDataCreate(); + + +/** + * @brief Destroys a dHeightfieldDataID. + * + * Deallocates a given dHeightfieldDataID and all managed resources. + * + * @param d A dHeightfieldDataID created by dGeomHeightfieldDataCreate + * @ingroup collide + */ +ODE_API void dGeomHeightfieldDataDestroy( dHeightfieldDataID d ); + + + +/** + * @brief Configures a dHeightfieldDataID to use a callback to + * retrieve height data. + * + * Before a dHeightfieldDataID can be used by a geom it must be + * configured to specify the format of the height data. + * This call specifies that the heightfield data is computed by + * the user and it should use the given callback when determining + * the height of a given element of it's shape. + * + * @param d A new dHeightfieldDataID created by dGeomHeightfieldDataCreate + * + * @param width Specifies the total 'width' of the heightfield along + * the geom's local x axis. + * @param depth Specifies the total 'depth' of the heightfield along + * the geom's local z axis. + * + * @param widthSamples Specifies the number of vertices to sample + * along the width of the heightfield. Each vertex has a corresponding + * height value which forms the overall shape. + * Naturally this value must be at least two or more. + * @param depthSamples Specifies the number of vertices to sample + * along the depth of the heightfield. + * + * @param scale A uniform scale applied to all raw height data. + * @param offset An offset applied to the scaled height data. + * + * @param thickness A value subtracted from the lowest height + * value which in effect adds an additional cuboid to the base of the + * heightfield. This is used to prevent geoms from looping under the + * desired terrain and not registering as a collision. Note that the + * thickness is not affected by the scale or offset parameters. + * + * @param bWrap If non-zero the heightfield will infinitely tile in both + * directions along the local x and z axes. If zero the heightfield is + * bounded from zero to width in the local x axis, and zero to depth in + * the local z axis. + * + * @ingroup collide + */ +ODE_API void dGeomHeightfieldDataBuildCallback( dHeightfieldDataID d, + void* pUserData, dHeightfieldGetHeight* pCallback, + dReal width, dReal depth, int widthSamples, int depthSamples, + dReal scale, dReal offset, dReal thickness, int bWrap ); + +/** + * @brief Configures a dHeightfieldDataID to use height data in byte format. + * + * Before a dHeightfieldDataID can be used by a geom it must be + * configured to specify the format of the height data. + * This call specifies that the heightfield data is stored as a rectangular + * array of bytes (8 bit unsigned) representing the height at each sample point. + * + * @param d A new dHeightfieldDataID created by dGeomHeightfieldDataCreate + * + * @param pHeightData A pointer to the height data. + * @param bCopyHeightData When non-zero the height data is copied to an + * internal store. When zero the height data is accessed by reference and + * so must persist throughout the lifetime of the heightfield. + * + * @param width Specifies the total 'width' of the heightfield along + * the geom's local x axis. + * @param depth Specifies the total 'depth' of the heightfield along + * the geom's local z axis. + * + * @param widthSamples Specifies the number of vertices to sample + * along the width of the heightfield. Each vertex has a corresponding + * height value which forms the overall shape. + * Naturally this value must be at least two or more. + * @param depthSamples Specifies the number of vertices to sample + * along the depth of the heightfield. + * + * @param scale A uniform scale applied to all raw height data. + * @param offset An offset applied to the scaled height data. + * + * @param thickness A value subtracted from the lowest height + * value which in effect adds an additional cuboid to the base of the + * heightfield. This is used to prevent geoms from looping under the + * desired terrain and not registering as a collision. Note that the + * thickness is not affected by the scale or offset parameters. + * + * @param bWrap If non-zero the heightfield will infinitely tile in both + * directions along the local x and z axes. If zero the heightfield is + * bounded from zero to width in the local x axis, and zero to depth in + * the local z axis. + * + * @ingroup collide + */ +ODE_API void dGeomHeightfieldDataBuildByte( dHeightfieldDataID d, + const unsigned char* pHeightData, int bCopyHeightData, + dReal width, dReal depth, int widthSamples, int depthSamples, + dReal scale, dReal offset, dReal thickness, int bWrap ); + +/** + * @brief Configures a dHeightfieldDataID to use height data in short format. + * + * Before a dHeightfieldDataID can be used by a geom it must be + * configured to specify the format of the height data. + * This call specifies that the heightfield data is stored as a rectangular + * array of shorts (16 bit signed) representing the height at each sample point. + * + * @param d A new dHeightfieldDataID created by dGeomHeightfieldDataCreate + * + * @param pHeightData A pointer to the height data. + * @param bCopyHeightData When non-zero the height data is copied to an + * internal store. When zero the height data is accessed by reference and + * so must persist throughout the lifetime of the heightfield. + * + * @param width Specifies the total 'width' of the heightfield along + * the geom's local x axis. + * @param depth Specifies the total 'depth' of the heightfield along + * the geom's local z axis. + * + * @param widthSamples Specifies the number of vertices to sample + * along the width of the heightfield. Each vertex has a corresponding + * height value which forms the overall shape. + * Naturally this value must be at least two or more. + * @param depthSamples Specifies the number of vertices to sample + * along the depth of the heightfield. + * + * @param scale A uniform scale applied to all raw height data. + * @param offset An offset applied to the scaled height data. + * + * @param thickness A value subtracted from the lowest height + * value which in effect adds an additional cuboid to the base of the + * heightfield. This is used to prevent geoms from looping under the + * desired terrain and not registering as a collision. Note that the + * thickness is not affected by the scale or offset parameters. + * + * @param bWrap If non-zero the heightfield will infinitely tile in both + * directions along the local x and z axes. If zero the heightfield is + * bounded from zero to width in the local x axis, and zero to depth in + * the local z axis. + * + * @ingroup collide + */ +ODE_API void dGeomHeightfieldDataBuildShort( dHeightfieldDataID d, + const short* pHeightData, int bCopyHeightData, + dReal width, dReal depth, int widthSamples, int depthSamples, + dReal scale, dReal offset, dReal thickness, int bWrap ); + +/** + * @brief Configures a dHeightfieldDataID to use height data in + * single precision floating point format. + * + * Before a dHeightfieldDataID can be used by a geom it must be + * configured to specify the format of the height data. + * This call specifies that the heightfield data is stored as a rectangular + * array of single precision floats representing the height at each + * sample point. + * + * @param d A new dHeightfieldDataID created by dGeomHeightfieldDataCreate + * + * @param pHeightData A pointer to the height data. + * @param bCopyHeightData When non-zero the height data is copied to an + * internal store. When zero the height data is accessed by reference and + * so must persist throughout the lifetime of the heightfield. + * + * @param width Specifies the total 'width' of the heightfield along + * the geom's local x axis. + * @param depth Specifies the total 'depth' of the heightfield along + * the geom's local z axis. + * + * @param widthSamples Specifies the number of vertices to sample + * along the width of the heightfield. Each vertex has a corresponding + * height value which forms the overall shape. + * Naturally this value must be at least two or more. + * @param depthSamples Specifies the number of vertices to sample + * along the depth of the heightfield. + * + * @param scale A uniform scale applied to all raw height data. + * @param offset An offset applied to the scaled height data. + * + * @param thickness A value subtracted from the lowest height + * value which in effect adds an additional cuboid to the base of the + * heightfield. This is used to prevent geoms from looping under the + * desired terrain and not registering as a collision. Note that the + * thickness is not affected by the scale or offset parameters. + * + * @param bWrap If non-zero the heightfield will infinitely tile in both + * directions along the local x and z axes. If zero the heightfield is + * bounded from zero to width in the local x axis, and zero to depth in + * the local z axis. + * + * @ingroup collide + */ +ODE_API void dGeomHeightfieldDataBuildSingle( dHeightfieldDataID d, + const float* pHeightData, int bCopyHeightData, + dReal width, dReal depth, int widthSamples, int depthSamples, + dReal scale, dReal offset, dReal thickness, int bWrap ); + +/** + * @brief Configures a dHeightfieldDataID to use height data in + * double precision floating point format. + * + * Before a dHeightfieldDataID can be used by a geom it must be + * configured to specify the format of the height data. + * This call specifies that the heightfield data is stored as a rectangular + * array of double precision floats representing the height at each + * sample point. + * + * @param d A new dHeightfieldDataID created by dGeomHeightfieldDataCreate + * + * @param pHeightData A pointer to the height data. + * @param bCopyHeightData When non-zero the height data is copied to an + * internal store. When zero the height data is accessed by reference and + * so must persist throughout the lifetime of the heightfield. + * + * @param width Specifies the total 'width' of the heightfield along + * the geom's local x axis. + * @param depth Specifies the total 'depth' of the heightfield along + * the geom's local z axis. + * + * @param widthSamples Specifies the number of vertices to sample + * along the width of the heightfield. Each vertex has a corresponding + * height value which forms the overall shape. + * Naturally this value must be at least two or more. + * @param depthSamples Specifies the number of vertices to sample + * along the depth of the heightfield. + * + * @param scale A uniform scale applied to all raw height data. + * @param offset An offset applied to the scaled height data. + * + * @param thickness A value subtracted from the lowest height + * value which in effect adds an additional cuboid to the base of the + * heightfield. This is used to prevent geoms from looping under the + * desired terrain and not registering as a collision. Note that the + * thickness is not affected by the scale or offset parameters. + * + * @param bWrap If non-zero the heightfield will infinitely tile in both + * directions along the local x and z axes. If zero the heightfield is + * bounded from zero to width in the local x axis, and zero to depth in + * the local z axis. + * + * @ingroup collide + */ +ODE_API void dGeomHeightfieldDataBuildDouble( dHeightfieldDataID d, + const double* pHeightData, int bCopyHeightData, + dReal width, dReal depth, int widthSamples, int depthSamples, + dReal scale, dReal offset, dReal thickness, int bWrap ); + +/** + * @brief Manually set the minimum and maximum height bounds. + * + * This call allows you to set explicit min / max values after initial + * creation typically for callback heightfields which default to +/- infinity, + * or those whose data has changed. This must be set prior to binding with a + * geom, as the the AABB is not recomputed after it's first generation. + * + * @remarks The minimum and maximum values are used to compute the AABB + * for the heightfield which is used for early rejection of collisions. + * A close fit will yield a more efficient collision check. + * + * @param d A dHeightfieldDataID created by dGeomHeightfieldDataCreate + * @param min_height The new minimum height value. Scale, offset and thickness is then applied. + * @param max_height The new maximum height value. Scale and offset is then applied. + * @ingroup collide + */ +ODE_API void dGeomHeightfieldDataSetBounds( dHeightfieldDataID d, + dReal minHeight, dReal maxHeight ); + + +/** + * @brief Assigns a dHeightfieldDataID to a heightfield geom. + * + * Associates the given dHeightfieldDataID with a heightfield geom. + * This is done without affecting the GEOM_PLACEABLE flag. + * + * @param g A geom created by dCreateHeightfield + * @param d A dHeightfieldDataID created by dGeomHeightfieldDataCreate + * @ingroup collide + */ +ODE_API void dGeomHeightfieldSetHeightfieldData( dGeomID g, dHeightfieldDataID d ); + + +/** + * @brief Gets the dHeightfieldDataID bound to a heightfield geom. + * + * Returns the dHeightfieldDataID associated with a heightfield geom. + * + * @param g A geom created by dCreateHeightfield + * @return The dHeightfieldDataID which may be NULL if none was assigned. + * @ingroup collide + */ +ODE_API dHeightfieldDataID dGeomHeightfieldGetHeightfieldData( dGeomID g ); + + + +/* ************************************************************************ */ +/* utility functions */ + +ODE_API void dClosestLineSegmentPoints (const dVector3 a1, const dVector3 a2, + const dVector3 b1, const dVector3 b2, + dVector3 cp1, dVector3 cp2); + +ODE_API int dBoxTouchesBox (const dVector3 _p1, const dMatrix3 R1, + const dVector3 side1, const dVector3 _p2, + const dMatrix3 R2, const dVector3 side2); + +ODE_API int dBoxBox (const dVector3 p1, const dMatrix3 R1, + const dVector3 side1, const dVector3 p2, + const dMatrix3 R2, const dVector3 side2, + dVector3 normal, dReal *depth, int *return_code, + int maxc, dContactGeom *contact, int skip); + +ODE_API void dInfiniteAABB (dGeomID geom, dReal aabb[6]); +ODE_API void dCloseODE(void); + +/* ************************************************************************ */ +/* custom classes */ + +typedef void dGetAABBFn (dGeomID, dReal aabb[6]); +typedef int dColliderFn (dGeomID o1, dGeomID o2, + int flags, dContactGeom *contact, int skip); +typedef dColliderFn * dGetColliderFnFn (int num); +typedef void dGeomDtorFn (dGeomID o); +typedef int dAABBTestFn (dGeomID o1, dGeomID o2, dReal aabb[6]); + +typedef struct dGeomClass { + int bytes; + dGetColliderFnFn *collider; + dGetAABBFn *aabb; + dAABBTestFn *aabb_test; + dGeomDtorFn *dtor; +} dGeomClass; + +ODE_API int dCreateGeomClass (const dGeomClass *classptr); +ODE_API void * dGeomGetClassData (dGeomID); +ODE_API dGeomID dCreateGeom (int classnum); + +/* ************************************************************************ */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/collision_space.h b/misc/builddeps/emscripten/ode/include/ode/collision_space.h new file mode 100644 index 00000000..fb1f83f6 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/collision_space.h @@ -0,0 +1,76 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_COLLISION_SPACE_H_ +#define _ODE_COLLISION_SPACE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dContactGeom; + +/** + * @brief User callback for geom-geom collision testing. + * + * @param data The user data object, as passed to dSpaceCollide. + * @param o1 The first geom being tested. + * @param o2 The second geom being test. + * + * @remarks The callback function can call dCollide on o1 and o2 to generate + * contact points between each pair. Then these contact points may be added + * to the simulation as contact joints. The user's callback function can of + * course chose not to call dCollide for any pair, e.g. if the user decides + * that those pairs should not interact. + * + * @ingroup collide + */ +typedef void dNearCallback (void *data, dGeomID o1, dGeomID o2); + + +ODE_API dSpaceID dSimpleSpaceCreate (dSpaceID space); +ODE_API dSpaceID dHashSpaceCreate (dSpaceID space); +ODE_API dSpaceID dQuadTreeSpaceCreate (dSpaceID space, dVector3 Center, dVector3 Extents, int Depth); + +ODE_API void dSpaceDestroy (dSpaceID); + +ODE_API void dHashSpaceSetLevels (dSpaceID space, int minlevel, int maxlevel); +ODE_API void dHashSpaceGetLevels (dSpaceID space, int *minlevel, int *maxlevel); + +ODE_API void dSpaceSetCleanup (dSpaceID space, int mode); +ODE_API int dSpaceGetCleanup (dSpaceID space); + +ODE_API void dSpaceAdd (dSpaceID, dGeomID); +ODE_API void dSpaceRemove (dSpaceID, dGeomID); +ODE_API int dSpaceQuery (dSpaceID, dGeomID); +ODE_API void dSpaceClean (dSpaceID); +ODE_API int dSpaceGetNumGeoms (dSpaceID); +ODE_API dGeomID dSpaceGetGeom (dSpaceID, int i); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/collision_trimesh.h b/misc/builddeps/emscripten/ode/include/ode/collision_trimesh.h new file mode 100644 index 00000000..6b883f6b --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/collision_trimesh.h @@ -0,0 +1,193 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/* + * TriMesh code by Erwin de Vries. + * + * Trimesh data. + * This is where the actual vertexdata (pointers), and BV tree is stored. + * Vertices should be single precision! + * This should be more sophisticated, so that the user can easyly implement + * another collision library, but this is a lot of work, and also costs some + * performance because some data has to be copied. + */ + +#ifndef _ODE_COLLISION_TRIMESH_H_ +#define _ODE_COLLISION_TRIMESH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Data storage for triangle meshes. + */ +struct dxTriMeshData; +typedef struct dxTriMeshData* dTriMeshDataID; + +/* + * These dont make much sense now, but they will later when we add more + * features. + */ +ODE_API dTriMeshDataID dGeomTriMeshDataCreate(void); +ODE_API void dGeomTriMeshDataDestroy(dTriMeshDataID g); + +enum { TRIMESH_FACE_NORMALS, TRIMESH_LAST_TRANSFORMATION }; +ODE_API void dGeomTriMeshDataSet(dTriMeshDataID g, int data_id, void* in_data); +ODE_API void* dGeomTriMeshDataGet(dTriMeshDataID g, int data_id); + +/* + * Build TriMesh data with single pricision used in vertex data . + */ +ODE_API void dGeomTriMeshDataBuildSingle(dTriMeshDataID g, + const void* Vertices, int VertexStride, int VertexCount, + const void* Indices, int IndexCount, int TriStride); +/* same again with a normals array (used as trimesh-trimesh optimization) */ +ODE_API void dGeomTriMeshDataBuildSingle1(dTriMeshDataID g, + const void* Vertices, int VertexStride, int VertexCount, + const void* Indices, int IndexCount, int TriStride, + const void* Normals); +/* +* Build TriMesh data with double pricision used in vertex data . +*/ +ODE_API void dGeomTriMeshDataBuildDouble(dTriMeshDataID g, + const void* Vertices, int VertexStride, int VertexCount, + const void* Indices, int IndexCount, int TriStride); +/* same again with a normals array (used as trimesh-trimesh optimization) */ +ODE_API void dGeomTriMeshDataBuildDouble1(dTriMeshDataID g, + const void* Vertices, int VertexStride, int VertexCount, + const void* Indices, int IndexCount, int TriStride, + const void* Normals); + +/* + * Simple build. Single/double precision based on dSINGLE/dDOUBLE! + */ +ODE_API void dGeomTriMeshDataBuildSimple(dTriMeshDataID g, + const dReal* Vertices, int VertexCount, + const int* Indices, int IndexCount); +/* same again with a normals array (used as trimesh-trimesh optimization) */ +ODE_API void dGeomTriMeshDataBuildSimple1(dTriMeshDataID g, + const dReal* Vertices, int VertexCount, + const int* Indices, int IndexCount, + const int* Normals); + +/* Preprocess the trimesh data to remove mark unnecessary edges and vertices */ +ODE_API void dGeomTriMeshDataPreprocess(dTriMeshDataID g); +/* Get and set the internal preprocessed trimesh data buffer, for loading and saving */ +ODE_API void dGeomTriMeshDataGetBuffer(dTriMeshDataID g, unsigned char** buf, int* bufLen); +ODE_API void dGeomTriMeshDataSetBuffer(dTriMeshDataID g, unsigned char* buf); + + +/* + * Per triangle callback. Allows the user to say if he wants a collision with + * a particular triangle. + */ +typedef int dTriCallback(dGeomID TriMesh, dGeomID RefObject, int TriangleIndex); +ODE_API void dGeomTriMeshSetCallback(dGeomID g, dTriCallback* Callback); +ODE_API dTriCallback* dGeomTriMeshGetCallback(dGeomID g); + +/* + * Per object callback. Allows the user to get the list of triangles in 1 + * shot. Maybe we should remove this one. + */ +typedef void dTriArrayCallback(dGeomID TriMesh, dGeomID RefObject, const int* TriIndices, int TriCount); +ODE_API void dGeomTriMeshSetArrayCallback(dGeomID g, dTriArrayCallback* ArrayCallback); +ODE_API dTriArrayCallback* dGeomTriMeshGetArrayCallback(dGeomID g); + +/* + * Ray callback. + * Allows the user to say if a ray collides with a triangle on barycentric + * coords. The user can for example sample a texture with alpha transparency + * to determine if a collision should occur. + */ +typedef int dTriRayCallback(dGeomID TriMesh, dGeomID Ray, int TriangleIndex, dReal u, dReal v); +ODE_API void dGeomTriMeshSetRayCallback(dGeomID g, dTriRayCallback* Callback); +ODE_API dTriRayCallback* dGeomTriMeshGetRayCallback(dGeomID g); + +/* + * Trimesh class + * Construction. Callbacks are optional. + */ +ODE_API dGeomID dCreateTriMesh(dSpaceID space, dTriMeshDataID Data, dTriCallback* Callback, dTriArrayCallback* ArrayCallback, dTriRayCallback* RayCallback); + +ODE_API void dGeomTriMeshSetData(dGeomID g, dTriMeshDataID Data); +ODE_API dTriMeshDataID dGeomTriMeshGetData(dGeomID g); + + +// enable/disable/check temporal coherence +ODE_API void dGeomTriMeshEnableTC(dGeomID g, int geomClass, int enable); +ODE_API int dGeomTriMeshIsTCEnabled(dGeomID g, int geomClass); + +/* + * Clears the internal temporal coherence caches. When a geom has its + * collision checked with a trimesh once, data is stored inside the trimesh. + * With large worlds with lots of seperate objects this list could get huge. + * We should be able to do this automagically. + */ +ODE_API void dGeomTriMeshClearTCCache(dGeomID g); + + +/* + * returns the TriMeshDataID + */ +ODE_API dTriMeshDataID dGeomTriMeshGetTriMeshDataID(dGeomID g); + +/* + * Gets a triangle. + */ +ODE_API void dGeomTriMeshGetTriangle(dGeomID g, int Index, dVector3* v0, dVector3* v1, dVector3* v2); + +/* + * Gets the point on the requested triangle and the given barycentric + * coordinates. + */ +ODE_API void dGeomTriMeshGetPoint(dGeomID g, int Index, dReal u, dReal v, dVector3 Out); + +/* + +This is how the strided data works: + +struct StridedVertex{ + dVector3 Vertex; + // Userdata +}; +int VertexStride = sizeof(StridedVertex); + +struct StridedTri{ + int Indices[3]; + // Userdata +}; +int TriStride = sizeof(StridedTri); + +*/ + + +ODE_API int dGeomTriMeshGetTriangleCount (dGeomID g); + +ODE_API void dGeomTriMeshDataUpdate(dTriMeshDataID g); + +#ifdef __cplusplus +} +#endif + +#endif /* _ODE_COLLISION_TRIMESH_H_ */ + diff --git a/misc/builddeps/emscripten/ode/include/ode/common.h b/misc/builddeps/emscripten/ode/include/ode/common.h new file mode 100644 index 00000000..92770d1b --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/common.h @@ -0,0 +1,370 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_COMMON_H_ +#define _ODE_COMMON_H_ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* configuration stuff */ + +/* the efficient alignment. most platforms align data structures to some + * number of bytes, but this is not always the most efficient alignment. + * for example, many x86 compilers align to 4 bytes, but on a pentium it + * is important to align doubles to 8 byte boundaries (for speed), and + * the 4 floats in a SIMD register to 16 byte boundaries. many other + * platforms have similar behavior. setting a larger alignment can waste + * a (very) small amount of memory. NOTE: this number must be a power of + * two. this is set to 16 by default. + */ +#define EFFICIENT_ALIGNMENT 16 + + +/* constants */ + +/* pi and 1/sqrt(2) are defined here if necessary because they don't get + * defined in on some platforms (like MS-Windows) + */ + +#ifndef M_PI +#define M_PI REAL(3.1415926535897932384626433832795029) +#endif +#ifndef M_SQRT1_2 +#define M_SQRT1_2 REAL(0.7071067811865475244008443621048490) +#endif + + +/* debugging: + * IASSERT is an internal assertion, i.e. a consistency check. if it fails + * we want to know where. + * UASSERT is a user assertion, i.e. if it fails a nice error message + * should be printed for the user. + * AASSERT is an arguments assertion, i.e. if it fails "bad argument(s)" + * is printed. + * DEBUGMSG just prints out a message + */ + +#ifndef dNODEBUG +#ifdef __GNUC__ +#define dIASSERT(a) if (!(a)) dDebug (d_ERR_IASSERT, \ + "assertion \"" #a "\" failed in %s() [%s]",__FUNCTION__,__FILE__); +#define dUASSERT(a,msg) if (!(a)) dDebug (d_ERR_UASSERT, \ + msg " in %s()", __FUNCTION__); +#define dDEBUGMSG(msg) dMessage (d_ERR_UASSERT, \ +msg " in %s() File %s Line %d", __FUNCTION__, __FILE__,__LINE__); +#else +#define dIASSERT(a) if (!(a)) dDebug (d_ERR_IASSERT, \ + "assertion \"" #a "\" failed in %s:%d",__FILE__,__LINE__); +#define dUASSERT(a,msg) if (!(a)) dDebug (d_ERR_UASSERT, \ + msg " (%s:%d)", __FILE__,__LINE__); +#define dDEBUGMSG(msg) dMessage (d_ERR_UASSERT, \ + msg " (%s:%d)", __FILE__,__LINE__); +#endif +#else +#define dIASSERT(a) ; +#define dUASSERT(a,msg) ; +#define dDEBUGMSG(msg) ; +#endif +#define dAASSERT(a) dUASSERT(a,"Bad argument(s)") + +/* floating point data type, vector, matrix and quaternion types */ + +#if defined(dSINGLE) +typedef float dReal; +#elif defined(dDOUBLE) +typedef double dReal; +#else +#error You must #define dSINGLE or dDOUBLE +#endif + + +/* round an integer up to a multiple of 4, except that 0 and 1 are unmodified + * (used to compute matrix leading dimensions) + */ +#define dPAD(a) (((a) > 1) ? ((((a)-1)|3)+1) : (a)) + +/* these types are mainly just used in headers */ +typedef dReal dVector3[4]; +typedef dReal dVector4[4]; +typedef dReal dMatrix3[4*3]; +typedef dReal dMatrix4[4*4]; +typedef dReal dMatrix6[8*6]; +typedef dReal dQuaternion[4]; + + +/* precision dependent scalar math functions */ + +#if defined(dSINGLE) + +#define REAL(x) (x ## f) /* form a constant */ +#define dRecip(x) ((1.0f/(x))) /* reciprocal */ +#define dSqrt(x) (sqrtf(x)) /* square root */ +#define dRecipSqrt(x) ((1.0f/sqrtf(x))) /* reciprocal square root */ +#define dSin(x) (sinf(x)) /* sine */ +#define dCos(x) (cosf(x)) /* cosine */ +#define dFabs(x) (fabsf(x)) /* absolute value */ +#define dAtan2(y,x) (atan2f(y,x)) /* arc tangent with 2 args */ +#define dFMod(a,b) (fmodf(a,b)) /* modulo */ + +#ifdef HAVE___ISNANF +#define dIsNan(x) (__isnanf(x)) +#elif defined(HAVE__ISNANF) +#define dIsNan(x) (_isnanf(x)) +#elif defined(HAVE_ISNANF) +#define dIsNan(x) (isnanf(x)) +#else + /* + fall back to _isnan which is the VC way, + this may seem redundant since we already checked + for _isnan before, but if isnan is detected by + configure but is not found during compilation + we should always make sure we check for __isnanf, + _isnanf and isnanf in that order before falling + back to a default + */ +#define dIsNan(x) (_isnan(x)) +#endif + +#define dCopySign(a,b) ((dReal)copysignf(a,b)) + +#elif defined(dDOUBLE) + +#define REAL(x) (x) +#define dRecip(x) (1.0/(x)) +#define dSqrt(x) sqrt(x) +#define dRecipSqrt(x) (1.0/sqrt(x)) +#define dSin(x) sin(x) +#define dCos(x) cos(x) +#define dFabs(x) fabs(x) +#define dAtan2(y,x) atan2((y),(x)) +#define dFMod(a,b) (fmod((a),(b))) +#ifdef HAVE___ISNAN +#define dIsNan(x) (__isnan(x)) +#elif defined(HAVE__ISNAN) +#define dIsNan(x) (_isnan(x)) +#elif defined(HAVE_ISNAN) +#define dIsNan(x) (isnan(x)) +#else +#define dIsNan(x) (_isnan(x)) +#endif + +#define dCopySign(a,b) (copysign((a),(b))) + +#else +#error You must #define dSINGLE or dDOUBLE +#endif + + +/* utility */ + + +/* round something up to be a multiple of the EFFICIENT_ALIGNMENT */ + +#define dEFFICIENT_SIZE(x) ((((x)-1)|(EFFICIENT_ALIGNMENT-1))+1) + + +/* alloca aligned to the EFFICIENT_ALIGNMENT. note that this can waste + * up to 15 bytes per allocation, depending on what alloca() returns. + */ + +#define dALLOCA16(n) \ + ((char*)dEFFICIENT_SIZE(((size_t)(alloca((n)+(EFFICIENT_ALIGNMENT-1)))))) + + +// Use the error-checking memory allocation system. Because this system uses heap +// (malloc) instead of stack (alloca), it is slower. However, it allows you to +// simulate larger scenes, as well as handle out-of-memory errors in a somewhat +// graceful manner + +// #define dUSE_MALLOC_FOR_ALLOCA + +#ifdef dUSE_MALLOC_FOR_ALLOCA +enum { + d_MEMORY_OK = 0, /* no memory errors */ + d_MEMORY_OUT_OF_MEMORY /* malloc failed due to out of memory error */ +}; + +#endif + + + +/* internal object types (all prefixed with `dx') */ + +struct dxWorld; /* dynamics world */ +struct dxSpace; /* collision space */ +struct dxBody; /* rigid body (dynamics object) */ +struct dxGeom; /* geometry (collision object) */ +struct dxJoint; +struct dxJointNode; +struct dxJointGroup; + +typedef struct dxWorld *dWorldID; +typedef struct dxSpace *dSpaceID; +typedef struct dxBody *dBodyID; +typedef struct dxGeom *dGeomID; +typedef struct dxJoint *dJointID; +typedef struct dxJointGroup *dJointGroupID; + + +/* error numbers */ + +enum { + d_ERR_UNKNOWN = 0, /* unknown error */ + d_ERR_IASSERT, /* internal assertion failed */ + d_ERR_UASSERT, /* user assertion failed */ + d_ERR_LCP /* user assertion failed */ +}; + + +/* joint type numbers */ + +enum { + dJointTypeNone = 0, /* or "unknown" */ + dJointTypeBall, + dJointTypeHinge, + dJointTypeSlider, + dJointTypeContact, + dJointTypeUniversal, + dJointTypeHinge2, + dJointTypeFixed, + dJointTypeNull, + dJointTypeAMotor, + dJointTypeLMotor, + dJointTypePlane2D +}; + + +/* an alternative way of setting joint parameters, using joint parameter + * structures and member constants. we don't actually do this yet. + */ + +/* +typedef struct dLimot { + int mode; + dReal lostop, histop; + dReal vel, fmax; + dReal fudge_factor; + dReal bounce, soft; + dReal suspension_erp, suspension_cfm; +} dLimot; + +enum { + dLimotLoStop = 0x0001, + dLimotHiStop = 0x0002, + dLimotVel = 0x0004, + dLimotFMax = 0x0008, + dLimotFudgeFactor = 0x0010, + dLimotBounce = 0x0020, + dLimotSoft = 0x0040 +}; +*/ + + +/* standard joint parameter names. why are these here? - because we don't want + * to include all the joint function definitions in joint.cpp. hmmmm. + * MSVC complains if we call D_ALL_PARAM_NAMES_X with a blank second argument, + * which is why we have the D_ALL_PARAM_NAMES macro as well. please copy and + * paste between these two. + */ + +#define D_ALL_PARAM_NAMES(start) \ + /* parameters for limits and motors */ \ + dParamLoStop = start, \ + dParamHiStop, \ + dParamVel, \ + dParamFMax, \ + dParamFudgeFactor, \ + dParamBounce, \ + dParamCFM, \ + dParamStopERP, \ + dParamStopCFM, \ + /* parameters for suspension */ \ + dParamSuspensionERP, \ + dParamSuspensionCFM, + +#define D_ALL_PARAM_NAMES_X(start,x) \ + /* parameters for limits and motors */ \ + dParamLoStop ## x = start, \ + dParamHiStop ## x, \ + dParamVel ## x, \ + dParamFMax ## x, \ + dParamFudgeFactor ## x, \ + dParamBounce ## x, \ + dParamCFM ## x, \ + dParamStopERP ## x, \ + dParamStopCFM ## x, \ + /* parameters for suspension */ \ + dParamSuspensionERP ## x, \ + dParamSuspensionCFM ## x, + +enum { + D_ALL_PARAM_NAMES(0) + D_ALL_PARAM_NAMES_X(0x100,2) + D_ALL_PARAM_NAMES_X(0x200,3) + + /* add a multiple of this constant to the basic parameter numbers to get + * the parameters for the second, third etc axes. + */ + dParamGroup=0x100 +}; + + +/* angular motor mode numbers */ + +enum{ + dAMotorUser = 0, + dAMotorEuler = 1 +}; + + +/* joint force feedback information */ + +typedef struct dJointFeedback { + dVector3 f1; /* force applied to body 1 */ + dVector3 t1; /* torque applied to body 1 */ + dVector3 f2; /* force applied to body 2 */ + dVector3 t2; /* torque applied to body 2 */ +} dJointFeedback; + + +/* private functions that must be implemented by the collision library: + * (1) indicate that a geom has moved, (2) get the next geom in a body list. + * these functions are called whenever the position of geoms connected to a + * body have changed, e.g. with dBodySetPosition(), dBodySetRotation(), or + * when the ODE step function updates the body state. + */ + +void dGeomMoved (dGeomID); +dGeomID dGeomGetBodyNext (dGeomID); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/compatibility.h b/misc/builddeps/emscripten/ode/include/ode/compatibility.h new file mode 100644 index 00000000..b3709866 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/compatibility.h @@ -0,0 +1,40 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_COMPATIBILITY_H_ +#define _ODE_COMPATIBILITY_H_ + +/* + * ODE's backward compatibility system ensures that as ODE's API + * evolves, user code will not break. + */ + +/* + * These new rotation function names are more consistent with the + * rest of the API. + */ +#define dQtoR(q,R) dRfromQ((R),(q)) +#define dRtoQ(R,q) dQfromR((q),(R)) +#define dWtoDQ(w,q,dq) dDQfromW((dq),(w),(q)) + + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/config.h b/misc/builddeps/emscripten/ode/include/ode/config.h new file mode 100644 index 00000000..d2950a62 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/config.h @@ -0,0 +1,149 @@ +/* This file was autogenerated by Premake */ +#ifndef _ODE_CONFIG_H_ +#define _ODE_CONFIG_H_ + + +/****************************************************************** + * CONFIGURATON SETTINGS - you can change these, and then rebuild + * ODE to modify the behavior of the library. + * + * dSINGLE/dDOUBLE - force ODE to use single-precision (float) + * or double-precision (double) for numbers + * + * dTRIMESH_ENABLED - enable/disable trimesh support + * + ******************************************************************/ + +#define dSINGLE 1 + +#define dTRIMESH_ENABLED 1 + + + +/****************************************************************** + * SYSTEM SETTINGS - you shouldn't need to change these. If you + * run into an issue with these settings, please report it to + * the ODE bug tracker at: + * http://sf.net/tracker/?group_id=24884&atid=382799 + ******************************************************************/ + +/* Try to identify the platform */ +#if defined(_MSC_VER) || defined(__CYGWIN32__) || defined(__MINGW32__) + #define ODE_PLATFORM_WINDOWS +#elif defined(__linux__) + #define ODE_PLATFORM_LINUX +#elif defined(__APPLE__) && defined(__MACH__) + #define ODE_PLATFORM_OSX +#else + #error "Need some help identifying the platform!" +#endif + +/* Additional platform defines used in the code */ +#if defined(ODE_PLATFORM_WINDOWS) && !defined(WIN32) + #define WIN32 +#endif + +#if defined(__CYGWIN32__) || defined(__MINGW32__) + #define CYGWIN +#endif + +#if defined(ODE_PLATFORM_OSX) + #define macintosh +#endif + + +/* Define a DLL export symbol for those platforms that need it */ +#if defined(ODE_PLATFORM_WINDOWS) + #if defined(ODE_DLL) + #define ODE_API __declspec(dllexport) + #elif !defined(ODE_LIB) + #define ODE_DLL_API __declspec(dllimport) + #endif +#endif + +#if !defined(ODE_API) + #define ODE_API +#endif + + +/* Pull in the standard headers */ +#include +#include +#include +#include +#include +#include +#include + +#if !defined(ODE_PLATFORM_WINDOWS) + #include +#endif + + +/* Visual C does not define these functions */ +#if defined(_MSC_VER) + #define copysignf _copysign + #define copysign _copysign +#endif + + +/* Define a value for infinity */ +#if defined(HUGE_VALF) + #define ODE_INFINITY4 HUGE_VALF + #define ODE_INFINITY8 HUGE_VAL +#elif defined(FLT_MAX) + #define ODE_INFINITY4 FLT_MAX + #define ODE_INFINITY8 DBL_MAX +#else + static union { unsigned char __c[4]; float __f; } __ode_huge_valf = {{0,0,0x80,0x7f}}; + static union { unsigned char __c[8]; double __d; } __ode_huge_val = {{0,0,0,0,0,0,0xf0,0x7f}}; + #define ODE_INFINITY4 (__ode_huge_valf.__f) + #define ODE_INFINITY8 (__ode_huge_val.__d) +#endif + +#if dSINGLE + #define dInfinity ODE_INFINITY4 + #define dEpsilon FLT_EPSILON +#else + #define dInfinity ODE_INFINITY8 + #define dEpsilon DBL_EPSILON +#endif + + +/* Well-defined common data types...need to define for 64 bit systems */ +#if defined(_M_IA64) || defined(__ia64__) || defined(_M_AMD64) || defined(__x86_64__) + #define X86_64_SYSTEM 1 + typedef int int32; + typedef unsigned int uint32; + typedef short int16; + typedef unsigned short uint16; + typedef char int8; + typedef unsigned char uint8; +#else + typedef int int32; + typedef unsigned int uint32; + typedef short int16; + typedef unsigned short uint16; + typedef char int8; + typedef unsigned char uint8; +#endif + +/* An integer type that can be safely cast to a pointer. This definition + * should be safe even on 64-bit systems */ +typedef size_t intP; + + +/* The efficient alignment. most platforms align data structures to some + * number of bytes, but this is not always the most efficient alignment. + * for example, many x86 compilers align to 4 bytes, but on a pentium it is + * important to align doubles to 8 byte boundaries (for speed), and the 4 + * floats in a SIMD register to 16 byte boundaries. many other platforms have + * similar behavior. setting a larger alignment can waste a (very) small + * amount of memory. NOTE: this number must be a power of two. */ +#define EFFICIENT_ALIGNMENT 16 + + +/* Define this if your system supports anonymous memory maps (linux does) */ +#define MMAP_ANONYMOUS + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/config.h.in b/misc/builddeps/emscripten/ode/include/ode/config.h.in new file mode 100644 index 00000000..921b4111 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/config.h.in @@ -0,0 +1,377 @@ +/* include/ode/config.h.in. Generated from configure.in by autoheader. */ + + +#ifndef ODE_CONFIG_H +#define ODE_CONFIG_H + + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define to 1 if you have `alloca', as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Use the Apple OpenGL framework. */ +#undef HAVE_APPLE_OPENGL_FRAMEWORK + +/* Define to 1 if you have the `atan2f' function. */ +#undef HAVE_ATAN2F + +/* Define to 1 if you have the `copysign' function. */ +#undef HAVE_COPYSIGN + +/* Define to 1 if you have the `copysignf' function. */ +#undef HAVE_COPYSIGNF + +/* Define to 1 if you have the `cosf' function. */ +#undef HAVE_COSF + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +#undef HAVE_DOPRNT + +/* Define to 1 if you have the `fabsf' function. */ +#undef HAVE_FABSF + +/* Define to 1 if you have the header file. */ +#undef HAVE_FLOAT_H + +/* Define to 1 if you have the `floor' function. */ +#undef HAVE_FLOOR + +/* Define to 1 if you have the `fmodf' function. */ +#undef HAVE_FMODF + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GLEXT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GLU_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_IEEEFP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `isnan' function. */ +#undef HAVE_ISNAN + +/* Define to 1 if you have the `isnanf' function. */ +#undef HAVE_ISNANF + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MATH_H + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if libc includes obstacks. */ +#undef HAVE_OBSTACK + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#undef HAVE_REALLOC + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the `sinf' function. */ +#undef HAVE_SINF + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* Define to 1 if you have the `sqrt' function. */ +#undef HAVE_SQRT + +/* Define to 1 if you have the `sqrtf' function. */ +#undef HAVE_SQRTF + +/* Use SSE Optimizations */ +#undef HAVE_SSE + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_VALUES_H + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF + +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to 1 if you have the `_isnan' function. */ +#undef HAVE__ISNAN + +/* Define to 1 if you have the `_isnanf' function. */ +#undef HAVE__ISNANF + +/* Define to 1 if you have the `__isnan' function. */ +#undef HAVE___ISNAN + +/* Define to 1 if you have the `__isnanf' function. */ +#undef HAVE___ISNANF + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* is this a pentium on a gcc-based platform? */ +#undef PENTIUM + +/* Define to the type of arg 1 for `select'. */ +#undef SELECT_TYPE_ARG1 + +/* Define to the type of args 2, 3 and 4 for `select'. */ +#undef SELECT_TYPE_ARG234 + +/* Define to the type of arg 5 for `select'. */ +#undef SELECT_TYPE_ARG5 + +/* The size of a `char', as computed by sizeof. */ +#undef SIZEOF_CHAR + +/* The size of a `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of a `long int', as computed by sizeof. */ +#undef SIZEOF_LONG_INT + +/* The size of a `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of a `void*', as computed by sizeof. */ +#undef SIZEOF_VOIDP + +/* The extension for shared libraries. */ +#undef SO_EXT + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + +/* is this a X86_64 system on a gcc-based platform? */ +#undef X86_64_SYSTEM + +/* Define to 1 if the X Window System is missing or not being used. */ +#undef X_DISPLAY_MISSING + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Use double precision */ +#undef dDOUBLE + +/* dEpsilon Constant */ +#undef dEpsilon + +/* Use gyroscopic terms */ +#undef dGYROSCOPIC + +/* dInfinity Constant */ +#undef dInfinity + +/* Disable debug output */ +#undef dNODEBUG + +/* Use single precision */ +#undef dSINGLE + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to rpl_realloc if the replacement function should be used. */ +#undef realloc + +/* Define to `unsigned' if does not define. */ +#undef size_t + +/* Define to empty if the keyword `volatile' does not work. Warning: valid + code using `volatile' can become incorrect without. Disable with care. */ +#undef volatile + + + +#ifdef HAVE_ALLOCA_H +#include +#endif +#if defined(HAVE_IEEEFP_H) && !defined(__CYGWIN__) +// This header creates conflicts with math.h in Cygwin. +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_MATH_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_STDARG_H +#include +#endif +#ifdef HAVE_MALLOC_H +#include +#endif +#ifdef HAVE_VALUES_H +#include +#endif +#ifdef HAVE_FLOAT_H +#include +#endif +#if SIZEOF_CHAR == 1 +typedef char int8; +typedef unsigned char uint8; +#else +#error "expecting sizeof(char) == 1" +#endif +#if SIZEOF_SHORT == 2 +typedef short int16; +typedef unsigned short uint16;; +#else +#error "can not find 2 byte integer type" +#endif +/* integer types (we assume int >= 32 bits) */ +#if SIZEOF_INT == 4 +typedef short int32; +typedef unsigned short uint32; +#else +#error "can not find 4 byte integer type" +#endif +/* an integer type that we can safely cast a pointer to and + * from without loss of bits. + */ +#if SIZEOF_SHORT == SIZEOF_VOIDP +typedef unsigned short intP; +#elif SIZEOF_INT == SIZEOF_VOIDP +typedef unsigned int intP; +#elif SIZEOF_LONG_INT == SIZEOF_VOIDP +typedef unsigned long int intP; +#endif + +/* +Handle Windows DLL odities +Its easier to export all symbols using the -shared flag +for MinGW than differentiating with declspec, +so only do it for MSVC +*/ +#if defined(ODE_DLL) && defined(WIN32) && defined(_MSC_VER) +#define ODE_API __declspec( dllexport ) +#elif !defined(ODE_DLL) && defined(WIN32) && defined(MSC_VER) +#define ODE_API __declspec( dllimport ) +#else +#define ODE_API +#endif + +#endif /* #define ODE_CONFIG_H */ + diff --git a/misc/builddeps/emscripten/ode/include/ode/contact.h b/misc/builddeps/emscripten/ode/include/ode/contact.h new file mode 100644 index 00000000..fc634e7e --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/contact.h @@ -0,0 +1,103 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_CONTACT_H_ +#define _ODE_CONTACT_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +enum { + dContactMu2 = 0x001, + dContactFDir1 = 0x002, + dContactBounce = 0x004, + dContactSoftERP = 0x008, + dContactSoftCFM = 0x010, + dContactMotion1 = 0x020, + dContactMotion2 = 0x040, + dContactSlip1 = 0x080, + dContactSlip2 = 0x100, + + dContactApprox0 = 0x0000, + dContactApprox1_1 = 0x1000, + dContactApprox1_2 = 0x2000, + dContactApprox1 = 0x3000 +}; + + +typedef struct dSurfaceParameters { + /* must always be defined */ + int mode; + dReal mu; + + /* only defined if the corresponding flag is set in mode */ + dReal mu2; + dReal bounce; + dReal bounce_vel; + dReal soft_erp; + dReal soft_cfm; + dReal motion1,motion2; + dReal slip1,slip2; +} dSurfaceParameters; + + +/** + * @brief Describe the contact point between two geoms. + * + * If two bodies touch, or if a body touches a static feature in its + * environment, the contact is represented by one or more "contact + * points", described by dContactGeom. + * + * The convention is that if body 1 is moved along the normal vector by + * a distance depth (or equivalently if body 2 is moved the same distance + * in the opposite direction) then the contact depth will be reduced to + * zero. This means that the normal vector points "in" to body 1. + * + * @ingroup collide + */ +typedef struct dContactGeom { + dVector3 pos; ///< contact position + dVector3 normal; ///< normal vector + dReal depth; ///< penetration depth + dGeomID g1,g2; ///< the colliding geoms + int side1,side2; ///< (to be documented) +} dContactGeom; + + +/* contact info used by contact joint */ + +typedef struct dContact { + dSurfaceParameters surface; + dContactGeom geom; + dVector3 fdir1; +} dContact; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/error.h b/misc/builddeps/emscripten/ode/include/ode/error.h new file mode 100644 index 00000000..bdeec377 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/error.h @@ -0,0 +1,63 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/* this comes from the `reuse' library. copy any changes back to the source */ + +#ifndef _ODE_ERROR_H_ +#define _ODE_ERROR_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* all user defined error functions have this type. error and debug functions + * should not return. + */ +typedef void dMessageFunction (int errnum, const char *msg, va_list ap); + +/* set a new error, debug or warning handler. if fn is 0, the default handlers + * are used. + */ +ODE_API void dSetErrorHandler (dMessageFunction *fn); +ODE_API void dSetDebugHandler (dMessageFunction *fn); +ODE_API void dSetMessageHandler (dMessageFunction *fn); + +/* return the current error, debug or warning handler. if the return value is + * 0, the default handlers are in place. + */ +ODE_API dMessageFunction *dGetErrorHandler(void); +ODE_API dMessageFunction *dGetDebugHandler(void); +ODE_API dMessageFunction *dGetMessageHandler(void); + +/* generate a fatal error, debug trap or a message. */ +ODE_API void dError (int num, const char *msg, ...); +ODE_API void dDebug (int num, const char *msg, ...); +ODE_API void dMessage (int num, const char *msg, ...); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/export-dif.h b/misc/builddeps/emscripten/ode/include/ode/export-dif.h new file mode 100644 index 00000000..ca479adc --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/export-dif.h @@ -0,0 +1,32 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_EXPORT_DIF_ +#define _ODE_EXPORT_DIF_ + +#include + + +ODE_API void dWorldExportDIF (dWorldID w, FILE *file, const char *world_name); + + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/mass.h b/misc/builddeps/emscripten/ode/include/ode/mass.h new file mode 100644 index 00000000..58a42fcd --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/mass.h @@ -0,0 +1,121 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_MASS_H_ +#define _ODE_MASS_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dMass; +typedef struct dMass dMass; + +/** + * Check if a mass structure has valid value. + * The function check if the mass and innertia matrix are positive definits + * + * @param m A mass structure to check + * + * @return 1 if both codition are met + */ +ODE_API int dMassCheck(const dMass *m); + +ODE_API void dMassSetZero (dMass *); + +ODE_API void dMassSetParameters (dMass *, dReal themass, + dReal cgx, dReal cgy, dReal cgz, + dReal I11, dReal I22, dReal I33, + dReal I12, dReal I13, dReal I23); + +ODE_API void dMassSetSphere (dMass *, dReal density, dReal radius); +ODE_API void dMassSetSphereTotal (dMass *, dReal total_mass, dReal radius); + +ODE_API void dMassSetCapsule (dMass *, dReal density, int direction, + dReal radius, dReal length); +ODE_API void dMassSetCapsuleTotal (dMass *, dReal total_mass, int direction, + dReal radius, dReal length); + +ODE_API void dMassSetCylinder (dMass *, dReal density, int direction, + dReal radius, dReal length); +ODE_API void dMassSetCylinderTotal (dMass *, dReal total_mass, int direction, + dReal radius, dReal length); + +ODE_API void dMassSetBox (dMass *, dReal density, + dReal lx, dReal ly, dReal lz); +ODE_API void dMassSetBoxTotal (dMass *, dReal total_mass, + dReal lx, dReal ly, dReal lz); + +ODE_API void dMassAdjust (dMass *, dReal newmass); + +ODE_API void dMassTranslate (dMass *, dReal x, dReal y, dReal z); + +ODE_API void dMassRotate (dMass *, const dMatrix3 R); + +ODE_API void dMassAdd (dMass *a, const dMass *b); + +// Backwards compatible API +#define dMassSetCappedCylinder dMassSetCapsule +#define dMassSetCappedCylinderTotal dMassSetCapsuleTotal + + +struct dMass { + dReal mass; + dVector4 c; + dMatrix3 I; + +#ifdef __cplusplus + dMass() + { dMassSetZero (this); } + void setZero() + { dMassSetZero (this); } + void setParameters (dReal themass, dReal cgx, dReal cgy, dReal cgz, + dReal I11, dReal I22, dReal I33, + dReal I12, dReal I13, dReal I23) + { dMassSetParameters (this,themass,cgx,cgy,cgz,I11,I22,I33,I12,I13,I23); } + void setSphere (dReal density, dReal radius) + { dMassSetSphere (this,density,radius); } + void setCapsule (dReal density, int direction, dReal a, dReal b) + { dMassSetCappedCylinder (this,density,direction,a,b); } + void setCappedCylinder (dReal density, int direction, dReal a, dReal b) + { setCapsule(density, direction, a, b); } + void setBox (dReal density, dReal lx, dReal ly, dReal lz) + { dMassSetBox (this,density,lx,ly,lz); } + void adjust (dReal newmass) + { dMassAdjust (this,newmass); } + void translate (dReal x, dReal y, dReal z) + { dMassTranslate (this,x,y,z); } + void rotate (const dMatrix3 R) + { dMassRotate (this,R); } + void add (const dMass *b) + { dMassAdd (this,b); } +#endif +}; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/matrix.h b/misc/builddeps/emscripten/ode/include/ode/matrix.h new file mode 100644 index 00000000..eeb004d8 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/matrix.h @@ -0,0 +1,194 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/* optimized and unoptimized vector and matrix functions */ + +#ifndef _ODE_MATRIX_H_ +#define _ODE_MATRIX_H_ + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* set a vector/matrix of size n to all zeros, or to a specific value. */ + +ODE_API void dSetZero (dReal *a, int n); +ODE_API void dSetValue (dReal *a, int n, dReal value); + + +/* get the dot product of two n*1 vectors. if n <= 0 then + * zero will be returned (in which case a and b need not be valid). + */ + +ODE_API dReal dDot (const dReal *a, const dReal *b, int n); + + +/* get the dot products of (a0,b), (a1,b), etc and return them in outsum. + * all vectors are n*1. if n <= 0 then zeroes will be returned (in which case + * the input vectors need not be valid). this function is somewhat faster + * than calling dDot() for all of the combinations separately. + */ + +/* NOT INCLUDED in the library for now. +void dMultidot2 (const dReal *a0, const dReal *a1, + const dReal *b, dReal *outsum, int n); +*/ + + +/* matrix multiplication. all matrices are stored in standard row format. + * the digit refers to the argument that is transposed: + * 0: A = B * C (sizes: A:p*r B:p*q C:q*r) + * 1: A = B' * C (sizes: A:p*r B:q*p C:q*r) + * 2: A = B * C' (sizes: A:p*r B:p*q C:r*q) + * case 1,2 are equivalent to saying that the operation is A=B*C but + * B or C are stored in standard column format. + */ + +ODE_API void dMultiply0 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r); +ODE_API void dMultiply1 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r); +ODE_API void dMultiply2 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r); + + +/* do an in-place cholesky decomposition on the lower triangle of the n*n + * symmetric matrix A (which is stored by rows). the resulting lower triangle + * will be such that L*L'=A. return 1 on success and 0 on failure (on failure + * the matrix is not positive definite). + */ + +ODE_API int dFactorCholesky (dReal *A, int n); + + +/* solve for x: L*L'*x = b, and put the result back into x. + * L is size n*n, b is size n*1. only the lower triangle of L is considered. + */ + +ODE_API void dSolveCholesky (const dReal *L, dReal *b, int n); + + +/* compute the inverse of the n*n positive definite matrix A and put it in + * Ainv. this is not especially fast. this returns 1 on success (A was + * positive definite) or 0 on failure (not PD). + */ + +ODE_API int dInvertPDMatrix (const dReal *A, dReal *Ainv, int n); + + +/* check whether an n*n matrix A is positive definite, return 1/0 (yes/no). + * positive definite means that x'*A*x > 0 for any x. this performs a + * cholesky decomposition of A. if the decomposition fails then the matrix + * is not positive definite. A is stored by rows. A is not altered. + */ + +ODE_API int dIsPositiveDefinite (const dReal *A, int n); + + +/* factorize a matrix A into L*D*L', where L is lower triangular with ones on + * the diagonal, and D is diagonal. + * A is an n*n matrix stored by rows, with a leading dimension of n rounded + * up to 4. L is written into the strict lower triangle of A (the ones are not + * written) and the reciprocal of the diagonal elements of D are written into + * d. + */ +ODE_API void dFactorLDLT (dReal *A, dReal *d, int n, int nskip); + + +/* solve L*x=b, where L is n*n lower triangular with ones on the diagonal, + * and x,b are n*1. b is overwritten with x. + * the leading dimension of L is `nskip'. + */ +ODE_API void dSolveL1 (const dReal *L, dReal *b, int n, int nskip); + + +/* solve L'*x=b, where L is n*n lower triangular with ones on the diagonal, + * and x,b are n*1. b is overwritten with x. + * the leading dimension of L is `nskip'. + */ +ODE_API void dSolveL1T (const dReal *L, dReal *b, int n, int nskip); + + +/* in matlab syntax: a(1:n) = a(1:n) .* d(1:n) */ + +ODE_API void dVectorScale (dReal *a, const dReal *d, int n); + + +/* given `L', a n*n lower triangular matrix with ones on the diagonal, + * and `d', a n*1 vector of the reciprocal diagonal elements of an n*n matrix + * D, solve L*D*L'*x=b where x,b are n*1. x overwrites b. + * the leading dimension of L is `nskip'. + */ + +ODE_API void dSolveLDLT (const dReal *L, const dReal *d, dReal *b, int n, int nskip); + + +/* given an L*D*L' factorization of an n*n matrix A, return the updated + * factorization L2*D2*L2' of A plus the following "top left" matrix: + * + * [ b a' ] <-- b is a[0] + * [ a 0 ] <-- a is a[1..n-1] + * + * - L has size n*n, its leading dimension is nskip. L is lower triangular + * with ones on the diagonal. only the lower triangle of L is referenced. + * - d has size n. d contains the reciprocal diagonal elements of D. + * - a has size n. + * the result is written into L, except that the left column of L and d[0] + * are not actually modified. see ldltaddTL.m for further comments. + */ +ODE_API void dLDLTAddTL (dReal *L, dReal *d, const dReal *a, int n, int nskip); + + +/* given an L*D*L' factorization of a permuted matrix A, produce a new + * factorization for row and column `r' removed. + * - A has size n1*n1, its leading dimension in nskip. A is symmetric and + * positive definite. only the lower triangle of A is referenced. + * A itself may actually be an array of row pointers. + * - L has size n2*n2, its leading dimension in nskip. L is lower triangular + * with ones on the diagonal. only the lower triangle of L is referenced. + * - d has size n2. d contains the reciprocal diagonal elements of D. + * - p is a permutation vector. it contains n2 indexes into A. each index + * must be in the range 0..n1-1. + * - r is the row/column of L to remove. + * the new L will be written within the old L, i.e. will have the same leading + * dimension. the last row and column of L, and the last element of d, are + * undefined on exit. + * + * a fast O(n^2) algorithm is used. see ldltremove.m for further comments. + */ +ODE_API void dLDLTRemove (dReal **A, const int *p, dReal *L, dReal *d, + int n1, int n2, int r, int nskip); + + +/* given an n*n matrix A (with leading dimension nskip), remove the r'th row + * and column by moving elements. the new matrix will have the same leading + * dimension. the last row and column of A are untouched on exit. + */ +ODE_API void dRemoveRowCol (dReal *A, int n, int nskip, int r); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/memory.h b/misc/builddeps/emscripten/ode/include/ode/memory.h new file mode 100644 index 00000000..c1af051a --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/memory.h @@ -0,0 +1,59 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/* this comes from the `reuse' library. copy any changes back to the source */ + +#ifndef _ODE_MEMORY_H_ +#define _ODE_MEMORY_H_ + +#include "ode/config.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* function types to allocate and free memory */ +typedef void * dAllocFunction (size_t size); +typedef void * dReallocFunction (void *ptr, size_t oldsize, size_t newsize); +typedef void dFreeFunction (void *ptr, size_t size); + +/* set new memory management functions. if fn is 0, the default handlers are + * used. */ +ODE_API void dSetAllocHandler (dAllocFunction *fn); +ODE_API void dSetReallocHandler (dReallocFunction *fn); +ODE_API void dSetFreeHandler (dFreeFunction *fn); + +/* get current memory management functions */ +ODE_API dAllocFunction *dGetAllocHandler (void); +ODE_API dReallocFunction *dGetReallocHandler (void); +ODE_API dFreeFunction *dGetFreeHandler (void); + +/* allocate and free memory. */ +ODE_API void * dAlloc (size_t size); +ODE_API void * dRealloc (void *ptr, size_t oldsize, size_t newsize); +ODE_API void dFree (void *ptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/misc.h b/misc/builddeps/emscripten/ode/include/ode/misc.h new file mode 100644 index 00000000..0c55fc5b --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/misc.h @@ -0,0 +1,85 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/* miscellaneous math functions. these are mostly useful for testing */ + +#ifndef _ODE_MISC_H_ +#define _ODE_MISC_H_ + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* return 1 if the random number generator is working. */ +ODE_API int dTestRand(void); + +/* return next 32 bit random number. this uses a not-very-random linear + * congruential method. + */ +ODE_API unsigned long dRand(void); + +/* get and set the current random number seed. */ +ODE_API unsigned long dRandGetSeed(void); +ODE_API void dRandSetSeed (unsigned long s); + +/* return a random integer between 0..n-1. the distribution will get worse + * as n approaches 2^32. + */ +ODE_API int dRandInt (int n); + +/* return a random real number between 0..1 */ +ODE_API dReal dRandReal(void); + +/* print out a matrix */ +#ifdef __cplusplus +ODE_API void dPrintMatrix (const dReal *A, int n, int m, char *fmt = "%10.4f ", + FILE *f=stdout); +#else +ODE_API void dPrintMatrix (const dReal *A, int n, int m, char *fmt, FILE *f); +#endif + +/* make a random vector with entries between +/- range. A has n elements. */ +ODE_API void dMakeRandomVector (dReal *A, int n, dReal range); + +/* make a random matrix with entries between +/- range. A has size n*m. */ +ODE_API void dMakeRandomMatrix (dReal *A, int n, int m, dReal range); + +/* clear the upper triangle of a square matrix */ +ODE_API void dClearUpperTriangle (dReal *A, int n); + +/* return the maximum element difference between the two n*m matrices */ +ODE_API dReal dMaxDifference (const dReal *A, const dReal *B, int n, int m); + +/* return the maximum element difference between the lower triangle of two + * n*n matrices */ +ODE_API dReal dMaxDifferenceLowerTriangle (const dReal *A, const dReal *B, int n); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/objects.h b/misc/builddeps/emscripten/ode/include/ode/objects.h new file mode 100644 index 00000000..2bf07a40 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/objects.h @@ -0,0 +1,1749 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_OBJECTS_H_ +#define _ODE_OBJECTS_H_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup world World + * + * The world object is a container for rigid bodies and joints. Objects in + * different worlds can not interact, for example rigid bodies from two + * different worlds can not collide. + * + * All the objects in a world exist at the same point in time, thus one + * reason to use separate worlds is to simulate systems at different rates. + * Most applications will only need one world. + */ + + +/** + * @brief Create a new, empty world and return its ID number. + * @return an identifier + * @ingroup world + */ +ODE_API dWorldID dWorldCreate(void); + + +/** + * @brief Destroy a world and everything in it. + * + * This includes all bodies, and all joints that are not part of a joint + * group. Joints that are part of a joint group will be deactivated, and + * can be destroyed by calling, for example, dJointGroupEmpty(). + * @ingroup world + * @param world the identifier for the world the be destroyed. + */ +ODE_API void dWorldDestroy (dWorldID world); + + +/** + * @brief Set the world's global gravity vector. + * + * The units are m/s^2, so Earth's gravity vector would be (0,0,-9.81), + * assuming that +z is up. The default is no gravity, i.e. (0,0,0). + * + * @ingroup world + */ +ODE_API void dWorldSetGravity (dWorldID, dReal x, dReal y, dReal z); + + +/** + * @brief Get the gravity vector for a given world. + * @ingroup world + */ +ODE_API void dWorldGetGravity (dWorldID, dVector3 gravity); + + +/** + * @brief Set the global ERP value, that controls how much error + * correction is performed in each time step. + * @ingroup world + * @param dWorldID the identifier of the world. + * @param erp Typical values are in the range 0.1--0.8. The default is 0.2. + */ +ODE_API void dWorldSetERP (dWorldID, dReal erp); + +/** + * @brief Get the error reduction parameter. + * @ingroup world + * @return ERP value + */ +ODE_API dReal dWorldGetERP (dWorldID); + + +/** + * @brief Set the global CFM (constraint force mixing) value. + * @ingroup world + * @param cfm Typical values are in the range @m{10^{-9}} -- 1. + * The default is 10^-5 if single precision is being used, or 10^-10 + * if double precision is being used. + */ +ODE_API void dWorldSetCFM (dWorldID, dReal cfm); + +/** + * @brief Get the constraint force mixing value. + * @ingroup world + * @return CFM value + */ +ODE_API dReal dWorldGetCFM (dWorldID); + + +/** + * @brief Step the world. + * + * This uses a "big matrix" method that takes time on the order of m^3 + * and memory on the order of m^2, where m is the total number of constraint + * rows. For large systems this will use a lot of memory and can be very slow, + * but this is currently the most accurate method. + * @ingroup world + * @param stepsize The number of seconds that the simulation has to advance. + */ +ODE_API void dWorldStep (dWorldID, dReal stepsize); + + +/** + * @brief Converts an impulse to a force. + * @ingroup world + * @remarks + * If you want to apply a linear or angular impulse to a rigid body, + * instead of a force or a torque, then you can use this function to convert + * the desired impulse into a force/torque vector before calling the + * BodyAdd... function. + * The current algorithm simply scales the impulse by 1/stepsize, + * where stepsize is the step size for the next step that will be taken. + * This function is given a dWorldID because, in the future, the force + * computation may depend on integrator parameters that are set as + * properties of the world. + */ +ODE_API void dWorldImpulseToForce +( + dWorldID, dReal stepsize, + dReal ix, dReal iy, dReal iz, dVector3 force +); + + +/** + * @brief Step the world. + * @ingroup world + * @remarks + * This uses an iterative method that takes time on the order of m*N + * and memory on the order of m, where m is the total number of constraint + * rows N is the number of iterations. + * For large systems this is a lot faster than dWorldStep(), + * but it is less accurate. + * @remarks + * QuickStep is great for stacks of objects especially when the + * auto-disable feature is used as well. + * However, it has poor accuracy for near-singular systems. + * Near-singular systems can occur when using high-friction contacts, motors, + * or certain articulated structures. For example, a robot with multiple legs + * sitting on the ground may be near-singular. + * @remarks + * There are ways to help overcome QuickStep's inaccuracy problems: + * \li Increase CFM. + * \li Reduce the number of contacts in your system (e.g. use the minimum + * number of contacts for the feet of a robot or creature). + * \li Don't use excessive friction in the contacts. + * \li Use contact slip if appropriate + * \li Avoid kinematic loops (however, kinematic loops are inevitable in + * legged creatures). + * \li Don't use excessive motor strength. + * \liUse force-based motors instead of velocity-based motors. + * + * Increasing the number of QuickStep iterations may help a little bit, but + * it is not going to help much if your system is really near singular. + */ +ODE_API void dWorldQuickStep (dWorldID w, dReal stepsize); + + +/** + * @brief Set the number of iterations that the QuickStep method performs per + * step. + * @ingroup world + * @remarks + * More iterations will give a more accurate solution, but will take + * longer to compute. + * @param num The default is 20 iterations. + */ +ODE_API void dWorldSetQuickStepNumIterations (dWorldID, int num); + + +/** + * @brief Get the number of iterations that the QuickStep method performs per + * step. + * @ingroup world + * @return nr of iterations + */ +ODE_API int dWorldGetQuickStepNumIterations (dWorldID); + +/** + * @brief Set the SOR over-relaxation parameter + * @ingroup world + * @param over_relaxation value to use by SOR + */ +ODE_API void dWorldSetQuickStepW (dWorldID, dReal over_relaxation); + +/** + * @brief Get the SOR over-relaxation parameter + * @ingroup world + * @returns the over-relaxation setting + */ +ODE_API dReal dWorldGetQuickStepW (dWorldID); + +/* World contact parameter functions */ + +/** + * @brief Set the maximum correcting velocity that contacts are allowed + * to generate. + * @ingroup world + * @param vel The default value is infinity (i.e. no limit). + * @remarks + * Reducing this value can help prevent "popping" of deeply embedded objects. + */ +ODE_API void dWorldSetContactMaxCorrectingVel (dWorldID, dReal vel); + +/** + * @brief Get the maximum correcting velocity that contacts are allowed + * to generated. + * @ingroup world + */ +ODE_API dReal dWorldGetContactMaxCorrectingVel (dWorldID); + +/** + * @brief Set the depth of the surface layer around all geometry objects. + * @ingroup world + * @remarks + * Contacts are allowed to sink into the surface layer up to the given + * depth before coming to rest. + * @param depth The default value is zero. + * @remarks + * Increasing this to some small value (e.g. 0.001) can help prevent + * jittering problems due to contacts being repeatedly made and broken. + */ +ODE_API void dWorldSetContactSurfaceLayer (dWorldID, dReal depth); + +/** + * @brief Get the depth of the surface layer around all geometry objects. + * @ingroup world + * @returns the depth + */ +ODE_API dReal dWorldGetContactSurfaceLayer (dWorldID); + +/* StepFast1 functions */ + +/** + * @brief Step the world using the StepFast1 algorithm. + * @param stepsize the nr of seconds to advance the simulation. + * @param maxiterations The number of iterations to perform. + * @ingroup world + */ +ODE_API void dWorldStepFast1(dWorldID, dReal stepsize, int maxiterations); + + +/** + * @defgroup disable Automatic Enabling and Disabling + * + * Every body can be enabled or disabled. Enabled bodies participate in the + * simulation, while disabled bodies are turned off and do not get updated + * during a simulation step. New bodies are always created in the enabled state. + * + * A disabled body that is connected through a joint to an enabled body will be + * automatically re-enabled at the next simulation step. + * + * Disabled bodies do not consume CPU time, therefore to speed up the simulation + * bodies should be disabled when they come to rest. This can be done automatically + * with the auto-disable feature. + * + * If a body has its auto-disable flag turned on, it will automatically disable + * itself when + * @li It has been idle for a given number of simulation steps. + * @li It has also been idle for a given amount of simulation time. + * + * A body is considered to be idle when the magnitudes of both its linear velocity + * and angular velocity are below given thresholds. + * + * Thus, every body has five auto-disable parameters: an enabled flag, a idle step + * count, an idle time, and linear/angular velocity thresholds. Newly created bodies + * get these parameters from world. + */ + +/** + * @brief Set the AutoEnableDepth parameter used by the StepFast1 algorithm. + * @ingroup disable + */ +ODE_API void dWorldSetAutoEnableDepthSF1(dWorldID, int autoEnableDepth); + +/** + * @brief Get the AutoEnableDepth parameter used by the StepFast1 algorithm. + * @ingroup disable + */ +ODE_API int dWorldGetAutoEnableDepthSF1(dWorldID); + +/** + * @brief Get auto disable linear threshold for newly created bodies. + * @ingroup disable + * @return the threshold + */ +ODE_API dReal dWorldGetAutoDisableLinearThreshold (dWorldID); + +/** + * @brief Set auto disable linear threshold for newly created bodies. + * @param linear_threshold default is 0.01 + * @ingroup disable + */ +ODE_API void dWorldSetAutoDisableLinearThreshold (dWorldID, dReal linear_threshold); + +/** + * @brief Get auto disable angular threshold for newly created bodies. + * @ingroup disable + * @return the threshold + */ +ODE_API dReal dWorldGetAutoDisableAngularThreshold (dWorldID); + +/** + * @brief Set auto disable angular threshold for newly created bodies. + * @param linear_threshold default is 0.01 + * @ingroup disable + */ +ODE_API void dWorldSetAutoDisableAngularThreshold (dWorldID, dReal angular_threshold); + +/** + * @brief Get auto disable steps for newly created bodies. + * @ingroup disable + * @return nr of steps + */ +ODE_API int dWorldGetAutoDisableSteps (dWorldID); + +/** + * @brief Set auto disable steps for newly created bodies. + * @ingroup disable + * @param steps default is 10 + */ +ODE_API void dWorldSetAutoDisableSteps (dWorldID, int steps); + +/** + * @brief Get auto disable time for newly created bodies. + * @ingroup disable + * @return nr of seconds + */ +ODE_API dReal dWorldGetAutoDisableTime (dWorldID); + +/** + * @brief Set auto disable time for newly created bodies. + * @ingroup disable + * @param time default is 0 seconds + */ +ODE_API void dWorldSetAutoDisableTime (dWorldID, dReal time); + +/** + * @brief Get auto disable flag for newly created bodies. + * @ingroup disable + * @return 0 or 1 + */ +ODE_API int dWorldGetAutoDisableFlag (dWorldID); + +/** + * @brief Set auto disable flag for newly created bodies. + * @ingroup disable + * @param do_auto_disable default is false. + */ +ODE_API void dWorldSetAutoDisableFlag (dWorldID, int do_auto_disable); + + + +/** + * @defgroup bodies Rigid Bodies + * + * A rigid body has various properties from the point of view of the + * simulation. Some properties change over time: + * + * @li Position vector (x,y,z) of the body's point of reference. + * Currently the point of reference must correspond to the body's center of mass. + * @li Linear velocity of the point of reference, a vector (vx,vy,vz). + * @li Orientation of a body, represented by a quaternion (qs,qx,qy,qz) or + * a 3x3 rotation matrix. + * @li Angular velocity vector (wx,wy,wz) which describes how the orientation + * changes over time. + * + * Other body properties are usually constant over time: + * + * @li Mass of the body. + * @li Position of the center of mass with respect to the point of reference. + * In the current implementation the center of mass and the point of + * reference must coincide. + * @li Inertia matrix. This is a 3x3 matrix that describes how the body's mass + * is distributed around the center of mass. Conceptually each body has an + * x-y-z coordinate frame embedded in it that moves and rotates with the body. + * + * The origin of this coordinate frame is the body's point of reference. Some values + * in ODE (vectors, matrices etc) are relative to the body coordinate frame, and others + * are relative to the global coordinate frame. + * + * Note that the shape of a rigid body is not a dynamical property (except insofar as + * it influences the various mass properties). It is only collision detection that cares + * about the detailed shape of the body. + */ + + +/** + * @brief Get auto disable linear threshold. + * @ingroup bodies + * @return the threshold + */ +ODE_API dReal dBodyGetAutoDisableLinearThreshold (dBodyID); + +/** + * @brief Set auto disable linear threshold. + * @ingroup bodies + * @return the threshold + */ +ODE_API void dBodySetAutoDisableLinearThreshold (dBodyID, dReal linear_threshold); + +/** + * @brief Get auto disable angular threshold. + * @ingroup bodies + * @return the threshold + */ +ODE_API dReal dBodyGetAutoDisableAngularThreshold (dBodyID); + +/** + * @brief Set auto disable angular threshold. + * @ingroup bodies + * @return the threshold + */ +ODE_API void dBodySetAutoDisableAngularThreshold (dBodyID, dReal angular_threshold); + +/** + * @brief Get auto disable steps. + * @ingroup bodies + * @return the nr of steps + */ +ODE_API int dBodyGetAutoDisableSteps (dBodyID); + +/** + * @brief Set auto disable steps. + * @ingroup bodies + * @param steps the nr of steps. + */ +ODE_API void dBodySetAutoDisableSteps (dBodyID, int steps); + +/** + * @brief Get auto disable time. + * @ingroup bodies + * @return nr of seconds + */ +ODE_API dReal dBodyGetAutoDisableTime (dBodyID); + +/** + * @brief Set auto disable time. + * @ingroup bodies + * @param time nr of seconds. + */ +ODE_API void dBodySetAutoDisableTime (dBodyID, dReal time); + +/** + * @brief Get auto disable flag. + * @ingroup bodies + * @return 0 or 1 + */ +ODE_API int dBodyGetAutoDisableFlag (dBodyID); + +/** + * @brief Set auto disable flag. + * @ingroup bodies + * @param do_auto_disable 0 or 1 + */ +ODE_API void dBodySetAutoDisableFlag (dBodyID, int do_auto_disable); + +/** + * @brief Set auto disable defaults. + * @remarks + * Set the values for the body to those set as default for the world. + * @ingroup bodies + */ +ODE_API void dBodySetAutoDisableDefaults (dBodyID); + + + +/** + * @brief Create a body in given world. + * @remarks + * Default mass parameters are at position (0,0,0). + * @ingroup bodies + */ +ODE_API dBodyID dBodyCreate (dWorldID); + +/** + * @brief Destroy a body. + * @remarks + * All joints that are attached to this body will be put into limbo: + * i.e. unattached and not affecting the simulation, but they will NOT be + * deleted. + * @ingroup bodies + */ +ODE_API void dBodyDestroy (dBodyID); + +/** + * @brief Set the body's user-data pointer. + * @ingroup bodies + * @param data arbitraty pointer + */ +ODE_API void dBodySetData (dBodyID, void *data); + +/** + * @brief Get the body's user-data pointer. + * @ingroup bodies + * @return a pointer to the user's data. + */ +ODE_API void *dBodyGetData (dBodyID); + +/** + * @brief Set position of a body. + * @remarks + * After setting, the outcome of the simulation is undefined + * if the new configuration is inconsistent with the joints/constraints + * that are present. + * @ingroup bodies + */ +ODE_API void dBodySetPosition (dBodyID, dReal x, dReal y, dReal z); + +/** + * @brief Set the orientation of a body. + * @ingroup bodies + * @remarks + * After setting, the outcome of the simulation is undefined + * if the new configuration is inconsistent with the joints/constraints + * that are present. + */ +ODE_API void dBodySetRotation (dBodyID, const dMatrix3 R); + +/** + * @brief Set the orientation of a body. + * @ingroup bodies + * @remarks + * After setting, the outcome of the simulation is undefined + * if the new configuration is inconsistent with the joints/constraints + * that are present. + */ +ODE_API void dBodySetQuaternion (dBodyID, const dQuaternion q); + +/** + * @brief Set the linear velocity of a body. + * @ingroup bodies + */ +ODE_API void dBodySetLinearVel (dBodyID, dReal x, dReal y, dReal z); + +/** + * @brief Set the angular velocity of a body. + * @ingroup bodies + */ +ODE_API void dBodySetAngularVel (dBodyID, dReal x, dReal y, dReal z); + +/** + * @brief Get the position of a body. + * @ingroup bodies + * @remarks + * When getting, the returned values are pointers to internal data structures, + * so the vectors are valid until any changes are made to the rigid body + * system structure. + * @sa dBodyCopyPosition + */ +ODE_API const dReal * dBodyGetPosition (dBodyID); + + +/** + * @brief Copy the position of a body into a vector. + * @ingroup bodies + * @param body the body to query + * @param pos a copy of the body position + * @sa dBodyGetPosition + */ +ODE_API void dBodyCopyPosition (dBodyID body, dVector3 pos); + + +/** + * @brief Get the rotation of a body. + * @ingroup bodies + * @return pointer to a 4x3 rotation matrix. + */ +ODE_API const dReal * dBodyGetRotation (dBodyID); + +/** + * @brief Get the rotation of a body. + * @ingroup bodies + * @return pointer to 4 scalars that represent the quaternion. + */ +ODE_API const dReal * dBodyGetQuaternion (dBodyID); + + +/** + * @brief Copy the orientation of a body into a quaternion. + * @ingroup bodies + * @param body the body to query + * @param quat a copy of the orientation quaternion + * @sa dBodyGetQuaternion + */ +ODE_API void dBodyCopyQuaternion(dBodyID body, dQuaternion quat); + + +/** + * @brief Get the linear velocity of a body. + * @ingroup bodies + */ +ODE_API const dReal * dBodyGetLinearVel (dBodyID); + +/** + * @brief Get the angular velocity of a body. + * @ingroup bodies + */ +ODE_API const dReal * dBodyGetAngularVel (dBodyID); + +/** + * @brief Set the mass of a body. + * @ingroup bodies + */ +ODE_API void dBodySetMass (dBodyID, const dMass *mass); + +/** + * @brief Get the mass of a body. + * @ingroup bodies + */ +ODE_API void dBodyGetMass (dBodyID, dMass *mass); + +/** + * @brief Add force at centre of mass of body in absolute coordinates. + * @ingroup bodies + */ +ODE_API void dBodyAddForce (dBodyID, dReal fx, dReal fy, dReal fz); + +/** + * @brief Add torque at centre of mass of body in absolute coordinates. + * @ingroup bodies + */ +ODE_API void dBodyAddTorque (dBodyID, dReal fx, dReal fy, dReal fz); + +/** + * @brief Add force at centre of mass of body in coordinates relative to body. + * @ingroup bodies + */ +ODE_API void dBodyAddRelForce (dBodyID, dReal fx, dReal fy, dReal fz); + +/** + * @brief Add torque at centre of mass of body in coordinates relative to body. + * @ingroup bodies + */ +ODE_API void dBodyAddRelTorque (dBodyID, dReal fx, dReal fy, dReal fz); + +/** + * @brief Add force at specified point in body in global coordinates. + * @ingroup bodies + */ +ODE_API void dBodyAddForceAtPos (dBodyID, dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz); +/** + * @brief Add force at specified point in body in local coordinates. + * @ingroup bodies + */ +ODE_API void dBodyAddForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz); +/** + * @brief Add force at specified point in body in global coordinates. + * @ingroup bodies + */ +ODE_API void dBodyAddRelForceAtPos (dBodyID, dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz); +/** + * @brief Add force at specified point in body in local coordinates. + * @ingroup bodies + */ +ODE_API void dBodyAddRelForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz); + +/** + * @brief Return the current accumulated force vector. + * @return points to an array of 3 reals. + * @remarks + * The returned values are pointers to internal data structures, so + * the vectors are only valid until any changes are made to the rigid + * body system. + * @ingroup bodies + */ +ODE_API const dReal * dBodyGetForce (dBodyID); + +/** + * @brief Return the current accumulated torque vector. + * @return points to an array of 3 reals. + * @remarks + * The returned values are pointers to internal data structures, so + * the vectors are only valid until any changes are made to the rigid + * body system. + * @ingroup bodies + */ +ODE_API const dReal * dBodyGetTorque (dBodyID); + +/** + * @brief Set the body force accumulation vector. + * @remarks + * This is mostly useful to zero the force and torque for deactivated bodies + * before they are reactivated, in the case where the force-adding functions + * were called on them while they were deactivated. + * @ingroup bodies + */ +ODE_API void dBodySetForce (dBodyID b, dReal x, dReal y, dReal z); + +/** + * @brief Set the body torque accumulation vector. + * @remarks + * This is mostly useful to zero the force and torque for deactivated bodies + * before they are reactivated, in the case where the force-adding functions + * were called on them while they were deactivated. + * @ingroup bodies + */ +ODE_API void dBodySetTorque (dBodyID b, dReal x, dReal y, dReal z); + +/** + * @brief Get world position of a relative point on body. + * @ingroup bodies + * @param result will contain the result. + */ +ODE_API void dBodyGetRelPointPos +( + dBodyID, dReal px, dReal py, dReal pz, + dVector3 result +); + +/** + * @brief Get velocity vector in global coords of a relative point on body. + * @ingroup bodies + * @param result will contain the result. + */ +ODE_API void dBodyGetRelPointVel +( + dBodyID, dReal px, dReal py, dReal pz, + dVector3 result +); + +/** + * @brief Get velocity vector in global coords of a globally + * specified point on a body. + * @ingroup bodies + * @param result will contain the result. + */ +ODE_API void dBodyGetPointVel +( + dBodyID, dReal px, dReal py, dReal pz, + dVector3 result +); + +/** + * @brief takes a point in global coordinates and returns + * the point's position in body-relative coordinates. + * @remarks + * This is the inverse of dBodyGetRelPointPos() + * @ingroup bodies + * @param result will contain the result. + */ +ODE_API void dBodyGetPosRelPoint +( + dBodyID, dReal px, dReal py, dReal pz, + dVector3 result +); + +/** + * @brief Convert from local to world coordinates. + * @ingroup bodies + * @param result will contain the result. + */ +ODE_API void dBodyVectorToWorld +( + dBodyID, dReal px, dReal py, dReal pz, + dVector3 result +); + +/** + * @brief Convert from world to local coordinates. + * @ingroup bodies + * @param result will contain the result. + */ +ODE_API void dBodyVectorFromWorld +( + dBodyID, dReal px, dReal py, dReal pz, + dVector3 result +); + +/** + * @brief controls the way a body's orientation is updated at each timestep. + * @ingroup bodies + * @param mode can be 0 or 1: + * \li 0: An ``infinitesimal'' orientation update is used. + * This is fast to compute, but it can occasionally cause inaccuracies + * for bodies that are rotating at high speed, especially when those + * bodies are joined to other bodies. + * This is the default for every new body that is created. + * \li 1: A ``finite'' orientation update is used. + * This is more costly to compute, but will be more accurate for high + * speed rotations. + * @remarks + * Note however that high speed rotations can result in many types of + * error in a simulation, and the finite mode will only fix one of those + * sources of error. + */ +ODE_API void dBodySetFiniteRotationMode (dBodyID, int mode); + +/** + * @brief sets the finite rotation axis for a body. + * @ingroup bodies + * @remarks + * This is axis only has meaning when the finite rotation mode is set + * If this axis is zero (0,0,0), full finite rotations are performed on + * the body. + * If this axis is nonzero, the body is rotated by performing a partial finite + * rotation along the axis direction followed by an infinitesimal rotation + * along an orthogonal direction. + * @remarks + * This can be useful to alleviate certain sources of error caused by quickly + * spinning bodies. For example, if a car wheel is rotating at high speed + * you can call this function with the wheel's hinge axis as the argument to + * try and improve its behavior. + */ +ODE_API void dBodySetFiniteRotationAxis (dBodyID, dReal x, dReal y, dReal z); + +/** + * @brief Get the way a body's orientation is updated each timestep. + * @ingroup bodies + * @return the mode 0 (infitesimal) or 1 (finite). + */ +ODE_API int dBodyGetFiniteRotationMode (dBodyID); + +/** + * @brief Get the finite rotation axis. + * @param result will contain the axis. + * @ingroup bodies + */ +ODE_API void dBodyGetFiniteRotationAxis (dBodyID, dVector3 result); + +/** + * @brief Get the number of joints that are attached to this body. + * @ingroup bodies + * @return nr of joints + */ +ODE_API int dBodyGetNumJoints (dBodyID b); + +/** + * @brief Return a joint attached to this body, given by index. + * @ingroup bodies + * @param index valid range is 0 to n-1 where n is the value returned by + * dBodyGetNumJoints(). + */ +ODE_API dJointID dBodyGetJoint (dBodyID, int index); + +/** + * @brief Manually enable a body. + * @param dBodyID identification of body. + * @ingroup bodies + */ +ODE_API void dBodyEnable (dBodyID); + +/** + * @brief Manually disable a body. + * @ingroup bodies + * @remarks + * A disabled body that is connected through a joint to an enabled body will + * be automatically re-enabled at the next simulation step. + */ +ODE_API void dBodyDisable (dBodyID); + +/** + * @brief Check wether a body is enabled. + * @ingroup bodies + * @return 1 if a body is currently enabled or 0 if it is disabled. + */ +ODE_API int dBodyIsEnabled (dBodyID); + +/** + * @brief Set whether the body is influenced by the world's gravity or not. + * @ingroup bodies + * @param mode when nonzero gravity affects this body. + * @remarks + * Newly created bodies are always influenced by the world's gravity. + */ +ODE_API void dBodySetGravityMode (dBodyID b, int mode); + +/** + * @brief Get whether the body is influenced by the world's gravity or not. + * @ingroup bodies + * @return nonzero means gravity affects this body. + */ +ODE_API int dBodyGetGravityMode (dBodyID b); + + + +/** + * @defgroup joints Joints + * + * In real life a joint is something like a hinge, that is used to connect two + * objects. + * In ODE a joint is very similar: It is a relationship that is enforced between + * two bodies so that they can only have certain positions and orientations + * relative to each other. + * This relationship is called a constraint -- the words joint and + * constraint are often used interchangeably. + * + * A joint has a set of parameters that can be set. These include: + * + * + * \li dParamLoStop Low stop angle or position. Setting this to + * -dInfinity (the default value) turns off the low stop. + * For rotational joints, this stop must be greater than -pi to be + * effective. + * \li dParamHiStop High stop angle or position. Setting this to + * dInfinity (the default value) turns off the high stop. + * For rotational joints, this stop must be less than pi to be + * effective. + * If the high stop is less than the low stop then both stops will + * be ineffective. + * \li dParamVel Desired motor velocity (this will be an angular or + * linear velocity). + * \li dParamFMax The maximum force or torque that the motor will use to + * achieve the desired velocity. + * This must always be greater than or equal to zero. + * Setting this to zero (the default value) turns off the motor. + * \li dParamFudgeFactor The current joint stop/motor implementation has + * a small problem: + * when the joint is at one stop and the motor is set to move it away + * from the stop, too much force may be applied for one time step, + * causing a ``jumping'' motion. + * This fudge factor is used to scale this excess force. + * It should have a value between zero and one (the default value). + * If the jumping motion is too visible in a joint, the value can be + * reduced. + * Making this value too small can prevent the motor from being able to + * move the joint away from a stop. + * \li dParamBounce The bouncyness of the stops. + * This is a restitution parameter in the range 0..1. + * 0 means the stops are not bouncy at all, 1 means maximum bouncyness. + * \li dParamCFM The constraint force mixing (CFM) value used when not + * at a stop. + * \li dParamStopERP The error reduction parameter (ERP) used by the + * stops. + * \li dParamStopCFM The constraint force mixing (CFM) value used by the + * stops. Together with the ERP value this can be used to get spongy or + * soft stops. + * Note that this is intended for unpowered joints, it does not really + * work as expected when a powered joint reaches its limit. + * \li dParamSuspensionERP Suspension error reduction parameter (ERP). + * Currently this is only implemented on the hinge-2 joint. + * \li dParamSuspensionCFM Suspension constraint force mixing (CFM) value. + * Currently this is only implemented on the hinge-2 joint. + * + * If a particular parameter is not implemented by a given joint, setting it + * will have no effect. + * These parameter names can be optionally followed by a digit (2 or 3) + * to indicate the second or third set of parameters, e.g. for the second axis + * in a hinge-2 joint, or the third axis in an AMotor joint. + */ + + +/** + * @brief Create a new joint of the ball type. + * @ingroup joints + * @remarks + * The joint is initially in "limbo" (i.e. it has no effect on the simulation) + * because it does not connect to any bodies. + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateBall (dWorldID, dJointGroupID); + +/** + * @brief Create a new joint of the hinge type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateHinge (dWorldID, dJointGroupID); + +/** + * @brief Create a new joint of the slider type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateSlider (dWorldID, dJointGroupID); + +/** + * @brief Create a new joint of the contact type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateContact (dWorldID, dJointGroupID, const dContact *); + +/** + * @brief Create a new joint of the hinge2 type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateHinge2 (dWorldID, dJointGroupID); + +/** + * @brief Create a new joint of the universal type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateUniversal (dWorldID, dJointGroupID); + +/** + * @brief Create a new joint of the fixed type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateFixed (dWorldID, dJointGroupID); + +ODE_API dJointID dJointCreateNull (dWorldID, dJointGroupID); + +/** + * @brief Create a new joint of the A-motor type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateAMotor (dWorldID, dJointGroupID); + +/** + * @brief Create a new joint of the L-motor type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreateLMotor (dWorldID, dJointGroupID); + +/** + * @brief Create a new joint of the plane-2d type. + * @ingroup joints + * @param dJointGroupID set to 0 to allocate the joint normally. + * If it is nonzero the joint is allocated in the given joint group. + */ +ODE_API dJointID dJointCreatePlane2D (dWorldID, dJointGroupID); + +/** + * @brief Destroy a joint. + * @ingroup joints + * + * disconnects it from its attached bodies and removing it from the world. + * However, if the joint is a member of a group then this function has no + * effect - to destroy that joint the group must be emptied or destroyed. + */ +ODE_API void dJointDestroy (dJointID); + + +/** + * @brief Create a joint group + * @ingroup joints + * @param max_size deprecated. Set to 0. + */ +ODE_API dJointGroupID dJointGroupCreate (int max_size); + +/** + * @brief Destroy a joint group. + * @ingroup joints + * + * All joints in the joint group will be destroyed. + */ +ODE_API void dJointGroupDestroy (dJointGroupID); + +/** + * @brief Empty a joint group. + * @ingroup joints + * + * All joints in the joint group will be destroyed, + * but the joint group itself will not be destroyed. + */ +ODE_API void dJointGroupEmpty (dJointGroupID); + +/** + * @brief Attach the joint to some new bodies. + * @ingroup joints + * + * If the joint is already attached, it will be detached from the old bodies + * first. + * To attach this joint to only one body, set body1 or body2 to zero - a zero + * body refers to the static environment. + * Setting both bodies to zero puts the joint into "limbo", i.e. it will + * have no effect on the simulation. + * @remarks + * Some joints, like hinge-2 need to be attached to two bodies to work. + */ +ODE_API void dJointAttach (dJointID, dBodyID body1, dBodyID body2); + +/** + * @brief Set the user-data pointer + * @ingroup joints + */ +ODE_API void dJointSetData (dJointID, void *data); + +/** + * @brief Get the user-data pointer + * @ingroup joints + */ +ODE_API void *dJointGetData (dJointID); + +/** + * @brief Get the type of the joint + * @ingroup joints + * @return the type, being one of these: + * \li JointTypeBall + * \li JointTypeHinge + * \li JointTypeSlider + * \li JointTypeContact + * \li JointTypeUniversal + * \li JointTypeHinge2 + * \li JointTypeFixed + * \li JointTypeAMotor + * \li JointTypeLMotor + */ +ODE_API int dJointGetType (dJointID); + +/** + * @brief Return the bodies that this joint connects. + * @ingroup joints + * @param index return the first (0) or second (1) body. + * @remarks + * If one of these returned body IDs is zero, the joint connects the other body + * to the static environment. + * If both body IDs are zero, the joint is in ``limbo'' and has no effect on + * the simulation. + */ +ODE_API dBodyID dJointGetBody (dJointID, int index); + +/** + * @brief Sets the datastructure that is to receive the feedback. + * + * The feedback can be used by the user, so that it is known how + * much force an individual joint exerts. + * @ingroup joints + */ +ODE_API void dJointSetFeedback (dJointID, dJointFeedback *); + +/** + * @brief Gets the datastructure that is to receive the feedback. + * @ingroup joints + */ +ODE_API dJointFeedback *dJointGetFeedback (dJointID); + +/** + * @brief Set the joint anchor point. + * @ingroup joints + * + * The joint will try to keep this point on each body + * together. The input is specified in world coordinates. + */ +ODE_API void dJointSetBallAnchor (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief Set the joint anchor point. + * @ingroup joints + */ +ODE_API void dJointSetBallAnchor2 (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief Set hinge anchor parameter. + * @ingroup joints + */ +ODE_API void dJointSetHingeAnchor (dJointID, dReal x, dReal y, dReal z); + +ODE_API void dJointSetHingeAnchorDelta (dJointID, dReal x, dReal y, dReal z, dReal ax, dReal ay, dReal az); + +/** + * @brief Set hinge axis. + * @ingroup joints + */ +ODE_API void dJointSetHingeAxis (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief set joint parameter + * @ingroup joints + */ +ODE_API void dJointSetHingeParam (dJointID, int parameter, dReal value); + +/** + * @brief Applies the torque about the hinge axis. + * + * That is, it applies a torque with specified magnitude in the direction + * of the hinge axis, to body 1, and with the same magnitude but in opposite + * direction to body 2. This function is just a wrapper for dBodyAddTorque()} + * @ingroup joints + */ +ODE_API void dJointAddHingeTorque(dJointID joint, dReal torque); + +/** + * @brief set the joint axis + * @ingroup joints + */ +ODE_API void dJointSetSliderAxis (dJointID, dReal x, dReal y, dReal z); + +/** + * @ingroup joints + */ +ODE_API void dJointSetSliderAxisDelta (dJointID, dReal x, dReal y, dReal z, dReal ax, dReal ay, dReal az); + +/** + * @brief set joint parameter + * @ingroup joints + */ +ODE_API void dJointSetSliderParam (dJointID, int parameter, dReal value); + +/** + * @brief Applies the given force in the slider's direction. + * + * That is, it applies a force with specified magnitude, in the direction of + * slider's axis, to body1, and with the same magnitude but opposite + * direction to body2. This function is just a wrapper for dBodyAddForce(). + * @ingroup joints + */ +ODE_API void dJointAddSliderForce(dJointID joint, dReal force); + +/** + * @brief set anchor + * @ingroup joints + */ +ODE_API void dJointSetHinge2Anchor (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief set axis + * @ingroup joints + */ +ODE_API void dJointSetHinge2Axis1 (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief set axis + * @ingroup joints + */ +ODE_API void dJointSetHinge2Axis2 (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief set joint parameter + * @ingroup joints + */ +ODE_API void dJointSetHinge2Param (dJointID, int parameter, dReal value); + +/** + * @brief Applies torque1 about the hinge2's axis 1, torque2 about the + * hinge2's axis 2. + * @remarks This function is just a wrapper for dBodyAddTorque(). + * @ingroup joints + */ +ODE_API void dJointAddHinge2Torques(dJointID joint, dReal torque1, dReal torque2); + +/** + * @brief set anchor + * @ingroup joints + */ +ODE_API void dJointSetUniversalAnchor (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief set axis + * @ingroup joints + */ +ODE_API void dJointSetUniversalAxis1 (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief set axis + * @ingroup joints + */ +ODE_API void dJointSetUniversalAxis2 (dJointID, dReal x, dReal y, dReal z); + +/** + * @brief set joint parameter + * @ingroup joints + */ +ODE_API void dJointSetUniversalParam (dJointID, int parameter, dReal value); + +/** + * @brief Applies torque1 about the universal's axis 1, torque2 about the + * universal's axis 2. + * @remarks This function is just a wrapper for dBodyAddTorque(). + * @ingroup joints + */ +ODE_API void dJointAddUniversalTorques(dJointID joint, dReal torque1, dReal torque2); + +/** + * @brief Call this on the fixed joint after it has been attached to + * remember the current desired relative offset and desired relative + * rotation between the bodies. + * @ingroup joints + */ +ODE_API void dJointSetFixed (dJointID); + +/** + * @brief set the nr of axes + * @param num 0..3 + * @ingroup joints + */ +ODE_API void dJointSetAMotorNumAxes (dJointID, int num); + +/** + * @brief set axis + * @ingroup joints + */ +ODE_API void dJointSetAMotorAxis (dJointID, int anum, int rel, + dReal x, dReal y, dReal z); + +/** + * @brief Tell the AMotor what the current angle is along axis anum. + * + * This function should only be called in dAMotorUser mode, because in this + * mode the AMotor has no other way of knowing the joint angles. + * The angle information is needed if stops have been set along the axis, + * but it is not needed for axis motors. + * @ingroup joints + */ +ODE_API void dJointSetAMotorAngle (dJointID, int anum, dReal angle); + +/** + * @brief set joint parameter + * @ingroup joints + */ +ODE_API void dJointSetAMotorParam (dJointID, int parameter, dReal value); + +/** + * @brief set mode + * @ingroup joints + */ +ODE_API void dJointSetAMotorMode (dJointID, int mode); + +/** + * @brief Applies torque0 about the AMotor's axis 0, torque1 about the + * AMotor's axis 1, and torque2 about the AMotor's axis 2. + * @remarks + * If the motor has fewer than three axes, the higher torques are ignored. + * This function is just a wrapper for dBodyAddTorque(). + * @ingroup joints + */ +ODE_API void dJointAddAMotorTorques (dJointID, dReal torque1, dReal torque2, dReal torque3); + +/** + * @brief Set the number of axes that will be controlled by the LMotor. + * @param num can range from 0 (which effectively deactivates the joint) to 3. + * @ingroup joints + */ +ODE_API void dJointSetLMotorNumAxes (dJointID, int num); + +/** + * @brief Set the AMotor axes. + * @param anum selects the axis to change (0,1 or 2). + * @param rel Each axis can have one of three ``relative orientation'' modes + * \li 0: The axis is anchored to the global frame. + * \li 1: The axis is anchored to the first body. + * \li 2: The axis is anchored to the second body. + * @remarks The axis vector is always specified in global coordinates + * regardless of the setting of rel. + * @ingroup joints + */ +ODE_API void dJointSetLMotorAxis (dJointID, int anum, int rel, dReal x, dReal y, dReal z); + +/** + * @brief set joint parameter + * @ingroup joints + */ +ODE_API void dJointSetLMotorParam (dJointID, int parameter, dReal value); + +/** + * @ingroup joints + */ +ODE_API void dJointSetPlane2DXParam (dJointID, int parameter, dReal value); + +/** + * @ingroup joints + */ + +ODE_API void dJointSetPlane2DYParam (dJointID, int parameter, dReal value); + +/** + * @ingroup joints + */ +ODE_API void dJointSetPlane2DAngleParam (dJointID, int parameter, dReal value); + +/** + * @brief Get the joint anchor point, in world coordinates. + * + * This returns the point on body 1. If the joint is perfectly satisfied, + * this will be the same as the point on body 2. + */ +ODE_API void dJointGetBallAnchor (dJointID, dVector3 result); + +/** + * @brief Get the joint anchor point, in world coordinates. + * + * This returns the point on body 2. You can think of a ball and socket + * joint as trying to keep the result of dJointGetBallAnchor() and + * dJointGetBallAnchor2() the same. If the joint is perfectly satisfied, + * this function will return the same value as dJointGetBallAnchor() to + * within roundoff errors. dJointGetBallAnchor2() can be used, along with + * dJointGetBallAnchor(), to see how far the joint has come apart. + */ +ODE_API void dJointGetBallAnchor2 (dJointID, dVector3 result); + +/** + * @brief Get the hinge anchor point, in world coordinates. + * + * This returns the point on body 1. If the joint is perfectly satisfied, + * this will be the same as the point on body 2. + * @ingroup joints + */ +ODE_API void dJointGetHingeAnchor (dJointID, dVector3 result); + +/** + * @brief Get the joint anchor point, in world coordinates. + * @return The point on body 2. If the joint is perfectly satisfied, + * this will return the same value as dJointGetHingeAnchor(). + * If not, this value will be slightly different. + * This can be used, for example, to see how far the joint has come apart. + * @ingroup joints + */ +ODE_API void dJointGetHingeAnchor2 (dJointID, dVector3 result); + +/** + * @brief get axis + * @ingroup joints + */ +ODE_API void dJointGetHingeAxis (dJointID, dVector3 result); + +/** + * @brief get joint parameter + * @ingroup joints + */ +ODE_API dReal dJointGetHingeParam (dJointID, int parameter); + +/** + * @brief Get the hinge angle. + * + * The angle is measured between the two bodies, or between the body and + * the static environment. + * The angle will be between -pi..pi. + * When the hinge anchor or axis is set, the current position of the attached + * bodies is examined and that position will be the zero angle. + * @ingroup joints + */ +ODE_API dReal dJointGetHingeAngle (dJointID); + +/** + * @brief Get the hinge angle time derivative. + * @ingroup joints + */ +ODE_API dReal dJointGetHingeAngleRate (dJointID); + +/** + * @brief Get the slider linear position (i.e. the slider's extension) + * + * When the axis is set, the current position of the attached bodies is + * examined and that position will be the zero position. + * @ingroup joints + */ +ODE_API dReal dJointGetSliderPosition (dJointID); + +/** + * @brief Get the slider linear position's time derivative. + * @ingroup joints + */ +ODE_API dReal dJointGetSliderPositionRate (dJointID); + +/** + * @brief Get the slider axis + * @ingroup joints + */ +ODE_API void dJointGetSliderAxis (dJointID, dVector3 result); + +/** + * @brief get joint parameter + * @ingroup joints + */ +ODE_API dReal dJointGetSliderParam (dJointID, int parameter); + +/** + * @brief Get the joint anchor point, in world coordinates. + * @return the point on body 1. If the joint is perfectly satisfied, + * this will be the same as the point on body 2. + * @ingroup joints + */ +ODE_API void dJointGetHinge2Anchor (dJointID, dVector3 result); + +/** + * @brief Get the joint anchor point, in world coordinates. + * This returns the point on body 2. If the joint is perfectly satisfied, + * this will return the same value as dJointGetHinge2Anchor. + * If not, this value will be slightly different. + * This can be used, for example, to see how far the joint has come apart. + * @ingroup joints + */ +ODE_API void dJointGetHinge2Anchor2 (dJointID, dVector3 result); + +/** + * @brief Get joint axis + * @ingroup joints + */ +ODE_API void dJointGetHinge2Axis1 (dJointID, dVector3 result); + +/** + * @brief Get joint axis + * @ingroup joints + */ +ODE_API void dJointGetHinge2Axis2 (dJointID, dVector3 result); + +/** + * @brief get joint parameter + * @ingroup joints + */ +ODE_API dReal dJointGetHinge2Param (dJointID, int parameter); + +/** + * @brief Get angle + * @ingroup joints + */ +ODE_API dReal dJointGetHinge2Angle1 (dJointID); + +/** + * @brief Get time derivative of angle + * @ingroup joints + */ +ODE_API dReal dJointGetHinge2Angle1Rate (dJointID); + +/** + * @brief Get time derivative of angle + * @ingroup joints + */ +ODE_API dReal dJointGetHinge2Angle2Rate (dJointID); + +/** + * @brief Get the joint anchor point, in world coordinates. + * @return the point on body 1. If the joint is perfectly satisfied, + * this will be the same as the point on body 2. + * @ingroup joints + */ +ODE_API void dJointGetUniversalAnchor (dJointID, dVector3 result); + +/** + * @brief Get the joint anchor point, in world coordinates. + * @return This returns the point on body 2. + * @remarks + * You can think of the ball and socket part of a universal joint as + * trying to keep the result of dJointGetBallAnchor() and + * dJointGetBallAnchor2() the same. If the joint is + * perfectly satisfied, this function will return the same value + * as dJointGetUniversalAnchor() to within roundoff errors. + * dJointGetUniversalAnchor2() can be used, along with + * dJointGetUniversalAnchor(), to see how far the joint has come apart. + * @ingroup joints + */ +ODE_API void dJointGetUniversalAnchor2 (dJointID, dVector3 result); + +/** + * @brief Get axis + * @ingroup joints + */ +ODE_API void dJointGetUniversalAxis1 (dJointID, dVector3 result); + +/** + * @brief Get axis + * @ingroup joints + */ +ODE_API void dJointGetUniversalAxis2 (dJointID, dVector3 result); + + +/** + * @brief get joint parameter + * @ingroup joints + */ +ODE_API dReal dJointGetUniversalParam (dJointID, int parameter); + +/** + * @brief Get angle + * @ingroup joints + */ +ODE_API dReal dJointGetUniversalAngle1 (dJointID); + +/** + * @brief Get angle + * @ingroup joints + */ +ODE_API dReal dJointGetUniversalAngle2 (dJointID); + +/** + * @brief Get time derivative of angle + * @ingroup joints + */ +ODE_API dReal dJointGetUniversalAngle1Rate (dJointID); + +/** + * @brief Get time derivative of angle + * @ingroup joints + */ +ODE_API dReal dJointGetUniversalAngle2Rate (dJointID); + +/** + * @brief Get the number of angular axes that will be controlled by the + * AMotor. + * @param num can range from 0 (which effectively deactivates the + * joint) to 3. + * This is automatically set to 3 in dAMotorEuler mode. + * @ingroup joints + */ +ODE_API int dJointGetAMotorNumAxes (dJointID); + +/** + * @brief Get the AMotor axes. + * @param anum selects the axis to change (0,1 or 2). + * @param rel Each axis can have one of three ``relative orientation'' modes. + * \li 0: The axis is anchored to the global frame. + * \li 1: The axis is anchored to the first body. + * \li 2: The axis is anchored to the second body. + * @ingroup joints + */ +ODE_API void dJointGetAMotorAxis (dJointID, int anum, dVector3 result); + +/** + * @brief Get axis + * @remarks + * The axis vector is always specified in global coordinates regardless + * of the setting of rel. + * There are two GetAMotorAxis functions, one to return the axis and one to + * return the relative mode. + * + * For dAMotorEuler mode: + * \li Only axes 0 and 2 need to be set. Axis 1 will be determined + automatically at each time step. + * \li Axes 0 and 2 must be perpendicular to each other. + * \li Axis 0 must be anchored to the first body, axis 2 must be anchored + to the second body. + * @ingroup joints + */ +ODE_API int dJointGetAMotorAxisRel (dJointID, int anum); + +/** + * @brief Get the current angle for axis. + * @remarks + * In dAMotorUser mode this is simply the value that was set with + * dJointSetAMotorAngle(). + * In dAMotorEuler mode this is the corresponding euler angle. + * @ingroup joints + */ +ODE_API dReal dJointGetAMotorAngle (dJointID, int anum); + +/** + * @brief Get the current angle rate for axis anum. + * @remarks + * In dAMotorUser mode this is always zero, as not enough information is + * available. + * In dAMotorEuler mode this is the corresponding euler angle rate. + * @ingroup joints + */ +ODE_API dReal dJointGetAMotorAngleRate (dJointID, int anum); + +/** + * @brief get joint parameter + * @ingroup joints + */ +ODE_API dReal dJointGetAMotorParam (dJointID, int parameter); + +/** + * @brief Get the angular motor mode. + * @param mode must be one of the following constants: + * \li dAMotorUser The AMotor axes and joint angle settings are entirely + * controlled by the user. This is the default mode. + * \li dAMotorEuler Euler angles are automatically computed. + * The axis a1 is also automatically computed. + * The AMotor axes must be set correctly when in this mode, + * as described below. + * When this mode is initially set the current relative orientations + * of the bodies will correspond to all euler angles at zero. + * @ingroup joints + */ +ODE_API int dJointGetAMotorMode (dJointID); + +/** + * @brief Get nr of axes. + * @ingroup joints + */ +ODE_API int dJointGetLMotorNumAxes (dJointID); + +/** + * @brief Get axis. + * @ingroup joints + */ +ODE_API void dJointGetLMotorAxis (dJointID, int anum, dVector3 result); + +/** + * @brief get joint parameter + * @ingroup joints + */ +ODE_API dReal dJointGetLMotorParam (dJointID, int parameter); + + +/** + * @ingroup joints + */ +ODE_API dJointID dConnectingJoint (dBodyID, dBodyID); + +/** + * @ingroup joints + */ +ODE_API int dConnectingJointList (dBodyID, dBodyID, dJointID*); + +/** + * @brief Utility function + * @return 1 if the two bodies are connected together by + * a joint, otherwise return 0. + * @ingroup joints + */ +ODE_API int dAreConnected (dBodyID, dBodyID); + +/** + * @brief Utility function + * @return 1 if the two bodies are connected together by + * a joint that does not have type @arg{joint_type}, otherwise return 0. + * @param joint_type is a dJointTypeXXX constant. + * This is useful for deciding whether to add contact joints between two bodies: + * if they are already connected by non-contact joints then it may not be + * appropriate to add contacts, however it is okay to add more contact between- + * bodies that already have contacts. + * @ingroup joints + */ +ODE_API int dAreConnectedExcluding (dBodyID, dBodyID, int joint_type); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/ode.h b/misc/builddeps/emscripten/ode/include/ode/ode.h new file mode 100644 index 00000000..00cd500b --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/ode.h @@ -0,0 +1,47 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_ODE_H_ +#define _ODE_ODE_H_ + +/* include *everything* here */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/odecpp.h b/misc/builddeps/emscripten/ode/include/ode/odecpp.h new file mode 100644 index 00000000..fc45ace7 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/odecpp.h @@ -0,0 +1,659 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/* C++ interface for non-collision stuff */ + + +#ifndef _ODE_ODECPP_H_ +#define _ODE_ODECPP_H_ +#ifdef __cplusplus + +#include + + +class dWorld { + dWorldID _id; + + // intentionally undefined, don't use these + dWorld (const dWorld &); + void operator= (const dWorld &); + +public: + dWorld() + { _id = dWorldCreate(); } + ~dWorld() + { dWorldDestroy (_id); } + + dWorldID id() const + { return _id; } + operator dWorldID() const + { return _id; } + + void setGravity (dReal x, dReal y, dReal z) + { dWorldSetGravity (_id,x,y,z); } + void getGravity (dVector3 g) const + { dWorldGetGravity (_id,g); } + + void setERP (dReal erp) + { dWorldSetERP(_id, erp); } + dReal getERP() const + { return dWorldGetERP(_id); } + + void setCFM (dReal cfm) + { dWorldSetCFM(_id, cfm); } + dReal getCFM() const + { return dWorldGetCFM(_id); } + + void step (dReal stepsize) + { dWorldStep (_id,stepsize); } + + void stepFast1 (dReal stepsize, int maxiterations) + { dWorldStepFast1 (_id,stepsize,maxiterations); } + void setAutoEnableDepthSF1(dWorldID, int depth) + { dWorldSetAutoEnableDepthSF1 (_id, depth); } + int getAutoEnableDepthSF1(dWorldID) + { return dWorldGetAutoEnableDepthSF1 (_id); } + + void setAutoDisableLinearThreshold (dReal threshold) + { dWorldSetAutoDisableLinearThreshold (_id,threshold); } + dReal getAutoDisableLinearThreshold() + { return dWorldGetAutoDisableLinearThreshold (_id); } + void setAutoDisableAngularThreshold (dReal threshold) + { dWorldSetAutoDisableAngularThreshold (_id,threshold); } + dReal getAutoDisableAngularThreshold() + { return dWorldGetAutoDisableAngularThreshold (_id); } + void setAutoDisableSteps (int steps) + { dWorldSetAutoDisableSteps (_id,steps); } + int getAutoDisableSteps() + { return dWorldGetAutoDisableSteps (_id); } + void setAutoDisableTime (dReal time) + { dWorldSetAutoDisableTime (_id,time); } + dReal getAutoDisableTime() + { return dWorldGetAutoDisableTime (_id); } + void setAutoDisableFlag (int do_auto_disable) + { dWorldSetAutoDisableFlag (_id,do_auto_disable); } + int getAutoDisableFlag() + { return dWorldGetAutoDisableFlag (_id); } + + void impulseToForce (dReal stepsize, dReal ix, dReal iy, dReal iz, + dVector3 force) + { dWorldImpulseToForce (_id,stepsize,ix,iy,iz,force); } +}; + + +class dBody { + dBodyID _id; + + // intentionally undefined, don't use these + dBody (const dBody &); + void operator= (const dBody &); + +public: + dBody() + { _id = 0; } + dBody (dWorldID world) + { _id = dBodyCreate (world); } + ~dBody() + { if (_id) dBodyDestroy (_id); } + + void create (dWorldID world) { + if (_id) dBodyDestroy (_id); + _id = dBodyCreate (world); + } + + dBodyID id() const + { return _id; } + operator dBodyID() const + { return _id; } + + void setData (void *data) + { dBodySetData (_id,data); } + void *getData() const + { return dBodyGetData (_id); } + + void setPosition (dReal x, dReal y, dReal z) + { dBodySetPosition (_id,x,y,z); } + void setRotation (const dMatrix3 R) + { dBodySetRotation (_id,R); } + void setQuaternion (const dQuaternion q) + { dBodySetQuaternion (_id,q); } + void setLinearVel (dReal x, dReal y, dReal z) + { dBodySetLinearVel (_id,x,y,z); } + void setAngularVel (dReal x, dReal y, dReal z) + { dBodySetAngularVel (_id,x,y,z); } + + const dReal * getPosition() const + { return dBodyGetPosition (_id); } + const dReal * getRotation() const + { return dBodyGetRotation (_id); } + const dReal * getQuaternion() const + { return dBodyGetQuaternion (_id); } + const dReal * getLinearVel() const + { return dBodyGetLinearVel (_id); } + const dReal * getAngularVel() const + { return dBodyGetAngularVel (_id); } + + void setMass (const dMass *mass) + { dBodySetMass (_id,mass); } + void getMass (dMass *mass) const + { dBodyGetMass (_id,mass); } + + void addForce (dReal fx, dReal fy, dReal fz) + { dBodyAddForce (_id, fx, fy, fz); } + void addTorque (dReal fx, dReal fy, dReal fz) + { dBodyAddTorque (_id, fx, fy, fz); } + void addRelForce (dReal fx, dReal fy, dReal fz) + { dBodyAddRelForce (_id, fx, fy, fz); } + void addRelTorque (dReal fx, dReal fy, dReal fz) + { dBodyAddRelTorque (_id, fx, fy, fz); } + void addForceAtPos (dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz) + { dBodyAddForceAtPos (_id, fx, fy, fz, px, py, pz); } + void addForceAtRelPos (dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz) + { dBodyAddForceAtRelPos (_id, fx, fy, fz, px, py, pz); } + void addRelForceAtPos (dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz) + { dBodyAddRelForceAtPos (_id, fx, fy, fz, px, py, pz); } + void addRelForceAtRelPos (dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz) + { dBodyAddRelForceAtRelPos (_id, fx, fy, fz, px, py, pz); } + + const dReal * getForce() const + { return dBodyGetForce(_id); } + const dReal * getTorque() const + { return dBodyGetTorque(_id); } + void setForce (dReal x, dReal y, dReal z) + { dBodySetForce (_id,x,y,z); } + void setTorque (dReal x, dReal y, dReal z) + { dBodySetTorque (_id,x,y,z); } + + void enable() + { dBodyEnable (_id); } + void disable() + { dBodyDisable (_id); } + int isEnabled() const + { return dBodyIsEnabled (_id); } + + void getRelPointPos (dReal px, dReal py, dReal pz, dVector3 result) const + { dBodyGetRelPointPos (_id, px, py, pz, result); } + void getRelPointVel (dReal px, dReal py, dReal pz, dVector3 result) const + { dBodyGetRelPointVel (_id, px, py, pz, result); } + void getPointVel (dReal px, dReal py, dReal pz, dVector3 result) const + { dBodyGetPointVel (_id,px,py,pz,result); } + void getPosRelPoint (dReal px, dReal py, dReal pz, dVector3 result) const + { dBodyGetPosRelPoint (_id,px,py,pz,result); } + void vectorToWorld (dReal px, dReal py, dReal pz, dVector3 result) const + { dBodyVectorToWorld (_id,px,py,pz,result); } + void vectorFromWorld (dReal px, dReal py, dReal pz, dVector3 result) const + { dBodyVectorFromWorld (_id,px,py,pz,result); } + + void setFiniteRotationMode (int mode) + { dBodySetFiniteRotationMode (_id, mode); } + void setFiniteRotationAxis (dReal x, dReal y, dReal z) + { dBodySetFiniteRotationAxis (_id, x, y, z); } + + int getFiniteRotationMode() const + { return dBodyGetFiniteRotationMode (_id); } + void getFiniteRotationAxis (dVector3 result) const + { dBodyGetFiniteRotationAxis (_id, result); } + + int getNumJoints() const + { return dBodyGetNumJoints (_id); } + dJointID getJoint (int index) const + { return dBodyGetJoint (_id, index); } + + void setGravityMode (int mode) + { dBodySetGravityMode (_id,mode); } + int getGravityMode() const + { return dBodyGetGravityMode (_id); } + + int isConnectedTo (dBodyID body) const + { return dAreConnected (_id, body); } + + void setAutoDisableLinearThreshold (dReal threshold) + { dBodySetAutoDisableLinearThreshold (_id,threshold); } + dReal getAutoDisableLinearThreshold() + { return dBodyGetAutoDisableLinearThreshold (_id); } + void setAutoDisableAngularThreshold (dReal threshold) + { dBodySetAutoDisableAngularThreshold (_id,threshold); } + dReal getAutoDisableAngularThreshold() + { return dBodyGetAutoDisableAngularThreshold (_id); } + void setAutoDisableSteps (int steps) + { dBodySetAutoDisableSteps (_id,steps); } + int getAutoDisableSteps() + { return dBodyGetAutoDisableSteps (_id); } + void setAutoDisableTime (dReal time) + { dBodySetAutoDisableTime (_id,time); } + dReal getAutoDisableTime() + { return dBodyGetAutoDisableTime (_id); } + void setAutoDisableFlag (int do_auto_disable) + { dBodySetAutoDisableFlag (_id,do_auto_disable); } + int getAutoDisableFlag() + { return dBodyGetAutoDisableFlag (_id); } +}; + + +class dJointGroup { + dJointGroupID _id; + + // intentionally undefined, don't use these + dJointGroup (const dJointGroup &); + void operator= (const dJointGroup &); + +public: + dJointGroup (int dummy_arg=0) + { _id = dJointGroupCreate (0); } + ~dJointGroup() + { dJointGroupDestroy (_id); } + void create (int dummy_arg=0) { + if (_id) dJointGroupDestroy (_id); + _id = dJointGroupCreate (0); + } + + dJointGroupID id() const + { return _id; } + operator dJointGroupID() const + { return _id; } + + void empty() + { dJointGroupEmpty (_id); } +}; + + +class dJoint { +private: + // intentionally undefined, don't use these + dJoint (const dJoint &) ; + void operator= (const dJoint &); + +protected: + dJointID _id; + +public: + dJoint() + { _id = 0; } + ~dJoint() + { if (_id) dJointDestroy (_id); } + + dJointID id() const + { return _id; } + operator dJointID() const + { return _id; } + + void attach (dBodyID body1, dBodyID body2) + { dJointAttach (_id, body1, body2); } + + void setData (void *data) + { dJointSetData (_id, data); } + void *getData() const + { return dJointGetData (_id); } + + int getType() const + { return dJointGetType (_id); } + + dBodyID getBody (int index) const + { return dJointGetBody (_id, index); } + + void setFeedback(dJointFeedback *fb) + { dJointSetFeedback(_id, fb); } + dJointFeedback *getFeedback() const + { return dJointGetFeedback(_id); } +}; + + +class dBallJoint : public dJoint { +private: + // intentionally undefined, don't use these + dBallJoint (const dBallJoint &); + void operator= (const dBallJoint &); + +public: + dBallJoint() { } + dBallJoint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateBall (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateBall (world, group); + } + + void setAnchor (dReal x, dReal y, dReal z) + { dJointSetBallAnchor (_id, x, y, z); } + void getAnchor (dVector3 result) const + { dJointGetBallAnchor (_id, result); } + void getAnchor2 (dVector3 result) const + { dJointGetBallAnchor2 (_id, result); } +} ; + + +class dHingeJoint : public dJoint { + // intentionally undefined, don't use these + dHingeJoint (const dHingeJoint &); + void operator = (const dHingeJoint &); + +public: + dHingeJoint() { } + dHingeJoint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateHinge (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateHinge (world, group); + } + + void setAnchor (dReal x, dReal y, dReal z) + { dJointSetHingeAnchor (_id, x, y, z); } + void getAnchor (dVector3 result) const + { dJointGetHingeAnchor (_id, result); } + void getAnchor2 (dVector3 result) const + { dJointGetHingeAnchor2 (_id, result); } + + void setAxis (dReal x, dReal y, dReal z) + { dJointSetHingeAxis (_id, x, y, z); } + void getAxis (dVector3 result) const + { dJointGetHingeAxis (_id, result); } + + dReal getAngle() const + { return dJointGetHingeAngle (_id); } + dReal getAngleRate() const + { return dJointGetHingeAngleRate (_id); } + + void setParam (int parameter, dReal value) + { dJointSetHingeParam (_id, parameter, value); } + dReal getParam (int parameter) const + { return dJointGetHingeParam (_id, parameter); } + + void addTorque (dReal torque) + { dJointAddHingeTorque(_id, torque); } +}; + + +class dSliderJoint : public dJoint { + // intentionally undefined, don't use these + dSliderJoint (const dSliderJoint &); + void operator = (const dSliderJoint &); + +public: + dSliderJoint() { } + dSliderJoint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateSlider (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateSlider (world, group); + } + + void setAxis (dReal x, dReal y, dReal z) + { dJointSetSliderAxis (_id, x, y, z); } + void getAxis (dVector3 result) const + { dJointGetSliderAxis (_id, result); } + + dReal getPosition() const + { return dJointGetSliderPosition (_id); } + dReal getPositionRate() const + { return dJointGetSliderPositionRate (_id); } + + void setParam (int parameter, dReal value) + { dJointSetSliderParam (_id, parameter, value); } + dReal getParam (int parameter) const + { return dJointGetSliderParam (_id, parameter); } + + void addForce (dReal force) + { dJointAddSliderForce(_id, force); } +}; + + +class dUniversalJoint : public dJoint { + // intentionally undefined, don't use these + dUniversalJoint (const dUniversalJoint &); + void operator = (const dUniversalJoint &); + +public: + dUniversalJoint() { } + dUniversalJoint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateUniversal (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateUniversal (world, group); + } + + void setAnchor (dReal x, dReal y, dReal z) + { dJointSetUniversalAnchor (_id, x, y, z); } + void setAxis1 (dReal x, dReal y, dReal z) + { dJointSetUniversalAxis1 (_id, x, y, z); } + void setAxis2 (dReal x, dReal y, dReal z) + { dJointSetUniversalAxis2 (_id, x, y, z); } + void setParam (int parameter, dReal value) + { dJointSetUniversalParam (_id, parameter, value); } + + void getAnchor (dVector3 result) const + { dJointGetUniversalAnchor (_id, result); } + void getAnchor2 (dVector3 result) const + { dJointGetUniversalAnchor2 (_id, result); } + void getAxis1 (dVector3 result) const + { dJointGetUniversalAxis1 (_id, result); } + void getAxis2 (dVector3 result) const + { dJointGetUniversalAxis2 (_id, result); } + dReal getParam (int parameter) const + { return dJointGetUniversalParam (_id, parameter); } + dReal getAngle1() const + { return dJointGetUniversalAngle1 (_id); } + dReal getAngle1Rate() const + { return dJointGetUniversalAngle1Rate (_id); } + dReal getAngle2() const + { return dJointGetUniversalAngle2 (_id); } + dReal getAngle2Rate() const + { return dJointGetUniversalAngle2Rate (_id); } + + void addTorques (dReal torque1, dReal torque2) + { dJointAddUniversalTorques(_id, torque1, torque2); } +}; + + +class dHinge2Joint : public dJoint { + // intentionally undefined, don't use these + dHinge2Joint (const dHinge2Joint &); + void operator = (const dHinge2Joint &); + +public: + dHinge2Joint() { } + dHinge2Joint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateHinge2 (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateHinge2 (world, group); + } + + void setAnchor (dReal x, dReal y, dReal z) + { dJointSetHinge2Anchor (_id, x, y, z); } + void setAxis1 (dReal x, dReal y, dReal z) + { dJointSetHinge2Axis1 (_id, x, y, z); } + void setAxis2 (dReal x, dReal y, dReal z) + { dJointSetHinge2Axis2 (_id, x, y, z); } + + void getAnchor (dVector3 result) const + { dJointGetHinge2Anchor (_id, result); } + void getAnchor2 (dVector3 result) const + { dJointGetHinge2Anchor2 (_id, result); } + void getAxis1 (dVector3 result) const + { dJointGetHinge2Axis1 (_id, result); } + void getAxis2 (dVector3 result) const + { dJointGetHinge2Axis2 (_id, result); } + + dReal getAngle1() const + { return dJointGetHinge2Angle1 (_id); } + dReal getAngle1Rate() const + { return dJointGetHinge2Angle1Rate (_id); } + dReal getAngle2Rate() const + { return dJointGetHinge2Angle2Rate (_id); } + + void setParam (int parameter, dReal value) + { dJointSetHinge2Param (_id, parameter, value); } + dReal getParam (int parameter) const + { return dJointGetHinge2Param (_id, parameter); } + + void addTorques(dReal torque1, dReal torque2) + { dJointAddHinge2Torques(_id, torque1, torque2); } +}; + + +class dFixedJoint : public dJoint { + // intentionally undefined, don't use these + dFixedJoint (const dFixedJoint &); + void operator = (const dFixedJoint &); + +public: + dFixedJoint() { } + dFixedJoint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateFixed (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateFixed (world, group); + } + + void set() + { dJointSetFixed (_id); } +}; + + +class dContactJoint : public dJoint { + // intentionally undefined, don't use these + dContactJoint (const dContactJoint &); + void operator = (const dContactJoint &); + +public: + dContactJoint() { } + dContactJoint (dWorldID world, dJointGroupID group, dContact *contact) + { _id = dJointCreateContact (world, group, contact); } + + void create (dWorldID world, dJointGroupID group, dContact *contact) { + if (_id) dJointDestroy (_id); + _id = dJointCreateContact (world, group, contact); + } +}; + + +class dNullJoint : public dJoint { + // intentionally undefined, don't use these + dNullJoint (const dNullJoint &); + void operator = (const dNullJoint &); + +public: + dNullJoint() { } + dNullJoint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateNull (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateNull (world, group); + } +}; + + +class dAMotorJoint : public dJoint { + // intentionally undefined, don't use these + dAMotorJoint (const dAMotorJoint &); + void operator = (const dAMotorJoint &); + +public: + dAMotorJoint() { } + dAMotorJoint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateAMotor (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateAMotor (world, group); + } + + void setMode (int mode) + { dJointSetAMotorMode (_id, mode); } + int getMode() const + { return dJointGetAMotorMode (_id); } + + void setNumAxes (int num) + { dJointSetAMotorNumAxes (_id, num); } + int getNumAxes() const + { return dJointGetAMotorNumAxes (_id); } + + void setAxis (int anum, int rel, dReal x, dReal y, dReal z) + { dJointSetAMotorAxis (_id, anum, rel, x, y, z); } + void getAxis (int anum, dVector3 result) const + { dJointGetAMotorAxis (_id, anum, result); } + int getAxisRel (int anum) const + { return dJointGetAMotorAxisRel (_id, anum); } + + void setAngle (int anum, dReal angle) + { dJointSetAMotorAngle (_id, anum, angle); } + dReal getAngle (int anum) const + { return dJointGetAMotorAngle (_id, anum); } + dReal getAngleRate (int anum) + { return dJointGetAMotorAngleRate (_id,anum); } + + void setParam (int parameter, dReal value) + { dJointSetAMotorParam (_id, parameter, value); } + dReal getParam (int parameter) const + { return dJointGetAMotorParam (_id, parameter); } + + void addTorques(dReal torque1, dReal torque2, dReal torque3) + { dJointAddAMotorTorques(_id, torque1, torque2, torque3); } +}; + + +class dLMotorJoint : public dJoint { + // intentionally undefined, don't use these + dLMotorJoint (const dLMotorJoint &); + void operator = (const dLMotorJoint &); + +public: + dLMotorJoint() { } + dLMotorJoint (dWorldID world, dJointGroupID group=0) + { _id = dJointCreateLMotor (world, group); } + + void create (dWorldID world, dJointGroupID group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateLMotor (world, group); + } + + void setNumAxes (int num) + { dJointSetLMotorNumAxes (_id, num); } + int getNumAxes() const + { return dJointGetLMotorNumAxes (_id); } + + void setAxis (int anum, int rel, dReal x, dReal y, dReal z) + { dJointSetLMotorAxis (_id, anum, rel, x, y, z); } + void getAxis (int anum, dVector3 result) const + { dJointGetLMotorAxis (_id, anum, result); } + + void setParam (int parameter, dReal value) + { dJointSetLMotorParam (_id, parameter, value); } + dReal getParam (int parameter) const + { return dJointGetLMotorParam (_id, parameter); } +}; + + + +#endif +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/odecpp_collision.h b/misc/builddeps/emscripten/ode/include/ode/odecpp_collision.h new file mode 100644 index 00000000..16ca78f7 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/odecpp_collision.h @@ -0,0 +1,346 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/* C++ interface for new collision API */ + + +#ifndef _ODE_ODECPP_COLLISION_H_ +#define _ODE_ODECPP_COLLISION_H_ +#ifdef __cplusplus + +#include + + +class dGeom { + // intentionally undefined, don't use these + dGeom (dGeom &); + void operator= (dGeom &); + +protected: + dGeomID _id; + +public: + dGeom() + { _id = 0; } + ~dGeom() + { if (_id) dGeomDestroy (_id); } + + dGeomID id() const + { return _id; } + operator dGeomID() const + { return _id; } + + void destroy() { + if (_id) dGeomDestroy (_id); + _id = 0; + } + + int getClass() const + { return dGeomGetClass (_id); } + + dSpaceID getSpace() const + { return dGeomGetSpace (_id); } + + void setData (void *data) + { dGeomSetData (_id,data); } + void *getData() const + { return dGeomGetData (_id); } + + void setBody (dBodyID b) + { dGeomSetBody (_id,b); } + dBodyID getBody() const + { return dGeomGetBody (_id); } + + void setPosition (dReal x, dReal y, dReal z) + { dGeomSetPosition (_id,x,y,z); } + const dReal * getPosition() const + { return dGeomGetPosition (_id); } + + void setRotation (const dMatrix3 R) + { dGeomSetRotation (_id,R); } + const dReal * getRotation() const + { return dGeomGetRotation (_id); } + + void setQuaternion (const dQuaternion quat) + { dGeomSetQuaternion (_id,quat); } + void getQuaternion (dQuaternion quat) const + { dGeomGetQuaternion (_id,quat); } + + void getAABB (dReal aabb[6]) const + { dGeomGetAABB (_id, aabb); } + + int isSpace() + { return dGeomIsSpace (_id); } + + void setCategoryBits (unsigned long bits) + { dGeomSetCategoryBits (_id, bits); } + void setCollideBits (unsigned long bits) + { dGeomSetCollideBits (_id, bits); } + unsigned long getCategoryBits() + { return dGeomGetCategoryBits (_id); } + unsigned long getCollideBits() + { return dGeomGetCollideBits (_id); } + + void enable() + { dGeomEnable (_id); } + void disable() + { dGeomDisable (_id); } + int isEnabled() + { return dGeomIsEnabled (_id); } + + void collide2 (dGeomID g, void *data, dNearCallback *callback) + { dSpaceCollide2 (_id,g,data,callback); } +}; + + +class dSpace : public dGeom { + // intentionally undefined, don't use these + dSpace (dSpace &); + void operator= (dSpace &); + +protected: + // the default constructor is protected so that you + // can't instance this class. you must instance one + // of its subclasses instead. + dSpace () { _id = 0; } + +public: + dSpaceID id() const + { return (dSpaceID) _id; } + operator dSpaceID() const + { return (dSpaceID) _id; } + + void setCleanup (int mode) + { dSpaceSetCleanup (id(), mode); } + int getCleanup() + { return dSpaceGetCleanup (id()); } + + void add (dGeomID x) + { dSpaceAdd (id(), x); } + void remove (dGeomID x) + { dSpaceRemove (id(), x); } + int query (dGeomID x) + { return dSpaceQuery (id(),x); } + + int getNumGeoms() + { return dSpaceGetNumGeoms (id()); } + dGeomID getGeom (int i) + { return dSpaceGetGeom (id(),i); } + + void collide (void *data, dNearCallback *callback) + { dSpaceCollide (id(),data,callback); } +}; + + +class dSimpleSpace : public dSpace { + // intentionally undefined, don't use these + dSimpleSpace (dSimpleSpace &); + void operator= (dSimpleSpace &); + +public: + dSimpleSpace (dSpaceID space) + { _id = (dGeomID) dSimpleSpaceCreate (space); } +}; + + +class dHashSpace : public dSpace { + // intentionally undefined, don't use these + dHashSpace (dHashSpace &); + void operator= (dHashSpace &); + +public: + dHashSpace (dSpaceID space) + { _id = (dGeomID) dHashSpaceCreate (space); } + void setLevels (int minlevel, int maxlevel) + { dHashSpaceSetLevels (id(),minlevel,maxlevel); } +}; + + +class dQuadTreeSpace : public dSpace { + // intentionally undefined, don't use these + dQuadTreeSpace (dQuadTreeSpace &); + void operator= (dQuadTreeSpace &); + +public: + dQuadTreeSpace (dSpaceID space, dVector3 center, dVector3 extents, int depth) + { _id = (dGeomID) dQuadTreeSpaceCreate (space,center,extents,depth); } +}; + + +class dSphere : public dGeom { + // intentionally undefined, don't use these + dSphere (dSphere &); + void operator= (dSphere &); + +public: + dSphere () { } + dSphere (dSpaceID space, dReal radius) + { _id = dCreateSphere (space, radius); } + + void create (dSpaceID space, dReal radius) { + if (_id) dGeomDestroy (_id); + _id = dCreateSphere (space, radius); + } + + void setRadius (dReal radius) + { dGeomSphereSetRadius (_id, radius); } + dReal getRadius() const + { return dGeomSphereGetRadius (_id); } +}; + + +class dBox : public dGeom { + // intentionally undefined, don't use these + dBox (dBox &); + void operator= (dBox &); + +public: + dBox () { } + dBox (dSpaceID space, dReal lx, dReal ly, dReal lz) + { _id = dCreateBox (space,lx,ly,lz); } + + void create (dSpaceID space, dReal lx, dReal ly, dReal lz) { + if (_id) dGeomDestroy (_id); + _id = dCreateBox (space,lx,ly,lz); + } + + void setLengths (dReal lx, dReal ly, dReal lz) + { dGeomBoxSetLengths (_id, lx, ly, lz); } + void getLengths (dVector3 result) const + { dGeomBoxGetLengths (_id,result); } +}; + + +class dPlane : public dGeom { + // intentionally undefined, don't use these + dPlane (dPlane &); + void operator= (dPlane &); + +public: + dPlane() { } + dPlane (dSpaceID space, dReal a, dReal b, dReal c, dReal d) + { _id = dCreatePlane (space,a,b,c,d); } + + void create (dSpaceID space, dReal a, dReal b, dReal c, dReal d) { + if (_id) dGeomDestroy (_id); + _id = dCreatePlane (space,a,b,c,d); + } + + void setParams (dReal a, dReal b, dReal c, dReal d) + { dGeomPlaneSetParams (_id, a, b, c, d); } + void getParams (dVector4 result) const + { dGeomPlaneGetParams (_id,result); } +}; + + +class dCapsule : public dGeom { + // intentionally undefined, don't use these + dCapsule (dCapsule &); + void operator= (dCapsule &); + +public: + dCapsule() { } + dCapsule (dSpaceID space, dReal radius, dReal length) + { _id = dCreateCapsule (space,radius,length); } + + void create (dSpaceID space, dReal radius, dReal length) { + if (_id) dGeomDestroy (_id); + _id = dCreateCapsule (space,radius,length); + } + + void setParams (dReal radius, dReal length) + { dGeomCapsuleSetParams (_id, radius, length); } + void getParams (dReal *radius, dReal *length) const + { dGeomCapsuleGetParams (_id,radius,length); } +}; + + +class dRay : public dGeom { + // intentionally undefined, don't use these + dRay (dRay &); + void operator= (dRay &); + +public: + dRay() { } + dRay (dSpaceID space, dReal length) + { _id = dCreateRay (space,length); } + + void create (dSpaceID space, dReal length) { + if (_id) dGeomDestroy (_id); + _id = dCreateRay (space,length); + } + + void setLength (dReal length) + { dGeomRaySetLength (_id, length); } + dReal getLength() + { return dGeomRayGetLength (_id); } + + void set (dReal px, dReal py, dReal pz, dReal dx, dReal dy, dReal dz) + { dGeomRaySet (_id, px, py, pz, dx, dy, dz); } + void get (dVector3 start, dVector3 dir) + { dGeomRayGet (_id, start, dir); } + + void setParams (int firstContact, int backfaceCull) + { dGeomRaySetParams (_id, firstContact, backfaceCull); } + void getParams (int *firstContact, int *backfaceCull) + { dGeomRayGetParams (_id, firstContact, backfaceCull); } + void setClosestHit (int closestHit) + { dGeomRaySetClosestHit (_id, closestHit); } + int getClosestHit() + { return dGeomRayGetClosestHit (_id); } +}; + + +class dGeomTransform : public dGeom { + // intentionally undefined, don't use these + dGeomTransform (dGeomTransform &); + void operator= (dGeomTransform &); + +public: + dGeomTransform() { } + dGeomTransform (dSpaceID space) + { _id = dCreateGeomTransform (space); } + + void create (dSpaceID space=0) { + if (_id) dGeomDestroy (_id); + _id = dCreateGeomTransform (space); + } + + void setGeom (dGeomID geom) + { dGeomTransformSetGeom (_id, geom); } + dGeomID getGeom() const + { return dGeomTransformGetGeom (_id); } + + void setCleanup (int mode) + { dGeomTransformSetCleanup (_id,mode); } + int getCleanup () + { return dGeomTransformGetCleanup (_id); } + + void setInfo (int mode) + { dGeomTransformSetInfo (_id,mode); } + int getInfo() + { return dGeomTransformGetInfo (_id); } +}; + + +#endif +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/odecpp_old.h b/misc/builddeps/emscripten/ode/include/ode/odecpp_old.h new file mode 100644 index 00000000..49e7d7f3 --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/odecpp_old.h @@ -0,0 +1,316 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +/* this is the old C++ interface, the new C++ interface is not quite + * compatible with this. but this file is kept around in case you were + * using the old interface. + */ + +#ifndef _ODE_ODECPP_H_ +#define _ODE_ODECPP_H_ +#ifdef __cplusplus + +#include + + +class dWorld { + dWorldID _id; + + dWorld (dWorld &) { dDebug (0,"bad"); } + void operator= (dWorld &) { dDebug (0,"bad"); } + +public: + dWorld() + { _id = dWorldCreate(); } + ~dWorld() + { dWorldDestroy (_id); } + dWorldID id() + { return _id; } + + void setGravity (dReal x, dReal y, dReal z) + { dWorldSetGravity (_id,x,y,z); } + void getGravity (dVector3 g) + { dWorldGetGravity (_id,g); } + void step (dReal stepsize) + { dWorldStep (_id,stepsize); } +}; + + +class dBody { + dBodyID _id; + + dBody (dBody &) { dDebug (0,"bad"); } + void operator= (dBody &) { dDebug (0,"bad"); } + +public: + dBody() + { _id = 0; } + dBody (dWorld &world) + { _id = dBodyCreate (world.id()); } + ~dBody() + { dBodyDestroy (_id); } + void create (dWorld &world) + { if (_id) dBodyDestroy (_id); _id = dBodyCreate (world.id()); } + dBodyID id() + { return _id; } + + void setData (void *data) + { dBodySetData (_id,data); } + void *getData() + { return dBodyGetData (_id); } + + void setPosition (dReal x, dReal y, dReal z) + { dBodySetPosition (_id,x,y,z); } + void setRotation (const dMatrix3 R) + { dBodySetRotation (_id,R); } + void setQuaternion (const dQuaternion q) + { dBodySetQuaternion (_id,q); } + void setLinearVel (dReal x, dReal y, dReal z) + { dBodySetLinearVel (_id,x,y,z); } + void setAngularVel (dReal x, dReal y, dReal z) + { dBodySetAngularVel (_id,x,y,z); } + + const dReal * getPosition() + { return dBodyGetPosition (_id); } + const dReal * getRotation() + { return dBodyGetRotation (_id); } + const dReal * getQuaternion() + { return dBodyGetQuaternion (_id); } + const dReal * getLinearVel() + { return dBodyGetLinearVel (_id); } + const dReal * getAngularVel() + { return dBodyGetAngularVel (_id); } + + void setMass (const dMass *mass) + { dBodySetMass (_id,mass); } + void getMass (dMass *mass) + { dBodyGetMass (_id,mass); } + + void addForce (dReal fx, dReal fy, dReal fz) + { dBodyAddForce (_id, fx, fy, fz); } + void addTorque (dReal fx, dReal fy, dReal fz) + { dBodyAddTorque (_id, fx, fy, fz); } + void addRelForce (dReal fx, dReal fy, dReal fz) + { dBodyAddRelForce (_id, fx, fy, fz); } + void addRelTorque (dReal fx, dReal fy, dReal fz) + { dBodyAddRelTorque (_id, fx, fy, fz); } + void addForceAtPos (dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz) + { dBodyAddForceAtPos (_id, fx, fy, fz, px, py, pz); } + void addRelForceAtPos (dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz) + { dBodyAddRelForceAtPos (_id, fx, fy, fz, px, py, pz); } + void addRelForceAtRelPos (dReal fx, dReal fy, dReal fz, + dReal px, dReal py, dReal pz) + { dBodyAddRelForceAtRelPos (_id, fx, fy, fz, px, py, pz); } + + void getRelPointPos (dReal px, dReal py, dReal pz, dVector3 result) + { dBodyGetRelPointPos (_id, px, py, pz, result); } + void getRelPointVel (dReal px, dReal py, dReal pz, dVector3 result) + { dBodyGetRelPointVel (_id, px, py, pz, result); } + + int isConnectedTo (const dBody &b) + { return dAreConnected (_id,b._id); } +}; + + +class dJointGroup { + dJointGroupID _id; + + dJointGroup (dJointGroup &) { dDebug (0,"bad"); } + void operator= (dJointGroup &) { dDebug (0,"bad"); } + +public: + dJointGroup() + { _id = 0; } + dJointGroup (int max_size) + { _id = dJointGroupCreate (max_size); } + ~dJointGroup() + { dJointGroupDestroy (_id); } + void create (int max_size) + { if (_id) dJointGroupDestroy (_id); _id = dJointGroupCreate (max_size); } + dJointGroupID id() + { return _id; } + + void empty() + { dJointGroupEmpty (_id); } +}; + + +class dJoint { + dJointID _id; + + dJoint (dJoint &) { dDebug (0,"bad"); } + void operator= (dJoint &) { dDebug (0,"bad"); } + +public: + dJoint() + { _id = 0; } + ~dJoint() + { dJointDestroy (_id); } + dJointID id() + { return _id; } + + void createBall (dWorld &world, dJointGroup *group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateBall (world.id(), group ? group->id() : 0); + } + void createHinge (dWorld &world, dJointGroup *group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateHinge (world.id(), group ? group->id() : 0); + } + void createSlider (dWorld &world, dJointGroup *group=0) { + if (_id) dJointDestroy (_id); + _id = dJointCreateSlider (world.id(), group ? group->id() : 0); + } + void createContact (dWorld &world, dJointGroup *group, dContact *contact) { + if (_id) dJointDestroy (_id); + _id = dJointCreateContact (world.id(), group ? group->id() : 0, contact); + } + + void attach (dBody &body1, dBody &body2) + { dJointAttach (_id, body1.id(), body2.id()); } + + void setBallAnchor (dReal x, dReal y, dReal z) + { dJointSetBallAnchor (_id, x, y, z); } + void setHingeAnchor (dReal x, dReal y, dReal z) + { dJointSetHingeAnchor (_id, x, y, z); } + + void setHingeAxis (dReal x, dReal y, dReal z) + { dJointSetHingeAxis (_id, x, y, z); } + void setSliderAxis (dReal x, dReal y, dReal z) + { dJointSetSliderAxis (_id, x, y, z); } + + void getBallAnchor (dVector3 result) + { dJointGetBallAnchor (_id, result); } + void getHingeAnchor (dVector3 result) + { dJointGetHingeAnchor (_id, result); } + + void getHingeAxis (dVector3 result) + { dJointGetHingeAxis (_id, result); } + void getSliderAxis (dVector3 result) + { dJointGetSliderAxis (_id, result); } +}; + + +class dSpace { + dSpaceID _id; + + dSpace (dSpace &) { dDebug (0,"bad"); } + void operator= (dSpace &) { dDebug (0,"bad"); } + +public: + dSpace () + { _id = dHashSpaceCreate(); } + ~dSpace() + { dSpaceDestroy (_id); } + dSpaceID id() + { return _id; } + void collide (void *data, dNearCallback *callback) + { dSpaceCollide (_id,data,callback); } +}; + + +class dGeom { + dGeomID _id; + + dGeom (dGeom &) { dDebug (0,"bad"); } + void operator= (dGeom &) { dDebug (0,"bad"); } + +public: + dGeom() + { _id = 0; } + ~dGeom() + { dGeomDestroy (_id); } + dGeomID id() + { return _id; } + + void createSphere (dSpace &space, dReal radius) { + if (_id) dGeomDestroy (_id); + _id = dCreateSphere (space.id(),radius); + } + + void createBox (dSpace &space, dReal lx, dReal ly, dReal lz) { + if (_id) dGeomDestroy (_id); + _id = dCreateBox (space.id(),lx,ly,lz); + } + + void createPlane (dSpace &space, dReal a, dReal b, dReal c, dReal d) { + if (_id) dGeomDestroy (_id); + _id = dCreatePlane (space.id(),a,b,c,d); + } + + void createCCylinder (dSpace &space, dReal radius, dReal length) { + if (_id) dGeomDestroy (_id); + _id = dCreateCCylinder (space.id(),radius,length); + } + + void destroy() { + if (_id) dGeomDestroy (_id); + _id = 0; + } + + int getClass() + { return dGeomGetClass (_id); } + + dReal sphereGetRadius() + { return dGeomSphereGetRadius (_id); } + + void boxGetLengths (dVector3 result) + { dGeomBoxGetLengths (_id,result); } + + void planeGetParams (dVector4 result) + { dGeomPlaneGetParams (_id,result); } + + void CCylinderGetParams (dReal *radius, dReal *length) + { dGeomCCylinderGetParams (_id,radius,length); } + + void setData (void *data) + { dGeomSetData (_id,data); } + + void *getData() + { return dGeomGetData (_id); } + + void setBody (dBody &b) + { dGeomSetBody (_id,b.id()); } + void setBody (dBodyID b) + { dGeomSetBody (_id,b); } + + dBodyID getBody() + { return dGeomGetBody (_id); } + + void setPosition (dReal x, dReal y, dReal z) + { dGeomSetPosition (_id,x,y,z); } + + void setRotation (const dMatrix3 R) + { dGeomSetRotation (_id,R); } + + const dReal * getPosition() + { return dGeomGetPosition (_id); } + + const dReal * getRotation() + { return dGeomGetRotation (_id); } +}; + + +#endif +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/odemath.h b/misc/builddeps/emscripten/ode/include/ode/odemath.h new file mode 100644 index 00000000..1db0604d --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/odemath.h @@ -0,0 +1,308 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_ODEMATH_H_ +#define _ODE_ODEMATH_H_ + +#include + +#ifdef __GNUC__ +#define PURE_INLINE extern inline +#else +#define PURE_INLINE inline +#endif + +/* + * macro to access elements i,j in an NxM matrix A, independent of the + * matrix storage convention. + */ +#define dACCESS33(A,i,j) ((A)[(i)*4+(j)]) + +/* + * Macro to test for valid floating point values + */ +#define dVALIDVEC3(v) (!(dIsNan(v[0]) || dIsNan(v[1]) || dIsNan(v[2]))) +#define dVALIDVEC4(v) (!(dIsNan(v[0]) || dIsNan(v[2]) || dIsNan(v[2]) || dIsNan(v[3]))) +#define dVALIDMAT3(m) (!(dIsNan(m[0]) || dIsNan(m[1]) || dIsNan(m[2]) || dIsNan(m[3]) || dIsNan(m[4]) || dIsNan(m[5]) || dIsNan(m[6]) || dIsNan(m[7]) || dIsNan(m[8]) || dIsNan(m[9]) || dIsNan(m[10]) || dIsNan(m[11]))) +#define dVALIDMAT4(m) (!(dIsNan(m[0]) || dIsNan(m[1]) || dIsNan(m[2]) || dIsNan(m[3]) || dIsNan(m[4]) || dIsNan(m[5]) || dIsNan(m[6]) || dIsNan(m[7]) || dIsNan(m[8]) || dIsNan(m[9]) || dIsNan(m[10]) || dIsNan(m[11]) || dIsNan(m[12]) || dIsNan(m[13]) || dIsNan(m[14]) || dIsNan(m[15]) )) + + + +/* + * General purpose vector operations with other vectors or constants. + */ + +#define dOP(a,op,b,c) \ + (a)[0] = ((b)[0]) op ((c)[0]); \ + (a)[1] = ((b)[1]) op ((c)[1]); \ + (a)[2] = ((b)[2]) op ((c)[2]); +#define dOPC(a,op,b,c) \ + (a)[0] = ((b)[0]) op (c); \ + (a)[1] = ((b)[1]) op (c); \ + (a)[2] = ((b)[2]) op (c); +#define dOPE(a,op,b) \ + (a)[0] op ((b)[0]); \ + (a)[1] op ((b)[1]); \ + (a)[2] op ((b)[2]); +#define dOPEC(a,op,c) \ + (a)[0] op (c); \ + (a)[1] op (c); \ + (a)[2] op (c); + + +/* + * Length, and squared length helpers. dLENGTH returns the length of a dVector3. + * dLENGTHSQUARED return the squared length of a dVector3. + */ + +#define dLENGTHSQUARED(a) (((a)[0])*((a)[0]) + ((a)[1])*((a)[1]) + ((a)[2])*((a)[2])) + +#ifdef __cplusplus + +PURE_INLINE dReal dLENGTH (const dReal *a) { return dSqrt(dLENGTHSQUARED(a)); } + +#else + +#define dLENGTH(a) ( dSqrt( ((a)[0])*((a)[0]) + ((a)[1])*((a)[1]) + ((a)[2])*((a)[2]) ) ) + +#endif /* __cplusplus */ + + + + + +/* + * 3-way dot product. dDOTpq means that elements of `a' and `b' are spaced + * p and q indexes apart respectively. dDOT() means dDOT11. + * in C++ we could use function templates to get all the versions of these + * functions - but on some compilers this will result in sub-optimal code. + */ + +#define dDOTpq(a,b,p,q) ((a)[0]*(b)[0] + (a)[p]*(b)[q] + (a)[2*(p)]*(b)[2*(q)]) + +#ifdef __cplusplus + +PURE_INLINE dReal dDOT (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,1); } +PURE_INLINE dReal dDOT13 (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,3); } +PURE_INLINE dReal dDOT31 (const dReal *a, const dReal *b) { return dDOTpq(a,b,3,1); } +PURE_INLINE dReal dDOT33 (const dReal *a, const dReal *b) { return dDOTpq(a,b,3,3); } +PURE_INLINE dReal dDOT14 (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,4); } +PURE_INLINE dReal dDOT41 (const dReal *a, const dReal *b) { return dDOTpq(a,b,4,1); } +PURE_INLINE dReal dDOT44 (const dReal *a, const dReal *b) { return dDOTpq(a,b,4,4); } + +#else + +#define dDOT(a,b) dDOTpq(a,b,1,1) +#define dDOT13(a,b) dDOTpq(a,b,1,3) +#define dDOT31(a,b) dDOTpq(a,b,3,1) +#define dDOT33(a,b) dDOTpq(a,b,3,3) +#define dDOT14(a,b) dDOTpq(a,b,1,4) +#define dDOT41(a,b) dDOTpq(a,b,4,1) +#define dDOT44(a,b) dDOTpq(a,b,4,4) + +#endif /* __cplusplus */ + + +/* + * cross product, set a = b x c. dCROSSpqr means that elements of `a', `b' + * and `c' are spaced p, q and r indexes apart respectively. + * dCROSS() means dCROSS111. `op' is normally `=', but you can set it to + * +=, -= etc to get other effects. + */ + +#define dCROSS(a,op,b,c) \ +do { \ + (a)[0] op ((b)[1]*(c)[2] - (b)[2]*(c)[1]); \ + (a)[1] op ((b)[2]*(c)[0] - (b)[0]*(c)[2]); \ + (a)[2] op ((b)[0]*(c)[1] - (b)[1]*(c)[0]); \ +} while(0) +#define dCROSSpqr(a,op,b,c,p,q,r) \ +do { \ + (a)[ 0] op ((b)[ q]*(c)[2*r] - (b)[2*q]*(c)[ r]); \ + (a)[ p] op ((b)[2*q]*(c)[ 0] - (b)[ 0]*(c)[2*r]); \ + (a)[2*p] op ((b)[ 0]*(c)[ r] - (b)[ q]*(c)[ 0]); \ +} while(0) +#define dCROSS114(a,op,b,c) dCROSSpqr(a,op,b,c,1,1,4) +#define dCROSS141(a,op,b,c) dCROSSpqr(a,op,b,c,1,4,1) +#define dCROSS144(a,op,b,c) dCROSSpqr(a,op,b,c,1,4,4) +#define dCROSS411(a,op,b,c) dCROSSpqr(a,op,b,c,4,1,1) +#define dCROSS414(a,op,b,c) dCROSSpqr(a,op,b,c,4,1,4) +#define dCROSS441(a,op,b,c) dCROSSpqr(a,op,b,c,4,4,1) +#define dCROSS444(a,op,b,c) dCROSSpqr(a,op,b,c,4,4,4) + + +/* + * set a 3x3 submatrix of A to a matrix such that submatrix(A)*b = a x b. + * A is stored by rows, and has `skip' elements per row. the matrix is + * assumed to be already zero, so this does not write zero elements! + * if (plus,minus) is (+,-) then a positive version will be written. + * if (plus,minus) is (-,+) then a negative version will be written. + */ + +#define dCROSSMAT(A,a,skip,plus,minus) \ +do { \ + (A)[1] = minus (a)[2]; \ + (A)[2] = plus (a)[1]; \ + (A)[(skip)+0] = plus (a)[2]; \ + (A)[(skip)+2] = minus (a)[0]; \ + (A)[2*(skip)+0] = minus (a)[1]; \ + (A)[2*(skip)+1] = plus (a)[0]; \ +} while(0) + + +/* + * compute the distance between two 3D-vectors + */ + +#ifdef __cplusplus +PURE_INLINE dReal dDISTANCE (const dVector3 a, const dVector3 b) + { return dSqrt( (a[0]-b[0])*(a[0]-b[0]) + (a[1]-b[1])*(a[1]-b[1]) + (a[2]-b[2])*(a[2]-b[2]) ); } +#else +#define dDISTANCE(a,b) \ + (dSqrt( ((a)[0]-(b)[0])*((a)[0]-(b)[0]) + ((a)[1]-(b)[1])*((a)[1]-(b)[1]) + ((a)[2]-(b)[2])*((a)[2]-(b)[2]) )) +#endif + + +/* + * special case matrix multipication, with operator selection + */ + +#define dMULTIPLYOP0_331(A,op,B,C) \ +do { \ + (A)[0] op dDOT((B),(C)); \ + (A)[1] op dDOT((B+4),(C)); \ + (A)[2] op dDOT((B+8),(C)); \ +} while(0) +#define dMULTIPLYOP1_331(A,op,B,C) \ +do { \ + (A)[0] op dDOT41((B),(C)); \ + (A)[1] op dDOT41((B+1),(C)); \ + (A)[2] op dDOT41((B+2),(C)); \ +} while(0) +#define dMULTIPLYOP0_133(A,op,B,C) \ +do { \ + (A)[0] op dDOT14((B),(C)); \ + (A)[1] op dDOT14((B),(C+1)); \ + (A)[2] op dDOT14((B),(C+2)); \ +} while(0) +#define dMULTIPLYOP0_333(A,op,B,C) \ +do { \ + (A)[0] op dDOT14((B),(C)); \ + (A)[1] op dDOT14((B),(C+1)); \ + (A)[2] op dDOT14((B),(C+2)); \ + (A)[4] op dDOT14((B+4),(C)); \ + (A)[5] op dDOT14((B+4),(C+1)); \ + (A)[6] op dDOT14((B+4),(C+2)); \ + (A)[8] op dDOT14((B+8),(C)); \ + (A)[9] op dDOT14((B+8),(C+1)); \ + (A)[10] op dDOT14((B+8),(C+2)); \ +} while(0) +#define dMULTIPLYOP1_333(A,op,B,C) \ +do { \ + (A)[0] op dDOT44((B),(C)); \ + (A)[1] op dDOT44((B),(C+1)); \ + (A)[2] op dDOT44((B),(C+2)); \ + (A)[4] op dDOT44((B+1),(C)); \ + (A)[5] op dDOT44((B+1),(C+1)); \ + (A)[6] op dDOT44((B+1),(C+2)); \ + (A)[8] op dDOT44((B+2),(C)); \ + (A)[9] op dDOT44((B+2),(C+1)); \ + (A)[10] op dDOT44((B+2),(C+2)); \ +} while(0) +#define dMULTIPLYOP2_333(A,op,B,C) \ +do { \ + (A)[0] op dDOT((B),(C)); \ + (A)[1] op dDOT((B),(C+4)); \ + (A)[2] op dDOT((B),(C+8)); \ + (A)[4] op dDOT((B+4),(C)); \ + (A)[5] op dDOT((B+4),(C+4)); \ + (A)[6] op dDOT((B+4),(C+8)); \ + (A)[8] op dDOT((B+8),(C)); \ + (A)[9] op dDOT((B+8),(C+4)); \ + (A)[10] op dDOT((B+8),(C+8)); \ +} while(0) + +#ifdef __cplusplus + +#define DECL template PURE_INLINE void + +DECL dMULTIPLY0_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_331(A,=,B,C); } +DECL dMULTIPLY1_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_331(A,=,B,C); } +DECL dMULTIPLY0_133(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_133(A,=,B,C); } +DECL dMULTIPLY0_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_333(A,=,B,C); } +DECL dMULTIPLY1_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_333(A,=,B,C); } +DECL dMULTIPLY2_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP2_333(A,=,B,C); } + +DECL dMULTIPLYADD0_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_331(A,+=,B,C); } +DECL dMULTIPLYADD1_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_331(A,+=,B,C); } +DECL dMULTIPLYADD0_133(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_133(A,+=,B,C); } +DECL dMULTIPLYADD0_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_333(A,+=,B,C); } +DECL dMULTIPLYADD1_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_333(A,+=,B,C); } +DECL dMULTIPLYADD2_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP2_333(A,+=,B,C); } + +#undef DECL + +#else + +#define dMULTIPLY0_331(A,B,C) dMULTIPLYOP0_331(A,=,B,C) +#define dMULTIPLY1_331(A,B,C) dMULTIPLYOP1_331(A,=,B,C) +#define dMULTIPLY0_133(A,B,C) dMULTIPLYOP0_133(A,=,B,C) +#define dMULTIPLY0_333(A,B,C) dMULTIPLYOP0_333(A,=,B,C) +#define dMULTIPLY1_333(A,B,C) dMULTIPLYOP1_333(A,=,B,C) +#define dMULTIPLY2_333(A,B,C) dMULTIPLYOP2_333(A,=,B,C) + +#define dMULTIPLYADD0_331(A,B,C) dMULTIPLYOP0_331(A,+=,B,C) +#define dMULTIPLYADD1_331(A,B,C) dMULTIPLYOP1_331(A,+=,B,C) +#define dMULTIPLYADD0_133(A,B,C) dMULTIPLYOP0_133(A,+=,B,C) +#define dMULTIPLYADD0_333(A,B,C) dMULTIPLYOP0_333(A,+=,B,C) +#define dMULTIPLYADD1_333(A,B,C) dMULTIPLYOP1_333(A,+=,B,C) +#define dMULTIPLYADD2_333(A,B,C) dMULTIPLYOP2_333(A,+=,B,C) + +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * normalize 3x1 and 4x1 vectors (i.e. scale them to unit length) + */ +ODE_API void dNormalize3 (dVector3 a); +ODE_API void dNormalize4 (dVector4 a); + + +/* + * given a unit length "normal" vector n, generate vectors p and q vectors + * that are an orthonormal basis for the plane space perpendicular to n. + * i.e. this makes p,q such that n,p,q are all perpendicular to each other. + * q will equal n x p. if n is not unit length then p will be unit length but + * q wont be. + */ + +ODE_API void dPlaneSpace (const dVector3 n, dVector3 p, dVector3 q); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/rotation.h b/misc/builddeps/emscripten/ode/include/ode/rotation.h new file mode 100644 index 00000000..a72be27f --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/rotation.h @@ -0,0 +1,70 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_ROTATION_H_ +#define _ODE_ROTATION_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +ODE_API void dRSetIdentity (dMatrix3 R); + +ODE_API void dRFromAxisAndAngle (dMatrix3 R, dReal ax, dReal ay, dReal az, + dReal angle); + +ODE_API void dRFromEulerAngles (dMatrix3 R, dReal phi, dReal theta, dReal psi); + +ODE_API void dRFrom2Axes (dMatrix3 R, dReal ax, dReal ay, dReal az, + dReal bx, dReal by, dReal bz); + +ODE_API void dRFromZAxis (dMatrix3 R, dReal ax, dReal ay, dReal az); + +ODE_API void dQSetIdentity (dQuaternion q); + +ODE_API void dQFromAxisAndAngle (dQuaternion q, dReal ax, dReal ay, dReal az, + dReal angle); + +/* Quaternion multiplication, analogous to the matrix multiplication routines. */ +/* qa = rotate by qc, then qb */ +ODE_API void dQMultiply0 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc); +/* qa = rotate by qc, then by inverse of qb */ +ODE_API void dQMultiply1 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc); +/* qa = rotate by inverse of qc, then by qb */ +ODE_API void dQMultiply2 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc); +/* qa = rotate by inverse of qc, then by inverse of qb */ +ODE_API void dQMultiply3 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc); + +ODE_API void dRfromQ (dMatrix3 R, const dQuaternion q); +ODE_API void dQfromR (dQuaternion q, const dMatrix3 R); +ODE_API void dDQfromW (dReal dq[4], const dVector3 w, const dQuaternion q); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/include/ode/timer.h b/misc/builddeps/emscripten/ode/include/ode/timer.h new file mode 100644 index 00000000..c3f42a7a --- /dev/null +++ b/misc/builddeps/emscripten/ode/include/ode/timer.h @@ -0,0 +1,76 @@ +/************************************************************************* + * * + * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * + * All rights reserved. Email: russ@q12.org Web: www.q12.org * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of EITHER: * + * (1) The GNU Lesser General Public License as published by the Free * + * Software Foundation; either version 2.1 of the License, or (at * + * your option) any later version. The text of the GNU Lesser * + * General Public License is included with this library in the * + * file LICENSE.TXT. * + * (2) The BSD-style license that is included with this library in * + * the file LICENSE-BSD.TXT. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * + * LICENSE.TXT and LICENSE-BSD.TXT for more details. * + * * + *************************************************************************/ + +#ifndef _ODE_TIMER_H_ +#define _ODE_TIMER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* stop watch objects */ + +typedef struct dStopwatch { + double time; /* total clock count */ + unsigned long cc[2]; /* clock count since last `start' */ +} dStopwatch; + +ODE_API void dStopwatchReset (dStopwatch *); +ODE_API void dStopwatchStart (dStopwatch *); +ODE_API void dStopwatchStop (dStopwatch *); +ODE_API double dStopwatchTime (dStopwatch *); /* returns total time in secs */ + + +/* code timers */ + +ODE_API void dTimerStart (const char *description); /* pass a static string here */ +ODE_API void dTimerNow (const char *description); /* pass a static string here */ +ODE_API void dTimerEnd(void); + +/* print out a timer report. if `average' is nonzero, print out the average + * time for each slot (this is only meaningful if the same start-now-end + * calls are being made repeatedly. + */ +ODE_API void dTimerReport (FILE *fout, int average); + + +/* resolution */ + +/* returns the timer ticks per second implied by the timing hardware or API. + * the actual timer resolution may not be this great. + */ +ODE_API double dTimerTicksPerSecond(void); + +/* returns an estimate of the actual timer resolution, in seconds. this may + * be greater than 1/ticks_per_second. + */ +ODE_API double dTimerResolution(void); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/misc/builddeps/emscripten/ode/lib/libode.a b/misc/builddeps/emscripten/ode/lib/libode.a new file mode 100644 index 00000000..00b980be --- /dev/null +++ b/misc/builddeps/emscripten/ode/lib/libode.a @@ -0,0 +1 @@ +var Module=typeof Module!="undefined"?Module:{};var ODE=function(){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;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(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,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[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(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)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.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;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var 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;callRuntimeCallbacks(__ATINIT__)}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 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);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="data:application/octet-stream;base64,AGFzbQEAAAAB7QM8YAJ/fwBgAX8AYAF/AX9gBX9/f39/AX9gA39/fwBgA39/fwF/YAR/f39/AGACf38Bf2AEf319fQBgAX8BfWADf39/AX1gBX9/f39/AGACf30AYAV/f39/fwF9YAR/f39/AX9gA39/fQBgAn9/AX1gBH99fX0BfWAHf319fX19fQBgAAF/YAV/fX19fQBgBn9/f39/fwBgAABgA399fQBgBX99f319AGADf35/AX5gB39/f39/f38Bf2AGf39/f399AGABfQF9YAN/fX0Bf2AIf39/f39/f38AYAd/f39/f39/AGAFf319fX8AYAJ/fQF/YAF8AX1gAnx/AXxgBn98f39/fwF/YAR/fX19AX9gCH9/f399f39/AX9gCX9/f39/f39/fwF/YAd/f39/f399AGAFf39/fX0Bf2APf39/fX19fX19fX1/f39/AX9gCX9/f39/f399fwBgBX99f31/AX9gC39/f319f399fX1/AGAGf39/f39/AX9gBn99fX1/fwBgBH9/f38BfWAGf39/fX19AGAOf39/f39/f39/f39/f38AYAt/fX19fX19fX19fQBgBn9/fX19fQF/YAV/fX19fQF/YAV/f31/fwF/YAN/fX8AYAJ9fQF9YAJ9fwF/YAJ9fwF9YAJ+fwF/AqoBBgNlbnYFYWJvcnQAFgNlbnYUZW1zY3JpcHRlbl9tZW1jcHlfanMABBZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxCGZkX2Nsb3NlAAIWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF93cml0ZQAOA2VudhZlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwAAIWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQdmZF9zZWVrAAMDmgSYBBYKBgYGAAQBJQgAEQMDAQEdFwQRAwMDAwEFAwADAyYDGicDCwMBBQMCAQUBAAIIAAICAAACAgQBAQcAAAABBAYGBAYCAgQEAQACAAAEAQIBAgEBAQMCAAIAAh4TAR4fAQEBAQEBAQEBAQIBAQMDCygDBQMDAwMAKhorBQQsBQMDAwMDAwEdBAYEBAIKAQIBEy0XAQUDAy4ILwABAAALCAgAAA8QCTAJAQAACQkIAA8QAQAABgAACAEICA8AAAAQCQkJAQAACAEICAAAAAAPEAkJCQkJCQEAAAAxAQ8PAAIEBxAQEAIAAQAAAQEAAAAAMgACATMXFxgYDBgYFBQIAAAADwQEAgILCwIAAgEIAAAICAICAgICAAAICAgIEhISEgICICACBwEBAgcFBwcFBwcHBwcBAgEBBAIHBxMBCAAMCQwJDAwADAkMCQEBBDQBNRQAGwYhARIDNgMDAwMBARQUAAgSAQQEBAAEASEMCREDAwMGBhsMNwEBAQAAAgIBAgIBAgECAQcCAgYAAAAAAAAAAAIBBwYHBQQCAQcGBwUEAgEHBQQCAQcFBAICAgICAQECAAAAAAAAAAAOBgAAAAAAAAAADgoNDgIBAAQEBAQfAAAAAAICAgAAAAACAQEAADgcIiI5HAUEBRMCBAIBOiMcAgUZGQIjCxoEAgY7CyQAAgcCAgEAAAIWBQUEBgYGBAsLFRUTAQIDBAUBcADDAQUGAQGABIAEBg0CfwFBkMEFC38BQQALB9ogwQEGbWVtb3J5AgARX193YXNtX2NhbGxfY3RvcnMABgpkQ3JlYXRlQm94AA4SZEdlb21Cb3hTZXRMZW5ndGhzAA8SZEdlb21Cb3hHZXRMZW5ndGhzABAZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEADmRDcmVhdGVDYXBzdWxlABYVZEdlb21DYXBzdWxlU2V0UGFyYW1zABcVZEdlb21DYXBzdWxlR2V0UGFyYW1zABgQZEdlb21HZXRSb3RhdGlvbgA3EGRHZW9tR2V0UG9zaXRpb24ANg1kUlNldElkZW50aXR5AOQCE2RHZW9tUGxhbmVHZXRQYXJhbXMA1wIUZEdlb21TcGhlcmVHZXRSYWRpdXMA8wIMZEdlb21HZXRCb2R5ADMRZEJvZHlHZXRMaW5lYXJWZWwAmgIIZENvbGxpZGUAKglkU3BhY2VBZGQAUAxkU3BhY2VSZW1vdmUAUQxkR2VvbURlc3Ryb3kAMQxkR2VvbVNldEJvZHkAMhBkR2VvbVNldFBvc2l0aW9uADQQZEJvZHlTZXRQb3NpdGlvbgCSAhBkR2VvbVNldFJvdGF0aW9uADUQZEJvZHlTZXRSb3RhdGlvbgCTAhJkQm9keVNldFF1YXRlcm5pb24AlAISZEJvZHlHZXRRdWF0ZXJuaW9uAJkCDGRHZW9tR2V0QUFCQgA5DWRHZW9tR2V0Q2xhc3MAOxJkU2ltcGxlU3BhY2VDcmVhdGUASRBkSGFzaFNwYWNlQ3JlYXRlAEoTZEhhc2hTcGFjZVNldExldmVscwBLE2RIYXNoU3BhY2VHZXRMZXZlbHMATA1kU3BhY2VEZXN0cm95AE0QZFNwYWNlU2V0Q2xlYW51cABOEGRTcGFjZUdldENsZWFudXAATw1kU3BhY2VDb2xsaWRlAFIUZENyZWF0ZUdlb21UcmFuc2Zvcm0AWxVkR2VvbVRyYW5zZm9ybVNldEdlb20AXBVkR2VvbVRyYW5zZm9ybUdldEdlb20AXRhkR2VvbVRyYW5zZm9ybVNldENsZWFudXAAXhhkR2VvbVRyYW5zZm9ybUdldENsZWFudXAAXxZkR2VvbVRyaU1lc2hEYXRhQ3JlYXRlAGEXZEdlb21UcmlNZXNoRGF0YURlc3Ryb3kAYhxkR2VvbVRyaU1lc2hEYXRhQnVpbGRTaW5nbGUxAGMbZEdlb21UcmlNZXNoRGF0YUJ1aWxkU2luZ2xlAGQOZENyZWF0ZVRyaU1lc2gAcg9kQ3JlYXRlQ3lsaW5kZXIAiwEaZEdlb21IZWlnaHRmaWVsZERhdGFDcmVhdGUAlQEhZEdlb21IZWlnaHRmaWVsZERhdGFCdWlsZENhbGxiYWNrAJYBHWRHZW9tSGVpZ2h0ZmllbGREYXRhU2V0Qm91bmRzAJcBG2RHZW9tSGVpZ2h0ZmllbGREYXRhRGVzdHJveQCYARJkQ3JlYXRlSGVpZ2h0ZmllbGQAmQEOZEJvZHlBZGRUb3JxdWUAnwINZEJvZHlBZGRGb3JjZQCeAhNkSm9pbnRTZXRCYWxsQW5jaG9yAJ0BE2RKb2ludEdldEJhbGxBbmNob3IAnwEUZEpvaW50U2V0SGluZ2VBbmNob3IApAESZEpvaW50U2V0SGluZ2VBeGlzAKUBFGRKb2ludEdldEhpbmdlQW5jaG9yAKYBEmRKb2ludEdldEhpbmdlQXhpcwCnARNkSm9pbnRTZXRIaW5nZVBhcmFtAKgBE2RKb2ludEdldEhpbmdlUGFyYW0AqQETZEpvaW50R2V0SGluZ2VBbmdsZQCqARdkSm9pbnRHZXRIaW5nZUFuZ2xlUmF0ZQCsARdkSm9pbnRHZXRTbGlkZXJQb3NpdGlvbgCwARtkSm9pbnRHZXRTbGlkZXJQb3NpdGlvblJhdGUAsQETZEpvaW50U2V0U2xpZGVyQXhpcwCyARNkSm9pbnRHZXRTbGlkZXJBeGlzALMBFGRKb2ludFNldFNsaWRlclBhcmFtALQBFGRKb2ludEdldFNsaWRlclBhcmFtALUBFWRKb2ludFNldEhpbmdlMkFuY2hvcgC8ARRkSm9pbnRTZXRIaW5nZTJBeGlzMQC+ARRkSm9pbnRTZXRIaW5nZTJBeGlzMgC/ARRkSm9pbnRTZXRIaW5nZTJQYXJhbQDAARVkSm9pbnRHZXRIaW5nZTJBbmNob3IAwQEUZEpvaW50R2V0SGluZ2UyQXhpczEAwgEUZEpvaW50R2V0SGluZ2UyQXhpczIAwwEUZEpvaW50R2V0SGluZ2UyUGFyYW0AxAEVZEpvaW50R2V0SGluZ2UyQW5nbGUxAMUBGWRKb2ludEdldEhpbmdlMkFuZ2xlMVJhdGUAxgEZZEpvaW50R2V0SGluZ2UyQW5nbGUyUmF0ZQDHARhkSm9pbnRTZXRVbml2ZXJzYWxBbmNob3IAywELZFJGcm9tMkF4ZXMA6QIXZEpvaW50U2V0VW5pdmVyc2FsQXhpczEAzQEXZEpvaW50U2V0VW5pdmVyc2FsQXhpczIAzgEYZEpvaW50R2V0VW5pdmVyc2FsQW5jaG9yAM8BGWRKb2ludEdldFVuaXZlcnNhbEFuY2hvcjIA0AEXZEpvaW50R2V0VW5pdmVyc2FsQXhpczEA0QEXZEpvaW50R2V0VW5pdmVyc2FsQXhpczIA0gEXZEpvaW50U2V0VW5pdmVyc2FsUGFyYW0A0wEXZEpvaW50R2V0VW5pdmVyc2FsUGFyYW0A1AEYZEpvaW50R2V0VW5pdmVyc2FsQW5nbGUxANUBGGRKb2ludEdldFVuaXZlcnNhbEFuZ2xlMgDYARxkSm9pbnRHZXRVbml2ZXJzYWxBbmdsZTFSYXRlANkBHGRKb2ludEdldFVuaXZlcnNhbEFuZ2xlMlJhdGUA2gEWZEpvaW50U2V0QU1vdG9yTnVtQXhlcwDeARNkSm9pbnRTZXRBTW90b3JBeGlzAN8BFGRKb2ludFNldEFNb3RvckFuZ2xlAOEBFGRKb2ludFNldEFNb3RvclBhcmFtAOIBE2RKb2ludFNldEFNb3Rvck1vZGUA4wEWZEpvaW50R2V0QU1vdG9yTnVtQXhlcwDkARNkSm9pbnRHZXRBTW90b3JBeGlzAOUBFmRKb2ludEdldEFNb3RvckF4aXNSZWwA5gEUZEpvaW50R2V0QU1vdG9yQW5nbGUA5wEYZEpvaW50R2V0QU1vdG9yQW5nbGVSYXRlAOgBFGRKb2ludEdldEFNb3RvclBhcmFtAOkBE2RKb2ludEdldEFNb3Rvck1vZGUA6gEOZEpvaW50U2V0Rml4ZWQA7wEMZE1hc3NTZXRaZXJvAPgBEmRNYXNzU2V0UGFyYW1ldGVycwD5AQ5kTWFzc1NldFNwaGVyZQD6ARNkTWFzc1NldFNwaGVyZVRvdGFsAPsBD2RNYXNzU2V0Q2Fwc3VsZQD8ARRkTWFzc1NldENhcHN1bGVUb3RhbAD9AQtkTWFzc0FkanVzdAD+ARBkTWFzc1NldEN5bGluZGVyAP8BFWRNYXNzU2V0Q3lsaW5kZXJUb3RhbACAAgtkTWFzc1NldEJveACBAhBkTWFzc1NldEJveFRvdGFsAIICDmRNYXNzVHJhbnNsYXRlAIMCC2RNYXNzUm90YXRlAIQCCGRNYXNzQWRkAIUCC2RCb2R5Q3JlYXRlAJACDGRCb2R5RGVzdHJveQCRAhFkQm9keVNldExpbmVhclZlbACVAhJkQm9keVNldEFuZ3VsYXJWZWwAlgIQZEJvZHlHZXRQb3NpdGlvbgCXAhBkQm9keUdldFJvdGF0aW9uAJgCEmRCb2R5R2V0QW5ndWxhclZlbACbAgxkQm9keVNldE1hc3MAnAIMZEJvZHlHZXRNYXNzAJ0CEGRCb2R5QWRkUmVsRm9yY2UAoAIRZEJvZHlBZGRSZWxUb3JxdWUAoQISZEJvZHlBZGRGb3JjZUF0UG9zAKICFWRCb2R5QWRkRm9yY2VBdFJlbFBvcwCjAhVkQm9keUFkZFJlbEZvcmNlQXRQb3MApAIYZEJvZHlBZGRSZWxGb3JjZUF0UmVsUG9zAKUCDWRCb2R5R2V0Rm9yY2UApgIOZEJvZHlHZXRUb3JxdWUApwITZEJvZHlHZXRSZWxQb2ludFBvcwCoAhNkQm9keUdldFJlbFBvaW50VmVsAKkCEWRCb2R5R2V0TnVtSm9pbnRzAKoCDWRCb2R5R2V0Sm9pbnQAqwILZEJvZHlFbmFibGUArAIMZEJvZHlEaXNhYmxlAK0CDmRCb2R5SXNFbmFibGVkAK4CEGRKb2ludENyZWF0ZUJhbGwArwIRZEpvaW50Q3JlYXRlSGluZ2UAsQISZEpvaW50Q3JlYXRlU2xpZGVyALICE2RKb2ludENyZWF0ZUNvbnRhY3QAswISZEpvaW50Q3JlYXRlSGluZ2UyALQCFWRKb2ludENyZWF0ZVVuaXZlcnNhbAC1AhFkSm9pbnRDcmVhdGVGaXhlZAC2AhBkSm9pbnRDcmVhdGVOdWxsALcCEmRKb2ludENyZWF0ZUFNb3RvcgC4Ag1kSm9pbnREZXN0cm95ALkCEWRKb2ludEdyb3VwQ3JlYXRlALoCEmRKb2ludEdyb3VwRGVzdHJveQC7AhBkSm9pbnRHcm91cEVtcHR5ALwCDGRKb2ludEF0dGFjaAC9Ag1kSm9pbnRHZXRUeXBlAL4CDWRKb2ludEdldEJvZHkAvwINZEFyZUNvbm5lY3RlZADAAgxkV29ybGRDcmVhdGUAwQINZFdvcmxkRGVzdHJveQDCAhBkV29ybGRTZXRHcmF2aXR5AMMCEGRXb3JsZEdldEdyYXZpdHkAxAIMZFdvcmxkU2V0RVJQAMUCDGRXb3JsZEdldEVSUADGAgxkV29ybGRTZXRDRk0AxwIMZFdvcmxkR2V0Q0ZNAMgCCmRXb3JsZFN0ZXAAyQIPZFdvcmxkUXVpY2tTdGVwAMoCH2RXb3JsZFNldFF1aWNrU3RlcE51bUl0ZXJhdGlvbnMAywIgZFdvcmxkU2V0Q29udGFjdE1heENvcnJlY3RpbmdWZWwAzAIgZFdvcmxkR2V0Q29udGFjdE1heENvcnJlY3RpbmdWZWwAzQIcZFdvcmxkU2V0Q29udGFjdFN1cmZhY2VMYXllcgDOAhxkV29ybGRHZXRDb250YWN0U3VyZmFjZUxheWVyAM8CDGRDcmVhdGVQbGFuZQDVAhNkR2VvbVBsYW5lU2V0UGFyYW1zANYCEmRSRnJvbUF4aXNBbmRBbmdsZQDlAhJkUUZyb21BeGlzQW5kQW5nbGUA5gIRZFJGcm9tRXVsZXJBbmdsZXMA6AINZFFTZXRJZGVudGl0eQDqAg1kQ3JlYXRlU3BoZXJlAPECFGRHZW9tU3BoZXJlU2V0UmFkaXVzAPICEF9fZXJybm9fbG9jYXRpb24A7wMIc2V0VGhyZXcAjAQJc3RhY2tTYXZlAJoEDHN0YWNrUmVz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IwBBMGsiKiQAAkACQCAAIisoAlhFBEBDAACA/yEXDAELQfSHASgCACEvICsoAlQhMUMAAID/IRcDQCAqICsoAhgiACoCGCA0QQR0IgEgKygCTGoiAyoCCJQgACoCECADKgIAlCAAKgIUIAMqAgSUkpI4AiAgKiAAKgIoIAMqAgiUIAAqAiAgAyoCAJQgACoCJCADKgIElJKSOAIkICogACoCOCADKgIIlCAAKgIwIAMqAgCUIAAqAjQgAyoCBJSSkjgCKCAqQSBqENACICogKygCTCABaioCDCAqKgIoIgogKygCGCIAKgIIlCAqKgIgIgggACoCAJQgKioCJCIJIAAqAgSUkpKSOAIsICogCiArKAJQIiwqAgiUIAggLCoCAJQgCSAsKgIElJKSIgU4AhggKiAFOAIcICsoAlwiLUECTwRAIAAqAjghDiAAKgI0IQ8gACoCMCEQIAAqAighESAAKgIkIRIgACoCICETIAAqAhghFCAAKgIUIRUgACoCCCEWIAAqAgQhCyAAKgIAIQwgACoCECENQQEhAANAICpBHGohAQJAIAogDiAsIABBDGxqIgMqAggiBZQgECADKgIAIgaUIAMqAgQiByAPlJKSIBaSlCAIIBQgBZQgDSAGlCAVIAeUkpIgDJKUIAkgESAFlCATIAaUIAcgEpSSkiALkpSSkiIFICoqAhxdRQRAICpBGGohASAFICoqAhheRQ0BCyABIAU4AgALIABBAWoiACAtRw0ACwsgMCgCGCEAICogCiAwKAJQIiwqAgiUIAggLCoCAJQgCSAsKgIElJKSIgU4AhAgKiAFOAIUIDAoAlwiLUECTwRAIAAqAjghDiAAKgI0IQ8gACoCMCEQIAAqAighESAAKgIkIRIgACoCICETIAAqAhghFCAAKgIUIRUgACoCCCEWIAAqAgQhCyAAKgIAIQwgACoCECENQQEhAANAICpBFGohAQJAIAogDiAsIABBDGxqIgMqAggiBZQgECADKgIAIgaUIAMqAgQiByAPlJKSIBaSlCAIIBQgBZQgDSAGlCAVIAeUkpIgDJKUIAkgESAFlCATIAaUIAcgEpSSkiALkpSSkiIFICoqAhRdRQRAICpBEGohASAFICoqAhBeRQ0BCyABIAU4AgALIABBAWoiACAtRw0ACyAqKgIQIQULICogKioCGCIGICoqAhwi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KgKwASAElCABKgKoASAFlCABKgKsASAGlJKSDAELIAAoAiwiAgRAIAIqAtABIAAqAogBIgSUIAIqAsgBIAAqAoABIgWUIAAqAoQBIgYgAioCzAGUkpIhByACKgLAASAElCACKgK4ASAFlCAGIAIqArwBlJKSIQggAioCsAEgBJQgAioCqAEgBZQgAioCrAEgBpSSkgwBCyAAKgKIASEHIAAqAoQBIQggACoCgAELIQUgByABKgKAApQgBSABKgL4AZQgCCABKgL8AZSSkiIEIAAoAiwiAEUNABogBCAHIAAqAoAClCAFIAAqAvgBlCAIIAAqAvwBlJKSkwshBCADQSBqJAAgBAuIAgICfQF/IABB0ABqQQQQhgIgAEHgAGpBBBCGAiAAQfAAakEEEIYCIABBgICA/AM2AnAgAEGAAWpBBBCGAiAAQYCAgPwDNgKEASAAQZABakEEEIYCIABBoAFqQQQQhgIgAEGAgID8AzYCwAEgAEKAgID8j4CAwP8ANwK4ASAAQgA3ArABIAAgACgCACIDKgIkIgE4AsQBIAAgAyoCICICOALIASAAIAI4AvQBIAAgATgC8AEgACABOAL4ASAAQoCAgPyPgIDA/wA3AuQBIABBADYChAIgAEIANwL8ASAAQYCAgPwDNgLsASAAQQA2AuABIABCADcC2AEgACABOALMASAAQgA3AtABC5UDAgR9A38gAUKEgICAwAA3AgAgACoC6AEiA7tEGC1EVPshCUBlIAAqAuQBIgK7RBgtRFT7IQnAZnIgAiADX3EhByAAKgK0AUMAAAAAXiEGIAAqAuABIQUCQAJAAkAgACoCvAEiA7tEGC1EVPshCUBlIAAqArgBIgK7RBgtRFT7IQnAZnIgAiADX3EiCCAHckUNACAAENcBIQIgABDWASEDAkAgCEUNACACIAAqArgBIgRfBEAgACACIASTOALYAUEBIQYgAEEBNgLUAQwBCyACIAAqArwBIgRgBEAgAEECNgLUASAAIAIgBJM4AtgBQQEhBgwBCyAAQQA2AtQBCyAHRQ0AAkACQCADIAAqAuQBIgJfBEAgAEEBNgKAAgwBCyAAKgLoASICIANfRQ0BIABBAjYCgAILIAAgAyACkzgChAIgASgCACAGaiEADAILIABBADYCgAILIAYEQCABIAEoAgBBAWoiADYCACAFQwAAAABe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QCACIAEoAgBGBEBBACEDDAELA0AgASIDKAIIIgFFDQIgASgCACACRw0ACwsgA0EIaiAEQRRqIAMbIAEoAgg2AgALIAJCADcCLCACQgA3AiAgBg0ACwsgACgCBCICBEAgAiAAKAIINgIICyAAKAIIIAI2AgAgAEIANwIEIAAoAgAiAiACKAIIQQFrNgIIIABB0AIQjwIgBUEQaiQAC18BAX8jAEEQayIEJAAgAEUEQCAEQbYcNgIAQQJB2d8AIAQQjgELIAAgATgCmAEgACADOAKgASAAIAI4ApwBIAAoAhwiAARAA0AgABA9IAAoAhQiAA0ACwsgBEEQaiQAC5kBAQF/IwBBIGsiAiQAIABBACABG0UEQCACQZIdNgIAQQJB2d8AIAIQjgELIAJBEGogARDuAiACQRBqENECIAAgAioCEDgC2AEgACACKgIUOALcASAAIAIqAhg4AuABIAAgAioCHDgC5AEgAEGoAWogAEHYAWoQ5wIgACgCHCIABEADQCAAED0gACgCFCIADQALCyACQSBqJAALjgEBAX8jAEEQayICJAAgAEEAIAEbRQRAIAJB1h02AgBBAkHZ3wAgAhCOAQsgACABKgIAOALYASAAIAEqAgQ4AtwBIAAgASoCCDgC4AEgACABKgIMOALkASAAQdgBaiIBENECIABBqAFqIAEQ5wIgACgCHCIABEADQCAAED0gACgCFCIADQALCyACQRBqJAALRQEBfyMAQRBrIgQkACAARQRAIARBpSE2AgBBAkHZ3wAgBBCOAQsgACABOALoASAAIAM4AvABIAAgAjgC7AEgBEEQaiQAC0UBAX8jAEEQayIEJAAgAEUEQCAEQf8gNgIAQQJB2d8AIAQQjgELIAAgATgC+AEgACADOAKAAiAAIAI4AvwBIARBEGokAAszAQF/IwBBEGsiASQAIABFBEAgAUHYHDYCAEECQdnfACABEI4BCyABQRBqJAAgAEGYAWoLMwEBfyMAQRBrIgEkACAARQRAIAFBtB02AgBBAkHZ3wAgARCOAQsgAUEQaiQAIABBqAFqCzMBAX8jAEEQayIBJAAgAEUEQCABQekdNgIAQQJB2d8AIAEQjgELIAFBEGokACAAQdgBagszAQF/IwBBEGsiASQAIABFBEAgAUG3ITYCAEECQdnfACABEI4BCyABQRBqJAAgAEHoAWoL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jgFBACABQYiOARCwAgshACACQRBqJAAgAAtOAQF/IwBBEGsiAyQAIABBACACG0UEQCADQYgNNgIAQQJB2d8AIAMQjgELIAAgAUGcjgEQsAIiAEHUAGogAkHwABDsAxogA0EQaiQAIAALTAEBfyMAQRBrIgIkAAJ/IAAEQCAAIAFBsI4BELACDAELIAJB5tAANgIAQQJB2d8AIAIQjgFBACABQbCOARCwAgshACACQRBqJAAgAAtLAQF/IwBBEGsiAiQAAn8gAARAIAAgAUHEjgEQsAIMAQsgAkHdIjYCAEECQdnfACACEI4BQQAgAUHEjgEQsAILIQAgAkEQaiQAIAALSwEBfyMAQRBrIgIkAAJ/IAAEQCAAIAFB7I4BELACDAELIAJB1yw2AgBBAkHZ3wAgAhCOAUEAIAFB7I4BELACCyEAIAJBEGokACAAC0sBAX8jAEEQayICJAACfyAABEAgACABQYCPARCwAgwBCyACQckgNgIAQQJB2d8AIAIQjgFBACABQYCPARCwAgshACACQRBqJAAgAAtLAQF/IwBBEGsiAiQAAn8gAARAIAAgAUHYjgEQsAIMAQsgAkGDFDYCAEECQdnfACACEI4BQQAgAUHYjgEQsAILIQAgAkEQaiQAIAALwwIBBX8jAEEQayIEJAAgAEUEQCAEQdwINgIAQQJB2d8AIAQQjgELIAAtABhBAXFFBEACQCAAKAIgIgVFDQAgBSgCFCIBRQ0AAkAgACABKAIARgRADAELIAEhAgNAIAIoAggiAUUNAiACIQMgASECIAEoAgAgAEcNAAsLIANBCGogBUEUaiADGyABKAIINgIACwJAIAAoAiwiA0UNACADKAIUIgFFDQACQCAAIAEoAgBGBEBBACECDAELA0AgASICKAIIIgFFDQIgASgCACAARw0ACwsgAkEIaiADQRRqIAIbIAEoAgg2AgALIABCADcCLCAAQgA3AiAgACgCBCIBBEAgASAAKAIINgIICyAAKAIIIAE2AgAgAEIANwIEIAAoAgAiASABKAIMQQFrNgIMIAAgACgCFCgCABCPAgsgBEEQaiQACyUBAX9BFBCOAiIAQQRqIgFCADcCACABQgA3AgggAEEANgIAIAALaQEDfyMAQRBrIgEkAAJAIABFBEAgAUHqCDYCAEECQdnfACABEI4BQQAQvAIMAQsgABC8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DTgCECAGIAwgC5QiCzgCFCABIAAoAhwgAyAAQQIgCyANXiIEIAZBEGogBEECdGoqAgAgDCAKlF0bIgUgASgCACgCEBENACEKIAAoAiBFDQBBACEDQQAhBANAIAEgBEECdCICIAAoAhxqKAIAIAUgASgCACgCDBEKACAKXgRAIAAoAhwiByACaiICKAIAIQggAiAHIANBAnRqIgcoAgA2AgAgByAINgIAIANBAWohAwsgBEEBaiIEIAAoAiAiAkkNAAsgA0UNASACIANGDQEMAgtBACECCyABKAIEQQFHDQEgASABKAIYQQFqNgIYIAJBAXYhAwsCQCABKAIQIgQEQCAAIAEoAhQiAkEkbCAEakEka0EBciIENgIYDAELQcwAEI0EIgJBAjYCACACQQRqIgQQ/gIgAkEoahD+AiAAIAQ2AhggASgCFCECCyABIAJBAmo2AhQgACgCHCECIARBfnEiASADNgIgIAEgAjYCHCABQSRqQQAgARsiASAAKAIcIANBAnRqNgIcIAEgACgCICADazYCIAsgBkEgaiQAC3EBAX8gASAAKAIcIAAoAiAgACABKAIAKAIIEQ4AGiAAIAEQgAMgACgCGEF+cSIABEADQCAAIAEQgQMgASAAQUBrKAIAIAAoAkQgAEEkaiICIAEoAgAoAggRDgAaIAIgARCAAyAAKAI8QX5xIgANAAsLC60DAQZ/IAAoAigiAwRAAkAgA0EEayIFKAIAIgJFDQAgAkEBa0H/////A3EhBiADIAJBJGxqIQEgAkEHcSIEBEBBACECA0AgAUEkayIBEP8CIAJBAWoiAiAERw0ACwsgBkEHSQ0AA0AgAUEkaxD/AiABQcgAaxD/AiABQewAaxD/AiABQZABaxD/AiABQbQBaxD/AiABQdgBaxD/AiABQfwBaxD/AiABQaACayIBEP8CIAEgA0cNAAsLIAUQigQgAEEANgIoCyAAKAIkIgEEQCABEIoEIABBADYCJAsCQCAAKAIYIgFBAXENACABQX5xIgRFDQACQCAEQQRrIgUoAgAiAkUNACACQQFrQf////8DcSEGIAQgAkEkbGohASACQQdxIgMEQEEAIQIDQCABQSRrIgEQ/wIgAkEBaiICIANHDQALCyAGQQdJDQADQCABQSRrEP8CIAFByABrEP8CIAFB7ABrEP8CIAFBkAFrEP8CIAFB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CAsgAAsNACAAEKYDGiAAEIoEC/UNAw9/Fn0BfiMAQRBrIgokAAJAIAFFDQAgASgCLCIDIAEoAiBBAXRBAWtHDQAgACADNgIEIAAoAggiAgRAIAJBBGsQigQgAEEANgIIIAAoAgQhAwtBf0F/IAOtQhx+IienIgJBBGoiBSACIAVLGyAnQiCIpxsQjQQiCyADNgIAIAtBBGohBwJAIANFDQAgByECIANBHGwiCEEcayIGQRxuQQFqQQdxIgUEQEEAIQMDQCACQQA2AhggAkEcaiECIANBAWoiAyAFRw0ACwsgBkHEAUkNACAHIAhqIQMDQCACQQA2AhggAkEANgLcASACQQA2AsABIAJBADYCpAEgAkEANgKIASACQQA2AmwgAkEANgJQIAJBADYCNCACQeABaiICIANHDQALCyAKQQE2AgxBACEDIAdBACAKQQxqIAEQmwNBfyAAKAIEIgRBBHRBBHIgBEH/////AEsbEI0EIgIgBDYCACACQQRqIQkCQCAERQRAIAAgCTYCCEP//3//IRFD//9//yESQ///f/8hFUP//3//IRZD//9//yEXQ///f/8hEwwBCyAEQQFrQf////8AcSEBIAkhAiAEQQdxIgUEQANAIAJBADYCDCACQRBqIQIgA0EBaiIDIAVHDQALCyABQQdPBEAgCSAEQQR0aiEDA0AgAkEANgIMIAJBADYCfCACQQA2AmwgAkEANgJcIAJBADYCTCACQQA2AjwgAkEANgIsIAJBADYCHCACQYABaiICIANHDQALCyAAIAk2AghD//9//yETIARFBEBD//9//yERQ///f/8hEkP//3//IRVD//9//yEWQ///f/8hFwwBC0EAIQND//9//yEXQ///f/8hFkP//3//IRVD//9//yESQ///f/8hEQNAIAcgA0EcbGoiAioCDIsiFCARIBEgFF0bIREgAioCCIsiFCATIBMgFF0bIRMgAioCBIsiFCAXIBQgF14bIRcgAioCAIsiFCAWIBQgFl4bIRYgAioCFIsiFCAVIBQgFV4bIRUgAioCEIsiFCASIBIgFF0bIRIgA0EBaiIDIARHDQALCyAAQwAAgD9DAP7/RiAVlUMAAAAAIBVDAAAAAFwbIhiVQwAAAAAgGEMAAAAAXBsiFDgCICAAQwAAgD9DAP7/RiASlUMAAAAAIBJDAAAAAFwbIhmVQwAAAAAgGUMAAAAAXBsiHzgCHCAAQwAAgD9DAP7/RiARlUMAAAAAIBFDAAAAAFwbIhqVQwAAAAAgGkMAAAAAXBsiIDgCGCAAQwAAgD9DAP7/RiATlUMAAAAAIBNDAAAAAFwbIhuVQwAAAAAgG0MAAAAAXBsiITgCFCAAQwAAgD9DAP7/RiAXlUMAAAAAIBdDAAAAAFwbIhyVQwAAAAAgHEMAAAAAXBsiIjgCECAAQwAAgD9DAP7/RiAWlUMAAAAAIBZDAAAAAFwbIh2VQwAAAAAgHUMAAAAAXBsiIzgCDCAEBEBBACEIA0AgCSAIQQR0aiIBAn8gHSAHIAhBHGxqIgYqAgAiF5QiEYtDAAAAT10EQCARqAwBC0GAgICAeAsiADsBACABAn8gHCAGKgIEIhaUIhGLQwAAAE9dBEAgEagMAQtBgICAgHgLIgw7AQIgAQJ/IBsgBioCCCIVlCIRi0MAAABPXQRAIBGoDAELQYCAgIB4CyINOwEEIAYqAhAhESAGKgIMIRICfyAYIAYqAhQiHpQiE0MAAIBPXSATQwAAAABgcQRAIBOpDAELQQALIQICfyAZIBGUIhNDAACAT10gE0MAAAAAYHEEQCATqQwBC0EACyEDIACyISQCfyAaIBKUIhNDAACAT10gE0MAAAAAYHEEQCATqQwBC0EACyEAIBUgHpMhEyAWIBGTISUgFyASkyEmIBUgHpIhFSAWIBGSIRYgFyASkiEXIAFBCmohDiABQQhqIQ8gAUEGaiEQICMgJJQhEQJAAkADQCARICAgAEH//wNxIgWzlCISkiAXXSARIBKTICZecgRAIAVBAWoiAEH//wNxIABGDQEMAgsLIAUNAQtB//8DIQALIBAgADsBACAiIAyylCERAkACQANAIBEgHyADQf//A3EiALOUIhKSIBZdIBEgEpMgJV5yBEAgAEEBaiIDQf//A3EgA0YNAQwCCwsgAA0BC0H//wMhAwsgDyADOwEAICEgDbKUIRECQAJAA0AgESAUIAJB//8DcSIDs5QiEpIgFV0gESASkyATXnIEQCADQQFqIgJB//8DcSACRg0BDAILCyADDQELQf//AyECCyAOIAI7AQAgASAGKAIYIgJBAXEEfyACBSAJIAIgB2tBHG5BBHRqCzYCDCAIQQFqIgggBEcNAAsLIAsQigRBASECCyAKQRBqJAAgAgsYACABBEAgACgCCCABIAIQqgMLIAFBAEcLQwEBfwJAIABFDQAgACACIAERBwBFDQADQCAAKAIMIgNBAXENASADIAEgAhCqAyAAKAIMQRBqIgAgAiABEQcADQALCwsoAQF/IABB6OsANgIAIAAoAggiAQRAIAFBBGsQigQgAEEANgIICyAACw0AIAAQqwMaIAAQigQLlg4DD38WfQF+IwBBEGsiCiQAAkAgAUUNACABKAIsIAEoAiAiA0EBdEEBa0cNACAAIANBAWsiAzYCBCAAKAIIIgIEQCACQQRrEIoEIABBADYCCCAAKAIEIQMLQX8gA0EFdCIEQQRyIANB////P0sbEI0EIgsgAzYCACALQQRqIQYCQCADRQ0AIANBAWtB////P3EhCSAGIQIgA0EHcSIFBEBBACEDA0AgAkIANwIYIAJBIGohAiADQQFqIgMgBUcNAAsLIAlBB0kNACAEIAZqIQMDQCACQgA3AhggAkIANwL4ASACQgA3AtgBIAJCADcCuAEgAkIANwKYASACQgA3AnggAkIANwJYIAJCADcCOCACQYACaiICIANHDQALCyAKQQE2AgxBACEDIAZBACAKQQxqIAEQogNBf0F/IAAoAgQiB61CFH4iJ6ciAkEEaiIFIAIgBUsbICdCIIinGxCNBCICIAc2AgAgAkEEaiEIAkAgB0UEQCAAIAg2AghD//9//yERQ///f/8hEkP//3//IRVD//9//yEWQ///f/8hF0P//3//IRMMAQsgCCECIAdBFGwiBEEUayIBQRRuQQFqQQdxIgUEQANAIAJCADcCDCACQRRqIQIgA0EBaiIDIAVHDQALCyABQYwBTwRAIAQgCGohAwNAIAJCADcCDCACQgA3ApgBIAJCADcChAEgAkIANwJwIAJCADcCXCACQgA3AkggAkIANwI0IAJCADcCICACQaABaiICIANHDQALCyAAIAg2AghD//9//yETIAdFBEBD//9//yERQ///f/8hEkP//3//IRVD//9//yEWQ///f/8hFwwBC0EAIQND//9//yEXQ///f/8hFkP//3//IRVD//9//yESQ///f/8hEQNAIAYgA0EFdGoiAioCDIsiFCARIBEgFF0bIREgAioCCIsiFCATIBMgFF0bIRMgAioCBIsiFCAXIBQgF14bIRcgAioCAIsiFCAWIBQgFl4b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NgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvoAgECfwJAIAAgAUYNACABIAAgAmoiA2tBACACQQF0a00EQCAAIAEgAhDsAxoPCyAAIAFzQQNxIQQCQAJAIAAgAUkEQCAEBEAgACEDDAMLIABBA3FFBEAgACEDDAILIAAhAwNAIAJFDQQgAyABLQAAOgAAIAFBAWohASACQQFrIQIgA0EBaiIDQQNxDQALDAELAkAgBA0AIANBA3EEQANAIAJFDQUgACACQQFrIgJqIgMgASACai0AADoAACADQQNxDQALCyACQQNNDQADQCAAIAJBBGsiAmogASACaigCADYCACACQQNLDQALCyACRQ0CA0AgACACQQFrIgJqIAEgAmotAAA6AAAgAg0ACwwCCyACQQNNDQADQCADIAEoAgA2AgAgAUEEaiEBIANBBGohAyACQQRrIgJBA0sNAAsLIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJ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AxsiA2oiByAEEIMEIAAgDiALEP8DIABBMCACIAcgBEGAgARzEIMEIAAgCkEQaiAGEP8DIABBMCADIAZrQQBBABCDBCAAIA0gCBD/AyAAQSAgAiAHIARBgMAAcxCDBCAHIAIgAiAHSBshCQsgCkGwBGokACAJC40FAgZ+An8gASABKAIAQQdqQXhxIgFBEGo2AgAgACABKQMAIQQgASkDCCEFIwBBIGsiACQAAkAgBUL///////////8AgyIDQoCAgICAgMCAPH0gA0KAgICAgIDA/8MAfVQEQCAFQgSGIARCPIiEIQMgBEL//////////w+DIgRCgYCAgICAgIAIWgRAIANCgYCAgICAgIDAAHwhAgwCCyADQoCAgICAgICAQH0hAiAEQoCAgICAgICACFINASACIANCAYN8IQIMAQsgBFAgA0KAgICAgIDA//8AVCADQoCAgICAgMD//wBRG0UEQCAFQgSGIARCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiADQv///////7//wwBWDQBCACECIANCMIinIgFBkfcASQ0AIABBEGohCSAEIQIgBUL///////8/g0KAgICAgIDAAIQiAyEGAkAgAUGB9wBrIghBwABxBEAgAiAIQUBqrYYhBkIAIQIMAQsgCEUNACAGIAitIgeGIAJBwAAgCGutiIQhBiACIAeGIQILIAkgAjcDACAJIAY3AwgCQEGB+AAgAWsiAUHAAHEEQCADIAFBQGqtiCEEQgAhAwwBCyABRQ0AIANBwAAgAWuthiAEIAGtIgKIhCEEIAMgAoghAwsgACAENwMAIAAgAzcDCCAAKQMIQgSGIAApAwAiA0I8iIQhAiAAKQMQIAApAxiEQgBSrSADQv//////////D4OEIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACFINACACQgGDIAJ8IQILIABBIGokACACIAVCgICAgICAgICAf4OEvzkDAAsWACAARQRAQQAPC0GsswEgADYCAEF/C6ICACAARQRAQQAPCwJ/AkAgAAR/IAFB/wBNDQECQEHQtAEoAgAoAgBFBEAgAUGAf3FBgL8DRg0DQayzAUEZNgIADAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAA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QZy9ASgCAEcNAEGQvQEgATYCAA8LIAFB/wFNBEAgAUF4cUGwvQFqIQICf0GIvQEoAgAiBEEBIAFBA3Z0IgFxRQRAQYi9ASABIARyNgIAIAIMAQsgAigCCAshASACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0EfIQIgAUH///8HTQRAIAFBJiABQQh2ZyICa3ZBAXEgAkEBdGtBPmohAgsgACACNgIcIABCADcCECACQQJ0Qbi/AWohBAJAAkBBjL0BKAIAIgNBASACdCIFcUUEQEGMvQEgAyAFcjYCACAEIAA2AgAgACAENgIYDAELIAFBGSACQQF2a0EAIAJBH0cbdCECIAQoAgAhAwNAIAMiBCgCBEF4cSABRg0CIAJBHXYhAyACQQF0IQIgBCADQQRxakEQaiIFKAIAIgMNAAsgBSAANgIAIAAgBDYCGAsgACAANgIMIAAgADYCCA8LIAQoAggiASAANgIMIAQgADYCCCAAQQA2AhggACAENgIMIAAgATYCCAsLHwBB+MABKAIARQRAQfjAASAANgIAQfzAASABNgIACws3AQF/QQEgACAAQQFNGyEBAkADQCABEIkEIgANAUGAwQEoAgAiAARAIAARFgAMAQsLEAAACyAACwUAEAAAC3QBAX8gAkUEQCAAKAIEIAEoAgRGDwsgACABRgRAQQEPCyABKAIEIgItAAAhAQJAIAAoAgQiAy0AACIARQ0AIAAgAUcNAANAIAItAAEhASADLQABIgBFDQEgAkEBaiECIANBAWohAyAAIAFGDQALCyAAIAFGC9IDAQR/IwBBQGoiBCQAAn9BASAAIAFBABCPBA0AGkEAIAFFDQAaIwBBQGoiAyQAIAEoAgAiBUEEaygCACEGIAVBCGsoAgAhBSADQgA3AiAgA0IANwIoIANCADcCMCADQgA3ADcgA0IANwIYIANBADYCFCADQYSMATYCECADIAE2AgwgA0G0jAE2AgggASAFaiEBQQAhBQJAIAZBtIwBQQAQjwQEQCADQQE2AjggBiADQQhqIAEgAUEBQQAgBigCACgCFBEVACABQQAgAygCIEEBRhshBQwBCyAGIANBCGogAUEBQQAgBigCACgCGBELAAJAAkAgAygCLA4CAAECCyADKAIcQQAgAygCKEEBRhtBACADKAIkQQFGG0EAIAMoAjBBAUYbIQUMAQsgAygCIEEBRwRAIAMoAjANASADKAIkQQFHDQEgAygCKEEBRw0BCyADKAIYIQULIANBQGskAEEAIAUiAUUNABogBEEMakEAQTQQ7gMaIARBATYCOCAEQX82AhQgBCAANgIQIAQgATYCCCABIARBCGogAigCAEEBIAEoAgAoAhwRBgAgBCgCICIAQQFGBEAgAiAEKAIYNgIACyAAQQFGCyEAIARBQGskACAAC10BAX8gACgCECIDRQRAIABBATYCJCAAIAI2AhggACABNgIQDwsCQCABIANGBEAgACgCGEECRw0BIAAgAjYCGA8LIABBAToANiAAQQI2AhggACAAKAIkQQFqNgIkCwsaACAAIAEoAghBABCPBARAIAEgAiADEJEECwszACAAIAEoAghBABCPBARAIAEgAiADEJEEDwsgACgCCCIAIAEgAiADIAAoAgAoAhwRBgALmgEAIABBAToANQJAIAAoAgQgAkcNACAAQQE6ADQCQCAAKAIQIgJFBEAgAEEBNgIkIAAgAzYCGCAAIAE2AhAgA0EBRw0CIAAoAjBBAUYNAQwCCyABIAJGBEAgACgCGCICQQJGBEAgACADNgIYIAMhAgsgACgCMEEBRw0CIAJBAUYNAQwCCyAAIAAoAiRBAWo2AiQLIABBAToANgsLIAACQCAAKAIEIAFHDQAgACgCHEEBRg0AIAAgAjYCHAsL9QEAIAAgASgCCCAEEI8EBEAgASACIAMQlQQPCwJAIAAgASgCACAEEI8EBEACQCACIAEoAhBHBEAgASgCFCACRw0BCyADQQFHDQIgAUEBNgIgDwsgASADNgIgAkAgASgCLEEERg0AIAFBADsBNCAAKAIIIgAgASACIAJBASAEIAAoAgAoAhQRFQAgAS0ANQRAIAFBAzYCLCABLQA0RQ0BDAMLIAFBBDYCLAsgASACNgIUIAEgASgCKEEBajYCKCABKAIkQQFHDQEgASgCGEECRw0BIAFBAToANg8LIAAoAggiACABIAIgAyAEIAAoAgAoAhgRCwALC5QBACAAIAEoAgggBBCPBARAIAEgAiADEJUEDwsCQCAAIAEoAgAgBBCPBEUNAAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNASABQQE2AiAPCyABIAI2AhQgASADNgIgIAEgASgCKEEBajYCKAJAIAEoAiRBAUcNACABKAIYQQJHDQAgAUEBOgA2CyABQQQ2AiwLCzkAIAAgASgCCCAFEI8EBEAgASACIAMgBBCUBA8LIAAoAggiACABIAIgAyAEIAUgACgCACgCFBEVAAscACAAIAEoAgggBRCPBARAIAEgAiADIAQQlAQLCwQAIwALBgAgACQACxAAIwAgAGtBcHEiACQAIAALIgEBfiABIAKtIAOtQiCGhCAEIAARGQAiBUIgiKckASAFpwsLhYcBGwBBgAgLpVxkSm9pbnRHcm91cEVtcHR5AGRXb3JsZFNldEdyYXZpdHkAZFdvcmxkR2V0R3Jhdml0eQBkUlNldElkZW50aXR5AGRRU2V0SWRlbnRpdHkAZEJvZHlEZXN0cm95AGRKb2ludERlc3Ryb3kAZEpvaW50R3JvdXBEZXN0cm95AGRHZW9tRGVzdHJveQBkU3BhY2VEZXN0cm95AGRXb3JsZERlc3Ryb3kAZEdlb21IZWlnaHRmaWVsZERhdGFEZXN0cm95AGRGYWN0b3JDaG9sZXNreQBkU29sdmVDaG9sZXNreQBkR2VvbVNldEJvZHkAZEpvaW50R2V0Qm9keQBkR2VvbUdldEJvZHkAc2V0U2l6ZSgpIG91dCBvZiBzcGFjZSBpbiBMT0NBTCBhcnJheQBkQ29sbGlkZVJheUJveABkQ29sbGlkZUJveEJveABkQ29sbGlkZUNvbnZleEJveABkeEJveABkQ29sbGlkZUN5bGluZGVyQm94AGRDb2xsaWRlU3BoZXJlQm94AGRDb2xsaWRlQ2Fwc3VsZUJveABkSW52ZXJ0UERNYXRyaXgAZENvbGxpZGVSYXlDb252ZXgAZENvbGxpZGVDb252ZXhDb252ZXgAZENvbGxpZGVTcGhlcmVDb252ZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABkTWFzc0FkanVzdABkQm9keUdldEpvaW50AGNyZWF0ZUpvaW50AGRDb2xsaWRlSGVpZ2h0ZmllbGRVbml0AGRKb2ludEluaXQAZEdlb21SYXlHZXRDbG9zZXN0SGl0AEdldEhlaWdodABkR2VvbVJheVNldABkR2VvbVJheUdldABkSm9pbnRDcmVhdGVDb250YWN0AGRHZW9tU3BoZXJlU2V0UmFkaXVzAGRHZW9tU3BoZXJlR2V0UmFkaXVzAHdhcm5pbmc6IGRlc3Ryb3lpbmcgd29ybGQgY29udGFpbmluZyBncm91cGVkIGpvaW50cwBjdWxsUG9pbnRzAGRCb2R5R2V0TnVtSm9pbnRzAGRCb2R5U2V0QXV0b0Rpc2FibGVEZWZhdWx0cwBkR2VvbUdldENsYXNzAGRCb2R5U2V0TWFzcwBkQm9keUdldE1hc3MAZE1hc3NTZXRQYXJhbWV0ZXJzAGRXb3JsZEdldEF1dG9EaXNhYmxlU3RlcHMAZEJvZHlHZXRSZWxQb2ludFBvcwBkQm9keUFkZFJlbEZvcmNlQXRQb3MAZEJvZHlBZGRGb3JjZUF0UG9zAGRCb2R5QWRkUmVsRm9yY2VBdFJlbFBvcwBkQm9keUFkZEZvcmNlQXRSZWxQb3MAZFdvcmxkU2V0UXVpY2tTdGVwTnVtSXRlcmF0aW9ucwBkR2VvbVBsYW5lU2V0UGFyYW1zAGRHZW9tQ2Fwc3VsZVNldFBhcmFtcwBkR2VvbVJheUdldFBhcmFtcwBkR2VvbUN5bGluZGVyR2V0UGFyYW1zAGRHZW9tUGxhbmVHZXRQYXJhbXMAZEdlb21DYXBzdWxlR2V0UGFyYW1zAHN3YXBSb3dzQW5kQ29scwBzZXRMZXZlbHMAZEhhc2hTcGFjZVNldExldmVscwBkSGFzaFNwYWNlR2V0TGV2ZWxzAGRKb2ludFNldEFNb3RvckF4aXMAZEpvaW50R2V0QU1vdG9yQXhpcwBkSm9pbnRTZXRTbGlkZXJBeGlzAGRKb2ludEdldFNsaWRlckF4aXMAZEpvaW50U2V0SGluZ2VBeGlzAGRKb2ludEdldEhpbmdlQXhpcwBkR2VvbUJveFNldExlbmd0aHMAZEdlb21Cb3hHZXRMZW5ndGhzAGRKb2ludFNldEFNb3Rvck51bUF4ZXMAZEpvaW50R2V0QU1vdG9yTnVtQXhlcwBkUkZyb20yQXhlcwBkUkZyb21FdWxlckFuZ2xlcwBkR2VvbUhlaWdodGZpZWxkRGF0YVNldEJvdW5kcwBkeFByb2Nlc3NJc2xhbmRzAGNvbGxpZGVBQUJCcwBjb21wdXRlUG9zcgBkSm9pbnRDcmVhdGVBTW90b3IAZEpvaW50U2V0QmFsbEFuY2hvcgBkSm9pbnRHZXRCYWxsQW5jaG9yAGRKb2ludFNldFVuaXZlcnNhbEFuY2hvcgBkSm9pbnRHZXRVbml2ZXJzYWxBbmNob3IAZEpvaW50U2V0SGluZ2VBbmNob3IAZEpvaW50R2V0SGluZ2VBbmNob3IAZEpvaW50U2V0SGluZ2UyQW5jaG9yAGRKb2ludEdldEhpbmdlMkFuY2hvcgBkV29ybGRTZXRDb250YWN0U3VyZmFjZUxheWVyAGRXb3JsZEdldENvbnRhY3RTdXJmYWNlTGF5ZXIAZHhRdWlja1N0ZXBwZXIAZENvbGxpZGVSYXlDeWxpbmRlcgBkeEN5bGluZGVyAFRlc3RPbmVUcmlhbmdsZVZzQ3lsaW5kZXIAX2NsZENsaXBCb3hUb0N5bGluZGVyAGRKb2ludENyZWF0ZVNsaWRlcgBNdWx0aXBseTJfcDhyAE11bHRpcGx5QWRkMl9wOHIAZEdlb21UcmFuc2Zvcm1TZXRDbGVhbnVwAGRTcGFjZVNldENsZWFudXAAZEdlb21UcmFuc2Zvcm1HZXRDbGVhbnVwAGRTcGFjZUdldENsZWFudXAAb2RlL3NyYy9yYXkuY3BwAG9kZS9zcmMvY29sbGlzaW9uX2N5bGluZGVyX2JveC5jcHAAb2RlL3NyYy9ib3guY3BwAG9kZS9zcmMvbWF0cml4LmNwcABvZGUvc3JjL2NvbnZleC5jcHAAb2RlL3NyYy9tYXNzLmNwcABvZGUvc3JjL3F1aWNrc3RlcC5jcHAAb2RlL3NyYy9zdGVwLmNwcABvZGUvc3JjL2xjcC5jcHAAb2RlL3NyYy9yb3RhdGlvbi5jcHAAb2RlL3NyYy9jb2xsaXNpb25fdHJhbnNmb3JtLmNwcABvZGUvc3JjL3V0aWwuY3BwAG9kZS9zcmMvY29sbGlzaW9uX2tlcm5lbC5jcHAAb2RlL3NyYy9vZGVtYXRoLmNwcABvZGUvc3JjL2NvbGxpc2lvbl9jeWxpbmRlcl90cmltZXNoLmNwcABvZGUvc3JjL2NvbGxpc2lvbl90cmltZXNoLmNwcABvZGUvc3JjL3NwaGVyZS5jcHAAb2RlL3NyYy9jb2xsaXNpb25fY3lsaW5kZXJfcGxhbmUuY3BwAG9kZS9zcmMvY29sbGlzaW9uX3RyaW1lc2hfcGxhbmUuY3BwAG9kZS9zcmMvY2Fwc3VsZS5jcHAAb2RlL3NyYy9vZGUuY3BwAG9kZS9zcmMvY29sbGlzaW9uX3NwYWNlLmNwcABvZGUvc3JjL2hlaWdodGZpZWxkLmNwcABkV29ybGRRdWlja1N0ZXAAZFdvcmxkU3RlcABkTWFzc1NldFplcm8AZFNldFplcm8AZEJvZHlTZXRQb3NpdGlvbgBkR2VvbVNldFBvc2l0aW9uAGRCb2R5R2V0UG9zaXRpb24AZEdlb21HZXRQb3NpdGlvbgBkSm9pbnRHZXRTbGlkZXJQb3NpdGlvbgBkQm9keVNldFJvdGF0aW9uAGRHZW9tU2V0Um90YXRpb24AZEJvZHlHZXRSb3RhdGlvbgBkR2VvbUdldFJvdGF0aW9uAGRCb2R5U2V0UXVhdGVybmlvbgBkQm9keUdldFF1YXRlcm5pb24AZEdlb21HZXRRdWF0ZXJuaW9uAG5hbgBkQ29sbGlkZVRyYW5zZm9ybQBnZXRHZW9tAGRHZW9tVHJhbnNmb3JtU2V0R2VvbQBkR2VvbVRyYW5zZm9ybUdldEdlb20Ac3dhcFByb2JsZW0AZEpvaW50U2V0QU1vdG9yUGFyYW0AZEpvaW50R2V0QU1vdG9yUGFyYW0AZEpvaW50U2V0U2xpZGVyUGFyYW0AZEpvaW50R2V0U2xpZGVyUGFyYW0AZEpvaW50U2V0VW5pdmVyc2FsUGFyYW0AZEpvaW50R2V0VW5pdmVyc2FsUGFyYW0AZEpvaW50U2V0SGluZ2VQYXJhbQBkSm9pbnRHZXRIaW5nZVBhcmFtAGRKb2ludFNldEhpbmdlMlBhcmFtAGRKb2ludEdldEhpbmdlMlBhcmFtAGRSZW1vdmVSb3dDb2wAZEpvaW50Q3JlYXRlTnVsbABkSm9pbnRDcmVhdGVCYWxsAGRCb2R5R2V0UmVsUG9pbnRWZWwAZEJvZHlTZXRBbmd1bGFyVmVsAGRCb2R5R2V0QW5ndWxhclZlbABkQm9keVNldExpbmVhclZlbABkQm9keUdldExpbmVhclZlbABkV29ybGRTZXRDb250YWN0TWF4Q29ycmVjdGluZ1ZlbABkV29ybGRHZXRDb250YWN0TWF4Q29ycmVjdGluZ1ZlbABkSm9pbnRHZXRBTW90b3JBeGlzUmVsAGRNYXNzU2V0Qm94VG90YWwAZE1hc3NTZXRDeWxpbmRlclRvdGFsAGRNYXNzU2V0U3BoZXJlVG90YWwAZEpvaW50Q3JlYXRlVW5pdmVyc2FsAGRNYXNzQ2hlY2sAZEdlb21IZWlnaHRmaWVsZERhdGFCdWlsZENhbGxiYWNrAGRHZW9tQm94UG9pbnREZXB0aABkR2VvbVNwaGVyZVBvaW50RGVwdGgAZEdlb21DYXBzdWxlUG9pbnREZXB0aABkR2VvbVJheUdldExlbmd0aABkSm9pbnRBdHRhY2gAb2RlL3NyYy9jb2xsaXNpb25fdXRpbC5oAG9kZS9zcmMvY29sbGlzaW9uX3NwYWNlX2ludGVybmFsLmgAaW5mAHJlbW92ZQBkU3BhY2VSZW1vdmUAZExETFRSZW1vdmUAZEJvZHlHZXRUb3JxdWUAZEJvZHlBZGRSZWxUb3JxdWUAZEJvZHlBZGRUb3JxdWUAZFNldFZhbHVlAGRJc1Bvc2l0aXZlRGVmaW5pdGUAZE1hc3NSb3RhdGUAZE1hc3NUcmFuc2xhdGUAZEJvZHlDcmVhdGUAZEpvaW50R2V0U2xpZGVyUG9zaXRpb25SYXRlAGRKb2ludEdldEhpbmdlQW5nbGVSYXRlAGRKb2ludEdldFVuaXZlcnNhbEFuZ2xlMlJhdGUAZEpvaW50R2V0SGluZ2UyQW5nbGUyUmF0ZQBkSm9pbnRHZXRVbml2ZXJzYWxBbmdsZTFSYXRlAGRKb2ludEdldEhpbmdlMkFuZ2xlMVJhdGUAZENvbGxpZGVSYXlTcGhlcmUAZHhTcGhlcmUAZENvbGxpZGVTcGhlcmVTcGhlcmUAZENvbGxpZGVDYXBzdWxlU3BoZXJlAGRKb2ludEdldFR5cGUAZENvbGxpZGVSYXlQbGFuZQBkQ29sbGlkZUJveFBsYW5lAGRDb2xsaWRlQ29udmV4UGxhbmUAZENvbGxpZGVDeWxpbmRlclBsYW5lAGRDb2xsaWRlVHJpbWVzaFBsYW5lAGRDb2xsaWRlU3BoZXJlUGxhbmUAZENvbGxpZGVDYXBzdWxlUGxhbmUAZFdvcmxkR2V0QXV0b0Rpc2FibGVUaW1lAGRDb2xsaWRlUmF5Q2Fwc3VsZQBkQ29sbGlkZUNvbnZleENhcHN1bGUAZHhDYXBzdWxlAGRNYXNzU2V0Q2Fwc3VsZQBkQ29sbGlkZUNhcHN1bGVDYXBzdWxlAF9jbGRDbGlwQ3lsaW5kZXJUb1RyaWFuZ2xlAGRKb2ludFNldEFNb3RvckFuZ2xlAGRKb2ludEdldEFNb3RvckFuZ2xlAGRKb2ludEdldEhpbmdlQW5nbGUAZFJGcm9tQXhpc0FuZEFuZ2xlAGRRRnJvbUF4aXNBbmRBbmdsZQBkQm9keURpc2FibGUAZEJvZHlFbmFibGUAZFZlY3RvclNjYWxlAG51bV9ieXRlcyB0b28gbGFyZ2UAZEpvaW50Q3JlYXRlSGluZ2UAT0RFIE1lc3NhZ2UAZEpvaW50U2V0QU1vdG9yTW9kZQBkSm9pbnRHZXRBTW90b3JNb2RlAGNvbGxpZGUAZFNwYWNlQ29sbGlkZQBkQ29sbGlkZQBkQm9keUdldEZvcmNlAGRCb2R5QWRkUmVsRm9yY2UAZEJvZHlBZGRGb3JjZQB+ZHhTcGFjZQBkR2VvbUlzU3BhY2UAZFBsYW5lU3BhY2UAZENvbGxpZGVIZWlnaHRmaWVsZABkSm9pbnRTZXRGaXhlZABkSm9pbnRDcmVhdGVGaXhlZABkR2VvbU1vdmVkAG5vdCB5ZXQgaW1wbGVtZW50ZWQAZEFyZUNvbm5lY3RlZAB0aGlzIHNob3VsZCBuZXZlciBnZXQgY2FsbGVkAGRCb2R5SXNFbmFibGVkAGRpc2FibGVkIGJvZHkgdGFnZ2VkAGVuYWJsZWQgYm9keSBub3QgdGFnZ2VkAGF0dGFjaGVkIGVuYWJsZWQgam9pbnQgbm90IHRhZ2dlZAB1bmF0dGFjaGVkIG9yIGRpc2FibGVkIGpvaW50IHRhZ2dlZABhZGQAZE1hc3NBZGQAZFNwYWNlQWRkAGNlbnRlciBvZiBtYXNzIGluY29uc2lzdGVudCB3aXRoIG1hc3MgcGFyYW1ldGVycyBpbiAlcygpIEZpbGUgJXMgTGluZSAlZAB6ZXJvIGxlbmd0aCB2ZWN0b3IgaW4gJXMoKSBGaWxlICVzIExpbmUgJWQAdmVjdG9yIGhhcyB6ZXJvIHNpemUgaW4gJXMoKSBGaWxlICVzIExpbmUgJWQAaW5lcnRpYSBtdXN0IGJlIHBvc2l0aXZlIGRlZmluaXRlIGluICVzKCkgRmlsZSAlcyBMaW5lICVkAG1hc3MgbXVzdCBiZSA+IDAgaW4gJXMoKSBGaWxlICVzIExpbmUgJWQAaW5lcnRpYSBtdXN0IGJlIHBvc2l0aXZlIGRlZmluaXRlISBpbiAlcygpIEZpbGUgJXMgTGluZSAlZABTZXREYXRhAH5keEhlaWdodGZpZWxkRGF0YQBhc3NlcnRpb24gImJvZHkiIGZhaWxlZCBpbiAlcygpIFslc10AYXNzZXJ0aW9uICJudW1UZXJyYWluQ29udGFjdHMgPD0gbnVtTWF4VGVycmFpbkNvbnRhY3RzIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAibzEtPnR5cGUgPT0gZFJheUNsYXNzIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAibzItPnR5cGUgPT0gZEJveENsYXNzIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAibzEtPnR5cGUgPT0gZEJveENsYXNzIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAibzItPnR5cGUgPT0gZENvbnZleENsYXNzIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAibzEtPnR5cGUgPT0gZENvbnZleENsYXNzIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAibzItPnR5cGUgPT0gZEN5bGluZGVyQ2xhc3MiIGZhaWxlZCBpbiAlcygpIFslc10AYXNzZXJ0aW9uICJvMS0+dHlwZSA9PSBkR2VvbVRyYW5zZm9ybUNsYXNzIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAibzEtPnR5cGUgPT0gZFRyaU1lc2hDbGFzcyIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gIm8yLT50eXBlID09IGRTcGhlcmVDbGFzcyIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gIm8xLT50eXBlID09IGRTcGhlcmVDbGFzcyIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gIm8yLT50eXBlID09IGRQbGFuZUNsYXNzIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAibzItPnR5cGUgPT0gZENhcHN1bGVDbGFzcyIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gIm8xLT50eXBlID09IGRDYXBzdWxlQ2xhc3MiIGZhaWxlZCBpbiAlcygpIFslc10AYXNzZXJ0aW9uICJvMS0+dHlwZSA9PSBkSGVpZ2h0ZmllbGRDbGFzcyIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gIm9mZnNldF9wb3NyIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAiaj09bSIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gImluZm9baV0ubSA+PSAwICYmIGluZm9baV0ubSA8PSA2ICYmIGluZm9baV0ubnViID49IDAgJiYgaW5mb1tpXS5udWIgPD0gaW5mb1tpXS5tIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAiamJfcHRyID09IGpiKzIqbSIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gInBDYWxsYmFjayIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gInN0YWNrc2l6ZSA8PSB3b3JsZC0+bmoiIGZhaWxlZCBpbiAlcygpIFslc10AYXNzZXJ0aW9uICJ3ICYmIGoiIGZhaWxlZCBpbiAlcygpIFslc10AYXNzZXJ0aW9uICJmYWxzZSIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gIncgJiYgdnRhYmxlIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAic3RhY2tzaXplIDw9IHdvcmxkLT5uYiIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gIm1fcEhlaWdodERhdGEiIGZhaWxlZCBpbiAlcygpIFslc10AYXNzZXJ0aW9uICJpVG1wQ291bnRlcjIgPj0gMCAmJiBpVG1wQ291bnRlcjIgPD0gTUFYX0NZTEJPWF9DTElQX1BPSU5UUyIgZmFpbGVkIGluICVzKCkgWyVzXQBhc3NlcnRpb24gImlUbXBDb3VudGVyMSA+PSAwICYmIGlUbXBDb3VudGVyMSA8PSBNQVhfQ1lMQk9YX0NMSVBfUE9JTlRTIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAiaVRtcENvdW50ZXIyID49IDAgJiYgaVRtcENvdW50ZXIyIDw9IG5NQVhf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ImZEZXB0aCA+IFJFQUwoIDAuMCApIiBmYWlsZWQgaW4gJXMoKSBbJXNdAGFzc2VydGlvbiAiZldpZHRoID4gUkVBTCggMC4wICkiIGZhaWxlZCBpbiAlcygpIFslc10AZERRZnJvbVcAZFNvbHZlTERMVABTQUZFQ09OVEFDVABkUWZyb21SAE9ERSBJTlRFUk5BTCBFUlJPUgBkUmZyb21RAGRXb3JsZFNldEVSUABkV29ybGRHZXRFUlAAZFNvbHZlTENQAFNPUl9MQ1AAdHJhbnNmZXJfaV9mcm9tX0NfdG9fTgBOQU4AZFdvcmxkU2V0Q0ZNAGRXb3JsZEdldENGTQBkTERMVEFkZFRMAElORgBkR2VvbUdldEFBQkIAZEludmVydE1hdHJpeDQAZE5vcm1hbGl6ZTQAZFFNdWx0aXBseTMAZE5vcm1hbGl6ZTMAZFFNdWx0aXBseTIAZEludGVybmFsU3RlcElzbGFuZF94MgBkSm9pbnRTZXRVbml2ZXJzYWxBeGlzMgBkSm9pbnRHZXRVbml2ZXJzYWxBeGlzMgBkSm9pbnRTZXRIaW5nZTJBeGlzMgBkSm9pbnRHZXRIaW5nZTJBeGlzMgBkSm9pbnRHZXRVbml2ZXJzYWxBbmNob3IyAGRKb2ludEdldFVuaXZlcnNhbEFuZ2xlMgBkSm9pbnRDcmVhdGVIaW5nZTIAY29sbGlkZTIAZFNwYWNlQ29sbGlkZTIAZE11bHRpcGx5MQBkUU11bHRpcGx5MQBkSm9pbnRTZXRVbml2ZXJzYWxBeGlzMQBkSm9pbnRHZXRVbml2ZXJzYWxBeGlzMQBkSm9pbnRTZXRIaW5nZTJBeGlzMQBkSm9pbnRHZXRIaW5nZTJBeGlzMQBNdWx0aXBseTFfOHExAE11bHRpcGx5QWRkMV84cTEATXVsdGlwbHkxXzEycTEAZEdlb21UcmlNZXNoRGF0YUJ1aWxkU2luZ2xlMQBkSm9pbnRHZXRVbml2ZXJzYWxBbmdsZTEAZEpvaW50R2V0SGluZ2UyQW5nbGUxAE11bHRpcGx5MF9wODEATXVsdGlwbHlBZGQwX3A4MQBkTXVsdGlwbHkwAGRRTXVsdGlwbHkwAC4AKG51bGwpAExDUCBpbnRlcm5hbCBlcnJvciwgcyA8PSAwIChzPSUuNGUpAFNraXBQcmltaXRpdmVUZXN0cyBub3QgcG9zc2libGUgZm9yIFJheUNvbGxpZGVyICEgKG5vdCBpbXBsZW1lbnRlZCkAICglczolZCkAam9pbnQgY2FuIG5vdCBiZSBhdHRhY2hlZCB0byBqdXN0IG9uZSBib2R5IGluICVzKCkAR2VvbVRyYW5zZm9ybSBlbmNhcHN1bGF0ZWQgb2JqZWN0IG11c3Qgbm90IGJlIGF0dGFjaGVkIHRvIGEgYm9keSBpbiAlcygpAGFyZ3VtZW50IG5vdCBhIHJheSBpbiAlcygpAGFyZ3VtZW50IG5vdCBhIGJveCBpbiAlcygpAGJhZCBqb2ludCBhcmd1bWVudCBpbiAlcygpAGJhZCByZXN1bHQgYXJndW1lbnQgaW4gJXMoKQBiYWQgd29ybGQgYXJndW1lbnQgaW4gJXMoKQBqb2ludCBpcyBub3QgYW4gYW1vdG9yIGluICVzKCkAYXJndW1lbnQgbm90IGEgY2N5bGluZGVyIGluICVzKCkAam9pbnQgaXMgbm90IGEgc2xpZGVyIGluICVzKCkAYmFkIG8yIGNsYXNzIG51bWJlciBpbiAlcygpAGJhZCBvMSBjbGFzcyBudW1iZXIgaW4gJXMoKQBiYWQgZGlyZWN0aW9uIG51bWJlciBpbiAlcygpAGFyZ3VtZW50IG5vdCBhIGdlb20gdHJhbnNmb3JtIGluICVzKCkAam9pbnQgaXMgbm90IGEgYmFsbCBpbiAlcygpAG11c3QgaGF2ZSBtaW5sZXZlbCA8PSBtYXhsZXZlbCBpbiAlcygpAGpvaW50IGlzIG5vdCBhIHVuaXZlcnNhbCBpbiAlcygpAGFyZ3VtZW50IG5vdCBhIHNwaGVyZSBpbiAlcygpAGFyZ3VtZW50IG5vdCBhIHBsYW5lIGluICVzKCkAZ2VvbSBtdXN0IGJlIHBsYWNlYWJsZSBpbiAlcygpAGpvaW50IGlzIG5vdCBhIGhpbmdlIGluICVzKCkAam9pbnQgaXMgbm90IGEgSGluZ2UgaW4gJXMoKQBpbmRleCBvdXQgb2YgcmFuZ2UgaW4gJXMoKQBvYmplY3QgaXMgbm90IGluIHRoaXMgc3BhY2UgaW4gJXMoKQBhcmd1bWVudCBtdXN0IGJlIGEgaGFzaCBzcGFjZSBpbiAlcygpAGludmFsaWQgb3BlcmF0aW9uIGZvciBsb2NrZWQgc3BhY2UgaW4gJXMoKQBpbnZhbGlkIG9wZXJhdGlvbiBmb3IgZ2VvbSBpbiBsb2NrZWQgc3BhY2UgaW4gJXMoKQBhcmd1bWVudCBub3QgYSBzcGFjZSBpbiAlcygpAGdlb20gaXMgYWxyZWFkeSBpbiBhIHNwYWNlIGluICVzKCkAR2VvbVRyYW5zZm9ybSBlbmNhcHN1bGF0ZWQgb2JqZWN0IG11c3Qgbm90IGJlIGluIGEgc3BhY2UgaW4gJXMoKQBqb2ludCBhbmQgYm9kaWVzIG11c3QgYmUgaW4gc2FtZSB3b3JsZCBpbiAlcygpAGNvbGxpZGVycyBhcnJheSBub3QgaW5pdGlhbGl6ZWQgaW4gJXMoKQBqb2ludCBpcyBub3QgZml4ZWQgaW4gJXMoKQBhcmd1bWVudCBub3QgdHJpbWVzaCBkYXRhIGluICVzKCkAYXJndW1lbnQgbm90IEhlaWdodGZpZWxkIGRhdGEgaW4gJXMoKQBBcmd1bWVudCBub3QgSGVpZ2h0ZmllbGQgZGF0YSBpbiAlcygpAGNhbid0IGhhdmUgYm9keTE9PWJvZHkyIGluICVzKCkAam9pbnQgaXMgbm90IGEgaGluZ2UyIGluICVzKCkAbm8gc2Vjb25kIGJvZHksIGNhbid0IHNldCBheGlzIHJlbD0yIGluICVzKCkAbm8gZmlyc3QgYm9keSwgY2FuJ3Qgc2V0IGF4aXMgcmVsPTEgaW4gJXMoKQBzdGVwc2l6ZSBtdXN0IGJlID4gMCBpbiAlcygpAEJhZCBhcmd1bWVudChzKSBpbiAlcygpAFRlbXBvcmFsIGNvaGVyZW5jZSBjYW4ndCBndWFyYW50ZWUgdG8gcmVwb3J0IGNsb3Nlc3QgaGl0IQBIaWdoZXIgZGlzdGFuY2UgYm91bmQgbXVzdCBiZSBwb3NpdGl2ZSEAVGVtcG9yYWwgY29oZXJlbmNlIG9ubHkgd29ya3Mgd2l0aCBGaXJzdCBjb250YWN0IG1vZGUhAENsb3Nlc3QgaGl0IGRvZXNuJ3Qgd29yayB3aXRoIEZpcnN0IGNvbnRhY3QgbW9kZSEAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEACiVzOiAACiVzICVkOiAAd2lkdGgg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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(instance=>instance).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["memory"];updateMemoryViews();wasmTable=wasmExports["__indirect_function_table"];addOnInit(wasmExports["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":abort("to do getValue(i64) use WASM_BIGINT");case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort(`invalid type for getValue: ${type}`)}}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>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":abort("to do setValue(i64) use WASM_BIGINT");case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var _abort=()=>{abort("")};var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;var 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};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var SYSCALLS={varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret}};var _fd_close=fd=>52;var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var 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};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={"string":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}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;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}};var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};var sigToWasmTypes=sig=>{var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64","p":"i32"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i{var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={"i":127,"p":127,"j":126,"f":125,"d":124};target.push(96);uleb128Encode(sigParam.length,target);for(var i=0;i{if(typeof WebAssembly.Function=="function"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1];generateFuncType(sig,typeSectionBody);var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push.apply(bytes,typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{"e":{"f":func}});var wrappedFunc=instance.exports["f"];return wrappedFunc};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}return wasmTable.length-1};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var removeFunction=index=>{functionsInTableMap.delete(getWasmTableEntry(index));setWasmTableEntry(index,null);freeTableIndexes.push(index)};var wasmImports={abort:_abort,emscripten_memcpy_js:_emscripten_memcpy_js,emscripten_resize_heap:_emscripten_resize_heap,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["__wasm_call_ctors"])();var _dCreateBox=Module["_dCreateBox"]=(a0,a1,a2,a3)=>(_dCreateBox=Module["_dCreateBox"]=wasmExports["dCreateBox"])(a0,a1,a2,a3);var _dGeomBoxSetLengths=Module["_dGeomBoxSetLengths"]=(a0,a1,a2,a3)=>(_dGeomBoxSetLengths=Module["_dGeomBoxSetLengths"]=wasmExports["dGeomBoxSetLengths"])(a0,a1,a2,a3);var _dGeomBoxGetLengths=Module["_dGeomBoxGetLengths"]=(a0,a1)=>(_dGeomBoxGetLengths=Module["_dGeomBoxGetLengths"]=wasmExports["dGeomBoxGetLengths"])(a0,a1);var _dCreateCapsule=Module["_dCreateCapsule"]=(a0,a1,a2)=>(_dCreateCapsule=Module["_dCreateCapsule"]=wasmExports["dCreateCapsule"])(a0,a1,a2);var _dGeomCapsuleSetParams=Module["_dGeomCapsuleSetParams"]=(a0,a1,a2)=>(_dGeomCapsuleSetParams=Module["_dGeomCapsuleSetParams"]=wasmExports["dGeomCapsuleSetParams"])(a0,a1,a2);var _dGeomCapsuleGetParams=Module["_dGeomCapsuleGetParams"]=(a0,a1,a2)=>(_dGeomCapsuleGetParams=Module["_dGeomCapsuleGetParams"]=wasmExports["dGeomCapsuleGetParams"])(a0,a1,a2);var _dGeomGetRotation=Module["_dGeomGetRotation"]=a0=>(_dGeomGetRotation=Module["_dGeomGetRotation"]=wasmExports["dGeomGetRotation"])(a0);var _dGeomGetPosition=Module["_dGeomGetPosition"]=a0=>(_dGeomGetPosition=Module["_dGeomGetPosition"]=wasmExports["dGeomGetPosition"])(a0);var _dRSetIdentity=Module["_dRSetIdentity"]=a0=>(_dRSetIdentity=Module["_dRSetIdentity"]=wasmExports["dRSetIdentity"])(a0);var _dGeomPlaneGetParams=Module["_dGeomPlaneGetParams"]=(a0,a1)=>(_dGeomPlaneGetParams=Module["_dGeomPlaneGetParams"]=wasmExports["dGeomPlaneGetParams"])(a0,a1);var _dGeomSphereGetRadius=Module["_dGeomSphereGetRadius"]=a0=>(_dGeomSphereGetRadius=Module["_dGeomSphereGetRadius"]=wasmExports["dGeomSphereGetRadius"])(a0);var _dGeomGetBody=Module["_dGeomGetBody"]=a0=>(_dGeomGetBody=Module["_dGeomGetBody"]=wasmExports["dGeomGetBody"])(a0);var _dBodyGetLinearVel=Module["_dBodyGetLinearVel"]=a0=>(_dBodyGetLinearVel=Module["_dBodyGetLinearVel"]=wasmExports["dBodyGetLinearVel"])(a0);var _dCollide=Module["_dCollide"]=(a0,a1,a2,a3,a4)=>(_dCollide=Module["_dCollide"]=wasmExports["dCollide"])(a0,a1,a2,a3,a4);var _dSpaceAdd=Module["_dSpaceAdd"]=(a0,a1)=>(_dSpaceAdd=Module["_dSpaceAdd"]=wasmExports["dSpaceAdd"])(a0,a1);var _dSpaceRemove=Module["_dSpaceRemove"]=(a0,a1)=>(_dSpaceRemove=Module["_dSpaceRemove"]=wasmExports["dSpaceRemove"])(a0,a1);var _dGeomDestroy=Module["_dGeomDestroy"]=a0=>(_dGeomDestroy=Module["_dGeomDestroy"]=wasmExports["dGeomDestroy"])(a0);var _dGeomSetBody=Module["_dGeomSetBody"]=(a0,a1)=>(_dGeomSetBody=Module["_dGeomSetBody"]=wasmExports["dGeomSetBody"])(a0,a1);var _dGeomSetPosition=Module["_dGeomSetPosition"]=(a0,a1,a2,a3)=>(_dGeomSetPosition=Module["_dGeomSetPosition"]=wasmExports["dGeomSetPosition"])(a0,a1,a2,a3);var _dBodySetPosition=Module["_dBodySetPosition"]=(a0,a1,a2,a3)=>(_dBodySetPosition=Module["_dBodySetPosition"]=wasmExports["dBodySetPosition"])(a0,a1,a2,a3);var _dGeomSetRotation=Module["_dGeomSetRotation"]=(a0,a1)=>(_dGeomSetRotation=Module["_dGeomSetRotation"]=wasmExports["dGeomSetRotation"])(a0,a1);var _dBodySetRotation=Module["_dBodySetRotation"]=(a0,a1)=>(_dBodySetRotation=Module["_dBodySetRotation"]=wasmExports["dBodySetRotation"])(a0,a1);var _dBodySetQuaternion=Module["_dBodySetQuaternion"]=(a0,a1)=>(_dBodySetQuaternion=Module["_dBodySetQuaternion"]=wasmExports["dBodySetQuaternion"])(a0,a1);var _dBodyGetQuaternion=Module["_dBodyGetQuaternion"]=a0=>(_dBodyGetQuaternion=Module["_dBodyGetQuaternion"]=wasmExports["dBodyGetQuaternion"])(a0);var _dGeomGetAABB=Module["_dGeomGetAABB"]=(a0,a1)=>(_dGeomGetAABB=Module["_dGeomGetAABB"]=wasmExports["dGeomGetAABB"])(a0,a1);var _dGeomGetClass=Module["_dGeomGetClass"]=a0=>(_dGeomGetClass=Module["_dGeomGetClass"]=wasmExports["dGeomGetClass"])(a0);var _dSimpleSpaceCreate=Module["_dSimpleSpaceCreate"]=a0=>(_dSimpleSpaceCreate=Module["_dSimpleSpaceCreate"]=wasmExports["dSimpleSpaceCreate"])(a0);var _dHashSpaceCreate=Module["_dHashSpaceCreate"]=a0=>(_dHashSpaceCreate=Module["_dHashSpaceCreate"]=wasmExports["dHashSpaceCreate"])(a0);var _dHashSpaceSetLevels=Module["_dHashSpaceSetLevels"]=(a0,a1,a2)=>(_dHashSpaceSetLevels=Module["_dHashSpaceSetLevels"]=wasmExports["dHashSpaceSetLevels"])(a0,a1,a2);var _dHashSpaceGetLevels=Module["_dHashSpaceGetLevels"]=(a0,a1,a2)=>(_dHashSpaceGetLevels=Module["_dHashSpaceGetLevels"]=wasmExports["dHashSpaceGetLevels"])(a0,a1,a2);var _dSpaceDestroy=Module["_dSpaceDestroy"]=a0=>(_dSpaceDestroy=Module["_dSpaceDestroy"]=wasmExports["dSpaceDestroy"])(a0);var _dSpaceSetCleanup=Module["_dSpaceSetCleanup"]=(a0,a1)=>(_dSpaceSetCleanup=Module["_dSpaceSetCleanup"]=wasmExports["dSpaceSetCleanup"])(a0,a1);var _dSpaceGetCleanup=Module["_dSpaceGetCleanup"]=a0=>(_dSpaceGetCleanup=Module["_dSpaceGetCleanup"]=wasmExports["dSpaceGetCleanup"])(a0);var _dSpaceCollide=Module["_dSpaceCollide"]=(a0,a1,a2)=>(_dSpaceCollide=Module["_dSpaceCollide"]=wasmExports["dSpaceCollide"])(a0,a1,a2);var _dCreateGeomTransform=Module["_dCreateGeomTransform"]=a0=>(_dCreateGeomTransform=Module["_dCreateGeomTransform"]=wasmExports["dCreateGeomTransform"])(a0);var _dGeomTransformSetGeom=Module["_dGeomTransformSetGeom"]=(a0,a1)=>(_dGeomTransformSetGeom=Module["_dGeomTransformSetGeom"]=wasmExports["dGeomTransformSetGeom"])(a0,a1);var _dGeomTransformGetGeom=Module["_dGeomTransformGetGeom"]=a0=>(_dGeomTransformGetGeom=Module["_dGeomTransformGetGeom"]=wasmExports["dGeomTransformGetGeom"])(a0);var _dGeomTransformSetCleanup=Module["_dGeomTransformSetCleanup"]=(a0,a1)=>(_dGeomTransformSetCleanup=Module["_dGeomTransformSetCleanup"]=wasmExports["dGeomTransformSetCleanup"])(a0,a1);var _dGeomTransformGetCleanup=Module["_dGeomTransformGetCleanup"]=a0=>(_dGeomTransformGetCleanup=Module["_dGeomTransformGetCleanup"]=wasmExports["dGeomTransformGetCleanup"])(a0);var _dGeomTriMeshDataCreate=Module["_dGeomTriMeshDataCreate"]=()=>(_dGeomTriMeshDataCreate=Module["_dGeomTriMeshDataCreate"]=wasmExports["dGeomTriMeshDataCreate"])();var _dGeomTriMeshDataDestroy=Module["_dGeomTriMeshDataDestroy"]=a0=>(_dGeomTriMeshDataDestroy=Module["_dGeomTriMeshDataDestroy"]=wasmExports["dGeomTriMeshDataDestroy"])(a0);var _dGeomTriMeshDataBuildSingle1=Module["_dGeomTriMeshDataBuildSingle1"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_dGeomTriMeshDataBuildSingle1=Module["_dGeomTriMeshDataBuildSingle1"]=wasmExports["dGeomTriMeshDataBuildSingle1"])(a0,a1,a2,a3,a4,a5,a6,a7);var _dGeomTriMeshDataBuildSingle=Module["_dGeomTriMeshDataBuildSingle"]=(a0,a1,a2,a3,a4,a5,a6)=>(_dGeomTriMeshDataBuildSingle=Module["_dGeomTriMeshDataBuildSingle"]=wasmExports["dGeomTriMeshDataBuildSingle"])(a0,a1,a2,a3,a4,a5,a6);var _dCreateTriMesh=Module["_dCreateTriMesh"]=(a0,a1,a2,a3,a4)=>(_dCreateTriMesh=Module["_dCreateTriMesh"]=wasmExports["dCreateTriMesh"])(a0,a1,a2,a3,a4);var _dCreateCylinder=Module["_dCreateCylinder"]=(a0,a1,a2)=>(_dCreateCylinder=Module["_dCreateCylinder"]=wasmExports["dCreateCylinder"])(a0,a1,a2);var _dGeomHeightfieldDataCreate=Module["_dGeomHeightfieldDataCreate"]=()=>(_dGeomHeightfieldDataCreate=Module["_dGeomHeightfieldDataCreate"]=wasmExports["dGeomHeightfieldDataCreate"])();var _dGeomHeightfieldDataBuildCallback=Module["_dGeomHeightfieldDataBuildCallback"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)=>(_dGeomHeightfieldDataBuildCallback=Module["_dGeomHeightfieldDataBuildCallback"]=wasmExports["dGeomHeightfieldDataBuildCallback"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);var _dGeomHeightfieldDataSetBounds=Module["_dGeomHeightfieldDataSetBounds"]=(a0,a1,a2)=>(_dGeomHeightfieldDataSetBounds=Module["_dGeomHeightfieldDataSetBounds"]=wasmExports["dGeomHeightfieldDataSetBounds"])(a0,a1,a2);var _dGeomHeightfieldDataDestroy=Module["_dGeomHeightfieldDataDestroy"]=a0=>(_dGeomHeightfieldDataDestroy=Module["_dGeomHeightfieldDataDestroy"]=wasmExports["dGeomHeightfieldDataDestroy"])(a0);var _dCreateHeightfield=Module["_dCreateHeightfield"]=(a0,a1,a2)=>(_dCreateHeightfield=Module["_dCreateHeightfield"]=wasmExports["dCreateHeightfield"])(a0,a1,a2);var _dBodyAddTorque=Module["_dBodyAddTorque"]=(a0,a1,a2,a3)=>(_dBodyAddTorque=Module["_dBodyAddTorque"]=wasmExports["dBodyAddTorque"])(a0,a1,a2,a3);var _dBodyAddForce=Module["_dBodyAddForce"]=(a0,a1,a2,a3)=>(_dBodyAddForce=Module["_dBodyAddForce"]=wasmExports["dBodyAddForce"])(a0,a1,a2,a3);var _dJointSetBallAnchor=Module["_dJointSetBallAnchor"]=(a0,a1,a2,a3)=>(_dJointSetBallAnchor=Module["_dJointSetBallAnchor"]=wasmExports["dJointSetBallAnchor"])(a0,a1,a2,a3);var _dJointGetBallAnchor=Module["_dJointGetBallAnchor"]=(a0,a1)=>(_dJointGetBallAnchor=Module["_dJointGetBallAnchor"]=wasmExports["dJointGetBallAnchor"])(a0,a1);var _dJointSetHingeAnchor=Module["_dJointSetHingeAnchor"]=(a0,a1,a2,a3)=>(_dJointSetHingeAnchor=Module["_dJointSetHingeAnchor"]=wasmExports["dJointSetHingeAnchor"])(a0,a1,a2,a3);var _dJointSetHingeAxis=Module["_dJointSetHingeAxis"]=(a0,a1,a2,a3)=>(_dJointSetHingeAxis=Module["_dJointSetHingeAxis"]=wasmExports["dJointSetHingeAxis"])(a0,a1,a2,a3);var _dJointGetHingeAnchor=Module["_dJointGetHingeAnchor"]=(a0,a1)=>(_dJointGetHingeAnchor=Module["_dJointGetHingeAnchor"]=wasmExports["dJointGetHingeAnchor"])(a0,a1);var _dJointGetHingeAxis=Module["_dJointGetHingeAxis"]=(a0,a1)=>(_dJointGetHingeAxis=Module["_dJointGetHingeAxis"]=wasmExports["dJointGetHingeAxis"])(a0,a1);var _dJointSetHingeParam=Module["_dJointSetHingeParam"]=(a0,a1,a2)=>(_dJointSetHingeParam=Module["_dJointSetHingeParam"]=wasmExports["dJointSetHingeParam"])(a0,a1,a2);var _dJointGetHingeParam=Module["_dJointGetHingeParam"]=(a0,a1)=>(_dJointGetHingeParam=Module["_dJointGetHingeParam"]=wasmExports["dJointGetHingeParam"])(a0,a1);var _dJointGetHingeAngle=Module["_dJointGetHingeAngle"]=a0=>(_dJointGetHingeAngle=Module["_dJointGetHingeAngle"]=wasmExports["dJointGetHingeAngle"])(a0);var _dJointGetHingeAngleRate=Module["_dJointGetHingeAngleRate"]=a0=>(_dJointGetHingeAngleRate=Module["_dJointGetHingeAngleRate"]=wasmExports["dJointGetHingeAngleRate"])(a0);var _dJointGetSliderPosition=Module["_dJointGetSliderPosition"]=a0=>(_dJointGetSliderPosition=Module["_dJointGetSliderPosition"]=wasmExports["dJointGetSliderPosition"])(a0);var _dJointGetSliderPositionRate=Module["_dJointGetSliderPositionRate"]=a0=>(_dJointGetSliderPositionRate=Module["_dJointGetSliderPositionRate"]=wasmExports["dJointGetSliderPositionRate"])(a0);var _dJointSetSliderAxis=Module["_dJointSetSliderAxis"]=(a0,a1,a2,a3)=>(_dJointSetSliderAxis=Module["_dJointSetSliderAxis"]=wasmExports["dJointSetSliderAxis"])(a0,a1,a2,a3);var _dJointGetSliderAxis=Module["_dJointGetSliderAxis"]=(a0,a1)=>(_dJointGetSliderAxis=Module["_dJointGetSliderAxis"]=wasmExports["dJointGetSliderAxis"])(a0,a1);var _dJointSetSliderParam=Module["_dJointSetSliderParam"]=(a0,a1,a2)=>(_dJointSetSliderParam=Module["_dJointSetSliderParam"]=wasmExports["dJointSetSliderParam"])(a0,a1,a2);var _dJointGetSliderParam=Module["_dJointGetSliderParam"]=(a0,a1)=>(_dJointGetSliderParam=Module["_dJointGetSliderParam"]=wasmExports["dJointGetSliderParam"])(a0,a1);var _dJointSetHinge2Anchor=Module["_dJointSetHinge2Anchor"]=(a0,a1,a2,a3)=>(_dJointSetHinge2Anchor=Module["_dJointSetHinge2Anchor"]=wasmExports["dJointSetHinge2Anchor"])(a0,a1,a2,a3);var _dJointSetHinge2Axis1=Module["_dJointSetHinge2Axis1"]=(a0,a1,a2,a3)=>(_dJointSetHinge2Axis1=Module["_dJointSetHinge2Axis1"]=wasmExports["dJointSetHinge2Axis1"])(a0,a1,a2,a3);var _dJointSetHinge2Axis2=Module["_dJointSetHinge2Axis2"]=(a0,a1,a2,a3)=>(_dJointSetHinge2Axis2=Module["_dJointSetHinge2Axis2"]=wasmExports["dJointSetHinge2Axis2"])(a0,a1,a2,a3);var _dJointSetHinge2Param=Module["_dJointSetHinge2Param"]=(a0,a1,a2)=>(_dJointSetHinge2Param=Module["_dJointSetHinge2Param"]=wasmExports["dJointSetHinge2Param"])(a0,a1,a2);var _dJointGetHinge2Anchor=Module["_dJointGetHinge2Anchor"]=(a0,a1)=>(_dJointGetHinge2Anchor=Module["_dJointGetHinge2Anchor"]=wasmExports["dJointGetHinge2Anchor"])(a0,a1);var _dJointGetHinge2Axis1=Module["_dJointGetHinge2Axis1"]=(a0,a1)=>(_dJointGetHinge2Axis1=Module["_dJointGetHinge2Axis1"]=wasmExports["dJointGetHinge2Axis1"])(a0,a1);var _dJointGetHinge2Axis2=Module["_dJointGetHinge2Axis2"]=(a0,a1)=>(_dJointGetHinge2Axis2=Module["_dJointGetHinge2Axis2"]=wasmExports["dJointGetHinge2Axis2"])(a0,a1);var _dJointGetHinge2Param=Module["_dJointGetHinge2Param"]=(a0,a1)=>(_dJointGetHinge2Param=Module["_dJointGetHinge2Param"]=wasmExports["dJointGetHinge2Param"])(a0,a1);var _dJointGetHinge2Angle1=Module["_dJointGetHinge2Angle1"]=a0=>(_dJointGetHinge2Angle1=Module["_dJointGetHinge2Angle1"]=wasmExports["dJointGetHinge2Angle1"])(a0);var _dJointGetHinge2Angle1Rate=Module["_dJointGetHinge2Angle1Rate"]=a0=>(_dJointGetHinge2Angle1Rate=Module["_dJointGetHinge2Angle1Rate"]=wasmExports["dJointGetHinge2Angle1Rate"])(a0);var _dJointGetHinge2Angle2Rate=Module["_dJointGetHinge2Angle2Rate"]=a0=>(_dJointGetHinge2Angle2Rate=Module["_dJointGetHinge2Angle2Rate"]=wasmExports["dJointGetHinge2Angle2Rate"])(a0);var _dJointSetUniversalAnchor=Module["_dJointSetUniversalAnchor"]=(a0,a1,a2,a3)=>(_dJointSetUniversalAnchor=Module["_dJointSetUniversalAnchor"]=wasmExports["dJointSetUniversalAnchor"])(a0,a1,a2,a3);var _dRFrom2Axes=Module["_dRFrom2Axes"]=(a0,a1,a2,a3,a4,a5,a6)=>(_dRFrom2Axes=Module["_dRFrom2Axes"]=wasmExports["dRFrom2Axes"])(a0,a1,a2,a3,a4,a5,a6);var _dJointSetUniversalAxis1=Module["_dJointSetUniversalAxis1"]=(a0,a1,a2,a3)=>(_dJointSetUniversalAxis1=Module["_dJointSetUniversalAxis1"]=wasmExports["dJointSetUniversalAxis1"])(a0,a1,a2,a3);var _dJointSetUniversalAxis2=Module["_dJointSetUniversalAxis2"]=(a0,a1,a2,a3)=>(_dJointSetUniversalAxis2=Module["_dJointSetUniversalAxis2"]=wasmExports["dJointSetUniversalAxis2"])(a0,a1,a2,a3);var _dJointGetUniversalAnchor=Module["_dJointGetUniversalAnchor"]=(a0,a1)=>(_dJointGetUniversalAnchor=Module["_dJointGetUniversalAnchor"]=wasmExports["dJointGetUniversalAnchor"])(a0,a1);var _dJointGetUniversalAnchor2=Module["_dJointGetUniversalAnchor2"]=(a0,a1)=>(_dJointGetUniversalAnchor2=Module["_dJointGetUniversalAnchor2"]=wasmExports["dJointGetUniversalAnchor2"])(a0,a1);var _dJointGetUniversalAxis1=Module["_dJointGetUniversalAxis1"]=(a0,a1)=>(_dJointGetUniversalAxis1=Module["_dJointGetUniversalAxis1"]=wasmExports["dJointGetUniversalAxis1"])(a0,a1);var _dJointGetUniversalAxis2=Module["_dJointGetUniversalAxis2"]=(a0,a1)=>(_dJointGetUniversalAxis2=Module["_dJointGetUniversalAxis2"]=wasmExports["dJointGetUniversalAxis2"])(a0,a1);var _dJointSetUniversalParam=Module["_dJointSetUniversalParam"]=(a0,a1,a2)=>(_dJointSetUniversalParam=Module["_dJointSetUniversalParam"]=wasmExports["dJointSetUniversalParam"])(a0,a1,a2);var _dJointGetUniversalParam=Module["_dJointGetUniversalParam"]=(a0,a1)=>(_dJointGetUniversalParam=Module["_dJointGetUniversalParam"]=wasmExports["dJointGetUniversalParam"])(a0,a1);var _dJointGetUniversalAngle1=Module["_dJointGetUniversalAngle1"]=a0=>(_dJointGetUniversalAngle1=Module["_dJointGetUniversalAngle1"]=wasmExports["dJointGetUniversalAngle1"])(a0);var _dJointGetUniversalAngle2=Module["_dJointGetUniversalAngle2"]=a0=>(_dJointGetUniversalAngle2=Module["_dJointGetUniversalAngle2"]=wasmExports["dJointGetUniversalAngle2"])(a0);var _dJointGetUniversalAngle1Rate=Module["_dJointGetUniversalAngle1Rate"]=a0=>(_dJointGetUniversalAngle1Rate=Module["_dJointGetUniversalAngle1Rate"]=wasmExports["dJointGetUniversalAngle1Rate"])(a0);var _dJointGetUniversalAngle2Rate=Module["_dJointGetUniversalAngle2Rate"]=a0=>(_dJointGetUniversalAngle2Rate=Module["_dJointGetUniversalAngle2Rate"]=wasmExports["dJointGetUniversalAngle2Rate"])(a0);var _dJointSetAMotorNumAxes=Module["_dJointSetAMotorNumAxes"]=(a0,a1)=>(_dJointSetAMotorNumAxes=Module["_dJointSetAMotorNumAxes"]=wasmExports["dJointSetAMotorNumAxes"])(a0,a1);var _dJointSetAMotorAxis=Module["_dJointSetAMotorAxis"]=(a0,a1,a2,a3,a4,a5)=>(_dJointSetAMotorAxis=Module["_dJointSetAMotorAxis"]=wasmExports["dJointSetAMotorAxis"])(a0,a1,a2,a3,a4,a5);var _dJointSetAMotorAngle=Module["_dJointSetAMotorAngle"]=(a0,a1,a2)=>(_dJointSetAMotorAngle=Module["_dJointSetAMotorAngle"]=wasmExports["dJointSetAMotorAngle"])(a0,a1,a2);var _dJointSetAMotorParam=Module["_dJointSetAMotorParam"]=(a0,a1,a2)=>(_dJointSetAMotorParam=Module["_dJointSetAMotorParam"]=wasmExports["dJointSetAMotorParam"])(a0,a1,a2);var _dJointSetAMotorMode=Module["_dJointSetAMotorMode"]=(a0,a1)=>(_dJointSetAMotorMode=Module["_dJointSetAMotorMode"]=wasmExports["dJointSetAMotorMode"])(a0,a1);var _dJointGetAMotorNumAxes=Module["_dJointGetAMotorNumAxes"]=a0=>(_dJointGetAMotorNumAxes=Module["_dJointGetAMotorNumAxes"]=wasmExports["dJointGetAMotorNumAxes"])(a0);var _dJointGetAMotorAxis=Module["_dJointGetAMotorAxis"]=(a0,a1,a2)=>(_dJointGetAMotorAxis=Module["_dJointGetAMotorAxis"]=wasmExports["dJointGetAMotorAxis"])(a0,a1,a2);var _dJointGetAMotorAxisRel=Module["_dJointGetAMotorAxisRel"]=(a0,a1)=>(_dJointGetAMotorAxisRel=Module["_dJointGetAMotorAxisRel"]=wasmExports["dJointGetAMotorAxisRel"])(a0,a1);var _dJointGetAMotorAngle=Module["_dJointGetAMotorAngle"]=(a0,a1)=>(_dJointGetAMotorAngle=Module["_dJointGetAMotorAngle"]=wasmExports["dJointGetAMotorAngle"])(a0,a1);var _dJointGetAMotorAngleRate=Module["_dJointGetAMotorAngleRate"]=(a0,a1)=>(_dJointGetAMotorAngleRate=Module["_dJointGetAMotorAngleRate"]=wasmExports["dJointGetAMotorAngleRate"])(a0,a1);var _dJointGetAMotorParam=Module["_dJointGetAMotorParam"]=(a0,a1)=>(_dJointGetAMotorParam=Module["_dJointGetAMotorParam"]=wasmExports["dJointGetAMotorParam"])(a0,a1);var _dJointGetAMotorMode=Module["_dJointGetAMotorMode"]=a0=>(_dJointGetAMotorMode=Module["_dJointGetAMotorMode"]=wasmExports["dJointGetAMotorMode"])(a0);var _dJointSetFixed=Module["_dJointSetFixed"]=a0=>(_dJointSetFixed=Module["_dJointSetFixed"]=wasmExports["dJointSetFixed"])(a0);var _dMassSetZero=Module["_dMassSetZero"]=a0=>(_dMassSetZero=Module["_dMassSetZero"]=wasmExports["dMassSetZero"])(a0);var _dMassSetParameters=Module["_dMassSetParameters"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)=>(_dMassSetParameters=Module["_dMassSetParameters"]=wasmExports["dMassSetParameters"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);var _dMassSetSphere=Module["_dMassSetSphere"]=(a0,a1,a2)=>(_dMassSetSphere=Module["_dMassSetSphere"]=wasmExports["dMassSetSphere"])(a0,a1,a2);var _dMassSetSphereTotal=Module["_dMassSetSphereTotal"]=(a0,a1,a2)=>(_dMassSetSphereTotal=Module["_dMassSetSphereTotal"]=wasmExports["dMassSetSphereTotal"])(a0,a1,a2);var _dMassSetCapsule=Module["_dMassSetCapsule"]=(a0,a1,a2,a3,a4)=>(_dMassSetCapsule=Module["_dMassSetCapsule"]=wasmExports["dMassSetCapsule"])(a0,a1,a2,a3,a4);var _dMassSetCapsuleTotal=Module["_dMassSetCapsuleTotal"]=(a0,a1,a2,a3,a4)=>(_dMassSetCapsuleTotal=Module["_dMassSetCapsuleTotal"]=wasmExports["dMassSetCapsuleTotal"])(a0,a1,a2,a3,a4);var _dMassAdjust=Module["_dMassAdjust"]=(a0,a1)=>(_dMassAdjust=Module["_dMassAdjust"]=wasmExports["dMassAdjust"])(a0,a1);var _dMassSetCylinder=Module["_dMassSetCylinder"]=(a0,a1,a2,a3,a4)=>(_dMassSetCylinder=Module["_dMassSetCylinder"]=wasmExports["dMassSetCylinder"])(a0,a1,a2,a3,a4);var _dMassSetCylinderTotal=Module["_dMassSetCylinderTotal"]=(a0,a1,a2,a3,a4)=>(_dMassSetCylinderTotal=Module["_dMassSetCylinderTotal"]=wasmExports["dMassSetCylinderTotal"])(a0,a1,a2,a3,a4);var _dMassSetBox=Module["_dMassSetBox"]=(a0,a1,a2,a3,a4)=>(_dMassSetBox=Module["_dMassSetBox"]=wasmExports["dMassSetBox"])(a0,a1,a2,a3,a4);var _dMassSetBoxTotal=Module["_dMassSetBoxTotal"]=(a0,a1,a2,a3,a4)=>(_dMassSetBoxTotal=Module["_dMassSetBoxTotal"]=wasmExports["dMassSetBoxTotal"])(a0,a1,a2,a3,a4);var _dMassTranslate=Module["_dMassTranslate"]=(a0,a1,a2,a3)=>(_dMassTranslate=Module["_dMassTranslate"]=wasmExports["dMassTranslate"])(a0,a1,a2,a3);var _dMassRotate=Module["_dMassRotate"]=(a0,a1)=>(_dMassRotate=Module["_dMassRotate"]=wasmExports["dMassRotate"])(a0,a1);var _dMassAdd=Module["_dMassAdd"]=(a0,a1)=>(_dMassAdd=Module["_dMassAdd"]=wasmExports["dMassAdd"])(a0,a1);var _dBodyCreate=Module["_dBodyCreate"]=a0=>(_dBodyCreate=Module["_dBodyCreate"]=wasmExports["dBodyCreate"])(a0);var _dBodyDestroy=Module["_dBodyDestroy"]=a0=>(_dBodyDestroy=Module["_dBodyDestroy"]=wasmExports["dBodyDestroy"])(a0);var _dBodySetLinearVel=Module["_dBodySetLinearVel"]=(a0,a1,a2,a3)=>(_dBodySetLinearVel=Module["_dBodySetLinearVel"]=wasmExports["dBodySetLinearVel"])(a0,a1,a2,a3);var _dBodySetAngularVel=Module["_dBodySetAngularVel"]=(a0,a1,a2,a3)=>(_dBodySetAngularVel=Module["_dBodySetAngularVel"]=wasmExports["dBodySetAngularVel"])(a0,a1,a2,a3);var _dBodyGetPosition=Module["_dBodyGetPosition"]=a0=>(_dBodyGetPosition=Module["_dBodyGetPosition"]=wasmExports["dBodyGetPosition"])(a0);var _dBodyGetRotation=Module["_dBodyGetRotation"]=a0=>(_dBodyGetRotation=Module["_dBodyGetRotation"]=wasmExports["dBodyGetRotation"])(a0);var _dBodyGetAngularVel=Module["_dBodyGetAngularVel"]=a0=>(_dBodyGetAngularVel=Module["_dBodyGetAngularVel"]=wasmExports["dBodyGetAngularVel"])(a0);var _dBodySetMass=Module["_dBodySetMass"]=(a0,a1)=>(_dBodySetMass=Module["_dBodySetMass"]=wasmExports["dBodySetMass"])(a0,a1);var _dBodyGetMass=Module["_dBodyGetMass"]=(a0,a1)=>(_dBodyGetMass=Module["_dBodyGetMass"]=wasmExports["dBodyGetMass"])(a0,a1);var _dBodyAddRelForce=Module["_dBodyAddRelForce"]=(a0,a1,a2,a3)=>(_dBodyAddRelForce=Module["_dBodyAddRelForce"]=wasmExports["dBodyAddRelForce"])(a0,a1,a2,a3);var _dBodyAddRelTorque=Module["_dBodyAddRelTorque"]=(a0,a1,a2,a3)=>(_dBodyAddRelTorque=Module["_dBodyAddRelTorque"]=wasmExports["dBodyAddRelTorque"])(a0,a1,a2,a3);var _dBodyAddForceAtPos=Module["_dBodyAddForceAtPos"]=(a0,a1,a2,a3,a4,a5,a6)=>(_dBodyAddForceAtPos=Module["_dBodyAddForceAtPos"]=wasmExports["dBodyAddForceAtPos"])(a0,a1,a2,a3,a4,a5,a6);var _dBodyAddForceAtRelPos=Module["_dBodyAddForceAtRelPos"]=(a0,a1,a2,a3,a4,a5,a6)=>(_dBodyAddForceAtRelPos=Module["_dBodyAddForceAtRelPos"]=wasmExports["dBodyAddForceAtRelPos"])(a0,a1,a2,a3,a4,a5,a6);var _dBodyAddRelForceAtPos=Module["_dBodyAddRelForceAtPos"]=(a0,a1,a2,a3,a4,a5,a6)=>(_dBodyAddRelForceAtPos=Module["_dBodyAddRelForceAtPos"]=wasmExports["dBodyAddRelForceAtPos"])(a0,a1,a2,a3,a4,a5,a6);var _dBodyAddRelForceAtRelPos=Module["_dBodyAddRelForceAtRelPos"]=(a0,a1,a2,a3,a4,a5,a6)=>(_dBodyAddRelForceAtRelPos=Module["_dBodyAddRelForceAtRelPos"]=wasmExports["dBodyAddRelForceAtRelPos"])(a0,a1,a2,a3,a4,a5,a6);var _dBodyGetForce=Module["_dBodyGetForce"]=a0=>(_dBodyGetForce=Module["_dBodyGetForce"]=wasmExports["dBodyGetForce"])(a0);var _dBodyGetTorque=Module["_dBodyGetTorque"]=a0=>(_dBodyGetTorque=Module["_dBodyGetTorque"]=wasmExports["dBodyGetTorque"])(a0);var _dBodyGetRelPointPos=Module["_dBodyGetRelPointPos"]=(a0,a1,a2,a3,a4)=>(_dBodyGetRelPointPos=Module["_dBodyGetRelPointPos"]=wasmExports["dBodyGetRelPointPos"])(a0,a1,a2,a3,a4);var _dBodyGetRelPointVel=Module["_dBodyGetRelPointVel"]=(a0,a1,a2,a3,a4)=>(_dBodyGetRelPointVel=Module["_dBodyGetRelPointVel"]=wasmExports["dBodyGetRelPointVel"])(a0,a1,a2,a3,a4);var _dBodyGetNumJoints=Module["_dBodyGetNumJoints"]=a0=>(_dBodyGetNumJoints=Module["_dBodyGetNumJoints"]=wasmExports["dBodyGetNumJoints"])(a0);var _dBodyGetJoint=Module["_dBodyGetJoint"]=(a0,a1)=>(_dBodyGetJoint=Module["_dBodyGetJoint"]=wasmExports["dBodyGetJoint"])(a0,a1);var _dBodyEnable=Module["_dBodyEnable"]=a0=>(_dBodyEnable=Module["_dBodyEnable"]=wasmExports["dBodyEnable"])(a0);var _dBodyDisable=Module["_dBodyDisable"]=a0=>(_dBodyDisable=Module["_dBodyDisable"]=wasmExports["dBodyDisable"])(a0);var _dBodyIsEnabled=Module["_dBodyIsEnabled"]=a0=>(_dBodyIsEnabled=Module["_dBodyIsEnabled"]=wasmExports["dBodyIsEnabled"])(a0);var _dJointCreateBall=Module["_dJointCreateBall"]=(a0,a1)=>(_dJointCreateBall=Module["_dJointCreateBall"]=wasmExports["dJointCreateBall"])(a0,a1);var _dJointCreateHinge=Module["_dJointCreateHinge"]=(a0,a1)=>(_dJointCreateHinge=Module["_dJointCreateHinge"]=wasmExports["dJointCreateHinge"])(a0,a1);var _dJointCreateSlider=Module["_dJointCreateSlider"]=(a0,a1)=>(_dJointCreateSlider=Module["_dJointCreateSlider"]=wasmExports["dJointCreateSlider"])(a0,a1);var _dJointCreateContact=Module["_dJointCreateContact"]=(a0,a1,a2)=>(_dJointCreateContact=Module["_dJointCreateContact"]=wasmExports["dJointCreateContact"])(a0,a1,a2);var _dJointCreateHinge2=Module["_dJointCreateHinge2"]=(a0,a1)=>(_dJointCreateHinge2=Module["_dJointCreateHinge2"]=wasmExports["dJointCreateHinge2"])(a0,a1);var _dJointCreateUniversal=Module["_dJointCreateUniversal"]=(a0,a1)=>(_dJointCreateUniversal=Module["_dJointCreateUniversal"]=wasmExports["dJointCreateUniversal"])(a0,a1);var _dJointCreateFixed=Module["_dJointCreateFixed"]=(a0,a1)=>(_dJointCreateFixed=Module["_dJointCreateFixed"]=wasmExports["dJointCreateFixed"])(a0,a1);var _dJointCreateNull=Module["_dJointCreateNull"]=(a0,a1)=>(_dJointCreateNull=Module["_dJointCreateNull"]=wasmExports["dJointCreateNull"])(a0,a1);var _dJointCreateAMotor=Module["_dJointCreateAMotor"]=(a0,a1)=>(_dJointCreateAMotor=Module["_dJointCreateAMotor"]=wasmExports["dJointCreateAMotor"])(a0,a1);var _dJointDestroy=Module["_dJointDestroy"]=a0=>(_dJointDestroy=Module["_dJointDestroy"]=wasmExports["dJointDestroy"])(a0);var _dJointGroupCreate=Module["_dJointGroupCreate"]=a0=>(_dJointGroupCreate=Module["_dJointGroupCreate"]=wasmExports["dJointGroupCreate"])(a0);var _dJointGroupDestroy=Module["_dJointGroupDestroy"]=a0=>(_dJointGroupDestroy=Module["_dJointGroupDestroy"]=wasmExports["dJointGroupDestroy"])(a0);var _dJointGroupEmpty=Module["_dJointGroupEmpty"]=a0=>(_dJointGroupEmpty=Module["_dJointGroupEmpty"]=wasmExports["dJointGroupEmpty"])(a0);var _dJointAttach=Module["_dJointAttach"]=(a0,a1,a2)=>(_dJointAttach=Module["_dJointAttach"]=wasmExports["dJointAttach"])(a0,a1,a2);var _dJointGetType=Module["_dJointGetType"]=a0=>(_dJointGetType=Module["_dJointGetType"]=wasmExports["dJointGetType"])(a0);var _dJointGetBody=Module["_dJointGetBody"]=(a0,a1)=>(_dJointGetBody=Module["_dJointGetBody"]=wasmExports["dJointGetBody"])(a0,a1);var _dAreConnected=Module["_dAreConnected"]=(a0,a1)=>(_dAreConnected=Module["_dAreConnected"]=wasmExports["dAreConnected"])(a0,a1);var _dWorldCreate=Module["_dWorldCreate"]=()=>(_dWorldCreate=Module["_dWorldCreate"]=wasmExports["dWorldCreate"])();var _dWorldDestroy=Module["_dWorldDestroy"]=a0=>(_dWorldDestroy=Module["_dWorldDestroy"]=wasmExports["dWorldDestroy"])(a0);var _dWorldSetGravity=Module["_dWorldSetGravity"]=(a0,a1,a2,a3)=>(_dWorldSetGravity=Module["_dWorldSetGravity"]=wasmExports["dWorldSetGravity"])(a0,a1,a2,a3);var _dWorldGetGravity=Module["_dWorldGetGravity"]=(a0,a1)=>(_dWorldGetGravity=Module["_dWorldGetGravity"]=wasmExports["dWorldGetGravity"])(a0,a1);var _dWorldSetERP=Module["_dWorldSetERP"]=(a0,a1)=>(_dWorldSetERP=Module["_dWorldSetERP"]=wasmExports["dWorldSetERP"])(a0,a1);var _dWorldGetERP=Module["_dWorldGetERP"]=a0=>(_dWorldGetERP=Module["_dWorldGetERP"]=wasmExports["dWorldGetERP"])(a0);var _dWorldSetCFM=Module["_dWorldSetCFM"]=(a0,a1)=>(_dWorldSetCFM=Module["_dWorldSetCFM"]=wasmExports["dWorldSetCFM"])(a0,a1);var _dWorldGetCFM=Module["_dWorldGetCFM"]=a0=>(_dWorldGetCFM=Module["_dWorldGetCFM"]=wasmExports["dWorldGetCFM"])(a0);var _dWorldStep=Module["_dWorldStep"]=(a0,a1)=>(_dWorldStep=Module["_dWorldStep"]=wasmExports["dWorldStep"])(a0,a1);var _dWorldQuickStep=Module["_dWorldQuickStep"]=(a0,a1)=>(_dWorldQuickStep=Module["_dWorldQuickStep"]=wasmExports["dWorldQuickStep"])(a0,a1);var _dWorldSetQuickStepNumIterations=Module["_dWorldSetQuickStepNumIterations"]=(a0,a1)=>(_dWorldSetQuickStepNumIterations=Module["_dWorldSetQuickStepNumIterations"]=wasmExports["dWorldSetQuickStepNumIterations"])(a0,a1);var _dWorldSetContactMaxCorrectingVel=Module["_dWorldSetContactMaxCorrectingVel"]=(a0,a1)=>(_dWorldSetContactMaxCorrectingVel=Module["_dWorldSetContactMaxCorrectingVel"]=wasmExports["dWorldSetContactMaxCorrectingVel"])(a0,a1);var _dWorldGetContactMaxCorrectingVel=Module["_dWorldGetContactMaxCorrectingVel"]=a0=>(_dWorldGetContactMaxCorrectingVel=Module["_dWorldGetContactMaxCorrectingVel"]=wasmExports["dWorldGetContactMaxCorrectingVel"])(a0);var _dWorldSetContactSurfaceLayer=Module["_dWorldSetContactSurfaceLayer"]=(a0,a1)=>(_dWorldSetContactSurfaceLayer=Module["_dWorldSetContactSurfaceLayer"]=wasmExports["dWorldSetContactSurfaceLayer"])(a0,a1);var _dWorldGetContactSurfaceLayer=Module["_dWorldGetContactSurfaceLayer"]=a0=>(_dWorldGetContactSurfaceLayer=Module["_dWorldGetContactSurfaceLayer"]=wasmExports["dWorldGetContactSurfaceLayer"])(a0);var _dCreatePlane=Module["_dCreatePlane"]=(a0,a1,a2,a3,a4)=>(_dCreatePlane=Module["_dCreatePlane"]=wasmExports["dCreatePlane"])(a0,a1,a2,a3,a4);var _dGeomPlaneSetParams=Module["_dGeomPlaneSetParams"]=(a0,a1,a2,a3,a4)=>(_dGeomPlaneSetParams=Module["_dGeomPlaneSetParams"]=wasmExports["dGeomPlaneSetParams"])(a0,a1,a2,a3,a4);var _dRFromAxisAndAngle=Module["_dRFromAxisAndAngle"]=(a0,a1,a2,a3,a4)=>(_dRFromAxisAndAngle=Module["_dRFromAxisAndAngle"]=wasmExports["dRFromAxisAndAngle"])(a0,a1,a2,a3,a4);var _dQFromAxisAndAngle=Module["_dQFromAxisAndAngle"]=(a0,a1,a2,a3,a4)=>(_dQFromAxisAndAngle=Module["_dQFromAxisAndAngle"]=wasmExports["dQFromAxisAndAngle"])(a0,a1,a2,a3,a4);var _dRFromEulerAngles=Module["_dRFromEulerAngles"]=(a0,a1,a2,a3)=>(_dRFromEulerAngles=Module["_dRFromEulerAngles"]=wasmExports["dRFromEulerAngles"])(a0,a1,a2,a3);var _dQSetIdentity=Module["_dQSetIdentity"]=a0=>(_dQSetIdentity=Module["_dQSetIdentity"]=wasmExports["dQSetIdentity"])(a0);var _dCreateSphere=Module["_dCreateSphere"]=(a0,a1)=>(_dCreateSphere=Module["_dCreateSphere"]=wasmExports["dCreateSphere"])(a0,a1);var _dGeomSphereSetRadius=Module["_dGeomSphereSetRadius"]=(a0,a1)=>(_dGeomSphereSetRadius=Module["_dGeomSphereSetRadius"]=wasmExports["dGeomSphereSetRadius"])(a0,a1);var ___errno_location=()=>(___errno_location=wasmExports["__errno_location"])();var _setThrew=(a0,a1)=>(_setThrew=wasmExports["setThrew"])(a0,a1);var stackSave=()=>(stackSave=wasmExports["stackSave"])();var stackRestore=a0=>(stackRestore=wasmExports["stackRestore"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["stackAlloc"])(a0);var dynCall_jiji=Module["dynCall_jiji"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module["dynCall_jiji"]=wasmExports["dynCall_jiji"])(a0,a1,a2,a3,a4);function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE!="undefined"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,"base64");return new Uint8Array(buf.buffer,buf.byteOffset,buf.length)}try{var decoded=atob(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();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()()}}run();var _resolve;var ODE={ready:false,readyPromise:new Promise(function(resolve){_resolve=resolve})};addOnPostRun(function(){var javascriptHeap={};var vec4=Module._malloc(4*4);var mat3=Module._malloc(4*3*4);var mass=Module._malloc((1+4+4*3)*4);var vec6=Module._malloc(6*4);function getVec6(){var mat=new Array(6);for(var i=0;i<6;i++)mat[i]=Module.getValue(vec6+i*4,"float");return mat}var sizeOfRotation=4*3*4;var dRSetIdentity=Module.cwrap("dRSetIdentity",null,["number"]);var dRFromAxisAndAngle=Module.cwrap("dRFromAxisAndAngle",null,["number","number","number","number","number"]);var dRFromEulerAngles=Module.cwrap("dRFromEulerAngles",null,["number","number","number","number"]);var dRFrom2Axes=Module.cwrap("dRFrom2Axes",null,["number","number","number","number","number","number","number"]);ODE.Rotation=function(){var pointer=arguments[0]||Module._malloc(sizeOfRotation);if(!javascriptHeap[pointer]){javascriptHeap[pointer]=this}this.getPointer=function(){return pointer};this.setIdentity=function(){dRSetIdentity(pointer);return this};this.setArray=function(mat){for(var i=0;i<12;i++)Module.setValue(pointer+i*4,mat[i],"float");return this};this.getArray=function(){return Module.HEAPF32.slice(pointer/4,pointer/4+12)};this.fromAxisAndAngle=function(ax,ay,az,angle){dRFromAxisAndAngle(pointer,ax,ay,az,angle);return this};this.fromEulerAngles=function(phi,theta,psi){dRFromEulerAngles(pointer,phi,theta,psi);return this}};var sizeOfQuaternion=4*4;var dQSetIdentity=Module.cwrap("dQSetIdentity",null,["number"]);var dQFromAxisAndAngle=Module.cwrap("dQFromAxisAndAngle",null,["number","number","number","number","number"]);ODE.Quaternion=function(){var pointer=arguments[0]||Module._malloc(sizeOfQuaternion);if(!javascriptHeap[pointer]){javascriptHeap[pointer]=this}this.getPointer=function(){return pointer};this.setIdentity=function(){dQSetIdentity(pointer);return this};this.setArray=function(quat){for(var i=0;i<4;i++)Module.setValue(pointer+i*4,quat[i],"float");return this};this.getArray=function(geom){return Module.HEAPF32.slice(pointer/4,pointer/4+4)};this.fromAxisAndAngle=function(ax,ay,az,angle){dQFromAxisAndAngle(pointer,ax,ay,az,angle);return this}};var sizeOfMass=(1+4+4*3)*4;var dMassSetZero=Module.cwrap("dMassSetZero",null,["number"]);var dMassSetParameters=Module.cwrap("dMassSetParameters",null,["number","number","number","number","number","number","number","number","number","number","number"]);var dMassSetSphere=Module.cwrap("dMassSetSphere",null,["number","number","number"]);var dMassSetSphereTotal=Module.cwrap("dMassSetSphereTotal",null,["number","number","number"]);var dMassSetCapsule=Module.cwrap("dMassSetCapsule",null,["number","number","number","number","number"]);var dMassSetCapsuleTotal=Module.cwrap("dMassSetCapsuleTotal",null,["number","number","number","number","number"]);var dMassSetCylinder=Module.cwrap("dMassSetCylinder",null,["number","number","number","number","number"]);var dMassSetCylinderTotal=Module.cwrap("dMassSetCylinderTotal",null,["number","number","number","number","number"]);var dMassSetBox=Module.cwrap("dMassSetBox",null,["number","number","number","number","number"]);var dMassSetBoxTotal=Module.cwrap("dMassSetBoxTotal",null,["number","number","number","number","number"]);var dMassAdjust=Module.cwrap("dMassAdjust",null,["number","number"]);var dMassTranslate=Module.cwrap("dMassTranslate",null,["number","number","number","number"]);var dMassRotate=Module.cwrap("dMassRotate",null,["number","number"]);var dMassAdd=Module.cwrap("dMassAdd",null,["number","number"]);ODE.Mass=function(){var pointer=arguments[0]||Module._malloc(sizeOfMass);this.getPointer=function(){return pointer};this.destroy=function(){return Module._free(pointer)};this.setZero=function(){dMassSetZero(pointer);return this};this.setParameters=function(mass,cgx,cgy,cgz,I11,I22,I33,I12,I13,I23){dMassSetParameters(pointer,mass,cgx,cgy,cgz,I11,I22,I33,I12,I13,I23);return this};this.setSphere=function(density,radius){dMassSetSphere(pointer,density,radius);return this};this.setSphereTotal=function(total_mass,radius){dMassSetSphereTotal(pointer,total_mass,radius);return this};this.setCapsule=function(density,direction,a,b){dMassSetCapsule(pointer,density,direction,a,b);return this};this.setCapsuleTotal=function(total_mass,direction,a,b){dMassSetCapsuleTotal(pointer,total_mass,direction,a,b);return this};this.setCylinder=function(density,direction,a,b){dMassSetCylinder(pointer,density,direction,a,b);return this};this.setCylinderTotal=function(total_mass,direction,a,b){dMassSetCylinderTotal(pointer,total_mass,direction,a,b);return this};this.setBox=function(density,lx,ly,lz){dMassSetBox(pointer,density,lx,ly,lz);return this};this.setBoxTotal=function(total_mass,lx,ly,lz){dMassSetBoxTotal(pointer,total_mass,lx,ly,lz);return this};this.adjust=function(newmass){dMassAdjust(pointer,newmass);return this};this.translate=function(x,y,z){dMassTranslate(pointer,x,y,z);return this};this.rotate=function(rotation){dMassRotate(mass,rotation.getPointer());return this};this.add=function(mass){dMassAdd(pointer,mass.getPointer());return this}};var dJointGroupCreate=Module.cwrap("dJointGroupCreate","number",["number"]);var dJointGroupDestroy=Module.cwrap("dJointGroupDestroy",null,["number"]);var dJointGroupEmpty=Module.cwrap("dJointGroupEmpty",null,["number"]);ODE.Joint={Types:{Unknown:0,Ball:1,Hinge:2,Slider:3,Contact:4,Universal:5,Hinge2:6,Fixed:7,Null:8,AMotor:9,LMotor:10,Plane2D:11},Parameters:{LoStop:0,HiStop:1,Vel:2,FMax:3,FudgeFactor:4,Bounce:5,StopERP:6,StopCFM:7,SuspensionERP:8,SuspensionCFM:9,LoStop2:256+0,HiStop2:256+1,Vel2:256+2,FMax2:256+3,FudgeFactor2:256+4,Bounce2:256+5,StopERP2:256+6,StopCFM2:256+7,SuspensionERP2:256+8,SuspensionCFM2:256+9,LoStop3:512+0,HiStop3:512+1,Vel3:512+2,FMax3:512+3,FudgeFactor3:512+4,Bounce3:512+5,StopERP3:512+6,StopCFM3:512+7,SuspensionERP3:512+8,SuspensionCFM3:512+9},AMotorModes:{User:0,Euler:1},Group:function(max_size){var pointer=dJointGroupCreate(max_size);if(!javascriptHeap[pointer]){javascriptHeap[pointer]=this}this.getPointer=function(){return pointer};this.destroy=function(){dJointDestroy(pointer)};this.empty=function(){dJointGroupEmpty(pointer);return this}}};var dJointCreateBall=Module.cwrap("dJointCreateBall","number",["number","number"]);var dJointCreateHinge=Module.cwrap("dJointCreateHinge","number",["number","number"]);var dJointCreateSlider=Module.cwrap("dJointCreateSlider","number",["number","number"]);var dJointCreateContact=Module.cwrap("dJointCreateContact","number",["number","number","number"]);var dJointCreateUniversal=Module.cwrap("dJointCreateUniversal","number",["number","number"]);var dJointCreateHinge2=Module.cwrap("dJointCreateHinge2","number",["number","number"]);var dJointCreateFixed=Module.cwrap("dJointCreateFixed","number",["number","number"]);var dJointCreateNull=Module.cwrap("dJointCreateNull","number",["number","number"]);var dJointCreateAMotor=Module.cwrap("dJointCreateAMotor","number",["number","number"]);var dJointDestroy=Module.cwrap("dJointDestroy",null,["number"]);var dJointAttach=Module.cwrap("dJointAttach",null,["number","number","number"]);var dJointGetType=Module.cwrap("dJointGetType","number",["number"]);var dJointGetBody=Module.cwrap("dJointGetBody","number",["number","number"]);var dJointSetBallAnchor=Module.cwrap("dJointSetBallAnchor",null,["number","number","number","number"]);var dJointGetBallAnchor=Module.cwrap("dJointGetBallAnchor",null,["number","number"]);var dJointSetHingeAnchor=Module.cwrap("dJointSetHingeAnchor",null,["number","number","number","number"]);var dJointGetHingeAnchor=Module.cwrap("dJointGetHingeAnchor",null,["number","number"]);var dJointSetHingeAxis=Module.cwrap("dJointSetHingeAxis",null,["number","number","number","number"]);var dJointGetHingeAxis=Module.cwrap("dJointGetHingeAxis",null,["number","number"]);var dJointSetHingeParam=Module.cwrap("dJointSetHingeParam",null,["number","number","number"]);var dJointGetHingeParam=Module.cwrap("dJointGetHingeParam","number",["number","number"]);var dJointGetHingeAngle=Module.cwrap("dJointGetHingeAngle","number",["number"]);var dJointGetHingeAngleRate=Module.cwrap("dJointGetHingeAngleRate","number",["number"]);var dJointSetSliderAxis=Module.cwrap("dJointSetSliderAxis",null,["number","number","number","number"]);var dJointGetSliderAxis=Module.cwrap("dJointGetSliderAxis",null,["number","number"]);var dJointSetSliderParam=Module.cwrap("dJointSetSliderParam",null,["number","number","number"]);var dJointGetSliderParam=Module.cwrap("dJointGetSliderParam","number",["number","number"]);var dJointGetSliderPosition=Module.cwrap("dJointGetSliderPosition","number",["number"]);var dJointGetSliderPositionRate=Module.cwrap("dJointGetSliderPositionRate","number",["number"]);var dJointSetUniversalAnchor=Module.cwrap("dJointSetUniversalAnchor",null,["number","number","number","number"]);var dJointSetUniversalAxis1=Module.cwrap("dJointSetUniversalAxis1",null,["number","number","number","number"]);var dJointSetUniversalAxis2=Module.cwrap("dJointSetUniversalAxis2",null,["number","number","number","number"]);var dJointSetUniversalParam=Module.cwrap("dJointSetUniversalParam",null,["number","number","number"]);var dJointGetUniversalAnchor=Module.cwrap("dJointGetUniversalAnchor",null,["number","number"]);var dJointGetUniversalAnchor2=Module.cwrap("dJointGetUniversalAnchor2",null,["number","number"]);var dJointGetUniversalAxis1=Module.cwrap("dJointGetUniversalAxis1",null,["number","number"]);var dJointGetUniversalAxis2=Module.cwrap("dJointGetUniversalAxis2",null,["number","number"]);var dJointGetUniversalParam=Module.cwrap("dJointGetUniversalParam","number",["number","number"]);var dJointGetUniversalAngle1=Module.cwrap("dJointGetUniversalAngle1","number",["number"]);var dJointGetUniversalAngle2=Module.cwrap("dJointGetUniversalAngle2","number",["number"]);var dJointGetUniversalAngle1Rate=Module.cwrap("dJointGetUniversalAngle1Rate","number",["number"]);var dJointGetUniversalAngle2Rate=Module.cwrap("dJointGetUniversalAngle2Rate","number",["number"]);var dJointSetHinge2Anchor=Module.cwrap("dJointSetHinge2Anchor",null,["number","number","number","number"]);var dJointGetHinge2Anchor=Module.cwrap("dJointGetHinge2Anchor",null,["number","number"]);var dJointSetHinge2Axis1=Module.cwrap("dJointSetHinge2Axis1",null,["number","number","number","number"]);var dJointSetHinge2Axis2=Module.cwrap("dJointSetHinge2Axis2",null,["number","number","number","number"]);var dJointGetHinge2Axis1=Module.cwrap("dJointGetHinge2Axis1",null,["number","number"]);var dJointGetHinge2Axis2=Module.cwrap("dJointGetHinge2Axis2",null,["number","number"]);var dJointSetHinge2Param=Module.cwrap("dJointSetHinge2Param",null,["number","number","number"]);var dJointGetHinge2Param=Module.cwrap("dJointGetHinge2Param","number",["number","number"]);var dJointGetHinge2Angle1=Module.cwrap("dJointGetHinge2Angle1","number",["number"]);var dJointGetHinge2Angle1Rate=Module.cwrap("dJointGetHinge2Angle1Rate","number",["number"]);var dJointGetHinge2Angle2Rate=Module.cwrap("dJointGetHinge2Angle2Rate","number",["number"]);var dJointSetAMotorParam=Module.cwrap("dJointSetAMotorParam",null,["number","number","number"]);var dJointGetAMotorParam=Module.cwrap("dJointGetAMotorParam","number",["number","number"]);var dJointSetAMotorMode=Module.cwrap("dJointSetAMotorMode",null,["number","number"]);var dJointGetAMotorMode=Module.cwrap("dJointGetAMotorMode","number",["number"]);var dJointSetAMotorNumAxes=Module.cwrap("dJointSetAMotorNumAxes",null,["number","number"]);var dJointGetAMotorNumAxes=Module.cwrap("dJointGetAMotorNumAxes","number",["number"]);var dJointSetAMotorAxis=Module.cwrap("dJointSetAMotorAxis",null,["number","number","number","number","number","number"]);var dJointGetAMotorAxis=Module.cwrap("dJointGetAMotorAxis",null,["number","number","number"]);var dJointGetAMotorAxisRel=Module.cwrap("dJointGetAMotorAxisRel","number",["number","number"]);var dJointSetAMotorAngle=Module.cwrap("dJointSetAMotorAngle",null,["number","number","number"]);var dJointGetAMotorAngle=Module.cwrap("dJointGetAMotorAngle","number",["number","number"]);var dJointGetAMotorAngleRate=Module.cwrap("dJointGetAMotorAngleRate","number",["number","number"]);var dJointSetFixed=Module.cwrap("dJointSetFixed",null,["number"]);function Joint(pointer){if(!javascriptHeap[pointer]){javascriptHeap[pointer]=this}var type=dJointGetType(pointer);this.getPointer=function(){return pointer};this.destroy=function(){dJointDestroy(pointer)};Object.defineProperty(this,"type",{value:type,writable:false,enumerable:true,configurable:false});this.attach=function(b1,b2){dJointAttach(pointer,b1?b1.getPointer():0,b2?b2.getPointer():0);return this};this.getBody=function(idx){var b=dJointGetBody(pointer,idx);return b?!javascriptHeap[b]?new Body(b):javascriptHeap[b]:null};this.setFixed=function(){dJointSetFixed(pointer);return this};switch(type){case ODE.Joint.Types.Ball:this.setAnchor=function(x,y,z){dJointSetBallAnchor(pointer,x,y,z);return this};this.getAnchor=function(){dJointGetBallAnchor(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};break;case ODE.Joint.Types.Hinge:this.setAnchor=function(x,y,z){dJointSetHingeAnchor(pointer,x,y,z);return this};this.getAnchor=function(){dJointGetHingeAnchor(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setAxis=function(x,y,z){dJointSetHingeAxis(pointer,x,y,z);return this};this.getAxis=function(){dJointGetHingeAxis(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setParam=function(parameter,val){dJointSetHingeParam(pointer,parameter,val);return this};this.getParam=function(parameter){return dJointGetHingeParam(pointer,parameter)};this.getAngle=function(){return dJointGetHingeAngle(pointer)};this.getAngleRate=function(){return dJointGetHingeAngleRate(pointer)};break;case ODE.Joint.Types.Slider:this.setAxis=function(x,y,z){dJointSetSliderAxis(pointer,x,y,z);return this};this.getAxis=function(){dJointGetSliderAxis(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setParam=function(parameter,val){dJointSetSliderParam(pointer,parameter,val);return this};this.getParam=function(parameter){return dJointGetSliderParam(pointer,parameter)};this.getPosition=function(){return dJointGetSliderPosition(pointer)};this.getPositionRate=function(){return dJointGetSliderPositionRate(pointer)};break;case ODE.Joint.Types.Universal:this.setAnchor=function(x,y,z){dJointSetUniversalAnchor(pointer,x,y,z);return this};this.getAnchor=function(){dJointGetUniversalAnchor(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.getAnchor2=function(){dJointGetUniversalAnchor2(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setAxis1=function(x,y,z){dJointSetUniversalAxis1(pointer,x,y,z);return this};this.getAxis1=function(){dJointGetUniversalAxis1(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setAxis2=function(x,y,z){dJointSetUniversalAxis2(pointer,x,y,z);return this};this.getAxis2=function(){dJointGetUniversalAxis2(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setParam=function(parameter,val){dJointSetUniversalParam(pointer,parameter,val);return this};this.getParam=function(parameter){return dJointGetUniversalParam(pointer,parameter)};this.getAngle1=function(){return dJointGetUniversalAngle1(pointer)};this.getAngle2=function(){return dJointGetUniversalAngle2(pointer)};this.getAngleRate1=function(){return dJointGetUniversalAngleRate1(pointer)};this.getAngleRate2=function(){return dJointGetUniversalAngleRate2(pointer)};break;case ODE.Joint.Types.Hinge2:this.setAnchor=function(x,y,z){dJointSetHinge2Anchor(pointer,x,y,z);return this};this.getAnchor=function(){dJointGetHinge2Anchor(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setAxis1=function(x,y,z){dJointSetHinge2Axis1(pointer,x,y,z);return this};this.getAxis1=function(){dJointGetHinge2Axis1(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setAxis2=function(x,y,z){dJointSetHinge2Axis2(pointer,x,y,z);return this};this.getAxis2=function(){dJointGetHinge2Axis2(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.setParam=function(parameter,val){dJointSetHinge2Param(pointer,parameter,val);return this};this.getParam=function(parameter){return dJointGetHinge2Param(pointer,parameter)};this.getAngle1=function(){return dJointGetHinge2Angle1(pointer)};this.getAngle1Rate=function(){return dJointGetHinge2Angle1Rate(pointer)};this.getAngle2Rate=function(){return dJointGetHinge2Angle2Rate(pointer)};break;case ODE.Joint.Types.AMotor:this.setParam=function(parameter,val){dJointSetAMotorParam(pointer,parameter,val);return this};this.getParam=function(parameter){return dJointGetAMotorParam(pointer,parameter)};this.setAMotorMode=function(mode){dJointSetAMotorMode(pointer,mode);return this};this.getAMotorMode=function(){return dJointGetAMotorMode(pointer)};this.setNumAxes=function(num){dJointSetAMotorNumAxes(pointer,num);return this};this.getNumAxes=function(){return dJointGetAMotorNumAxes(pointer)};this.setAxis=function(anum,rel,x,y,z){dJointSetAMotorAxis(pointer,anum,rel,x,y,z);return this};this.getAxis=function(anum){dJointGetAMotorAxis(pointer,anum,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.getAxisRel=function(anum){return dJointGetAMotorAxisRel(pointer,anum)};this.setAngle=function(anum,angle){dJointSetAMotorAngle(anum,angle);return this};this.getAngle=function(anum){return dJointGetAMotorAngle(pointer,anum)};this.getAngleRate=function(anum){return dJointGetAMotorAngleRate(pointer,anum)};break;default:break}}var sizeOfCantact=104;ODE.Contact=function(){var contact=function(){var pointer=arguments[0]||Module._malloc(sizeOfCantact);this.getPointer=function(){return pointer};this.surface={};Object.defineProperties(this.surface,{mode:{enumerable:true,get:function(){return Module.getValue(pointer,"i32")},set:function(val){Module.setValue(pointer,val,"i32")}},mu:{enumerable:true,get:function(){return Module.getValue(pointer+4,"float")},set:function(val){Module.setValue(pointer+4,val,"float")}},mu2:{enumerable:true,get:function(){return Module.getValue(pointer+8,"float")},set:function(val){Module.setValue(pointer+8,val,"float")}},bounce:{enumerable:true,get:function(){return Module.getValue(pointer+12,"float")},set:function(val){Module.setValue(pointer+12,val,"float")}},bounce_vel:{enumerable:true,get:function(){return Module.getValue(pointer+16,"float")},set:function(val){Module.setValue(pointer+16,val,"float")}},soft_erp:{enumerable:true,get:function(){return Module.getValue(pointer+20,"float")},set:function(val){Module.setValue(pointer+20,val,"float")}},soft_cfm:{enumerable:true,get:function(){return Module.getValue(pointer+24,"float")},set:function(val){Module.setValue(pointer+24,val,"float")}},motion1:{enumerable:true,get:function(){return Module.getValue(pointer+28,"float")},set:function(val){Module.setValue(pointer+24,val,"float")}},motion2:{enumerable:true,get:function(){return Module.getValue(pointer+32,"float")},set:function(val){Module.setValue(pointer+32,val,"float")}},slip1:{enumerable:true,get:function(){return Module.getValue(pointer+36,"float")},set:function(val){Module.setValue(pointer+36,val,"float")}},slip2:{enumerable:true,get:function(){return Module.getValue(pointer+40,"float")},set:function(val){Module.setValue(pointer+40,val,"float")}}});this.geom={};Object.defineProperties(this.geom,{pos:{enumerable:true,get:function(){return[Module.getValue(pointer+44,"float"),Module.getValue(vec4+48,"float"),Module.getValue(vec4+52,"float")]},set:function(val){Module.setValue(pointer+44,val[0],"float"),Module.setValue(pointer+48,val[1],"float"),Module.setValue(pointer+52,val[2],"float")}},normal:{enumerable:true,get:function(){return[Module.getValue(pointer+60,"float"),Module.getValue(vec4+64,"float"),Module.getValue(vec4+68,"float")]},set:function(val){Module.setValue(pointer+60,val[0],"float"),Module.setValue(pointer+64,val[1],"float"),Module.setValue(pointer+68,val[2],"float")}},depth:{enumerable:true,get:function(){return Module.getValue(pointer+76,"float")},set:function(val){Module.setValue(pointer+76,val,"float")}},g1:{enumerable:true,get:function(){var p=Module.getValue(pointer+80,"i32");return p?!javascriptHeap[p]?new Geom(p):javascriptHeap[p]:null},set:function(val){Module.setValue(pointer+80,val.getPointer(),"i32")}},g2:{enumerable:true,get:function(){var p=Module.getValue(pointer+84,"i32");return p?!javascriptHeap[p]?new Geom(p):javascriptHeap[p]:null},set:function(val){Module.setValue(pointer+84,val.getPointer(),"i32")}}});Object.defineProperty(this,"fdir1",{enumerable:true,get:function(){return[Module.getValue(pointer+88,"float"),Module.getValue(vec4+92,"float"),Module.getValue(vec4+96,"float")]},set:function(val){Module.setValue(pointer+88,val[0],"float"),Module.setValue(pointer+92,val[1],"float"),Module.setValue(pointer+96,val[2],"float")}})};contact.Mode={Mu2:1,FDir1:2,Bounce:4,SoftERP:8,SoftCFM:16,Motion1:32,Motion2:64,Slip1:128,Slip2:256,Approx0:0,Approx1_1:4096,Approx1_2:8192,Approx1:12288};return contact}();var dBodyCreate=Module.cwrap("dBodyCreate","number",["number"]);var dBodyDestroy=Module.cwrap("dBodyDestroy",null,["number"]);var dBodySetPosition=Module.cwrap("dBodySetPosition",null,["number","number","number","number"]);var dBodySetLinearVel=Module.cwrap("dBodySetLinearVel",null,["number","number","number","number"]);var dBodySetAngularVel=Module.cwrap("dBodySetAngularVel",null,["number","number","number","number"]);var dBodySetRotation=Module.cwrap("dBodySetRotation",null,["number","number"]);var dBodySetQuaternion=Module.cwrap("dBodySetQuaternion",null,["number","number"]);var dBodyGetPosition=Module.cwrap("dBodyGetPosition","number",["number"]);var dBodyGetRotation=Module.cwrap("dBodyGetRotation","number",["number"]);var dBodyGetQuaternion=Module.cwrap("dBodyGetQuaternion","number",["number"]);var dBodyGetLinearVel=Module.cwrap("dBodyGetLinearVel","number",["number"]);var dBodyGetAngularVel=Module.cwrap("dBodyGetAngularVel","number",["number"]);var dBodySetMass=Module.cwrap("dBodySetMass",null,["number","number"]);var dBodyGetMass=Module.cwrap("dBodyGetMass",null,["number","number"]);var dBodyAddForce=Module.cwrap("dBodyAddForce",null,["number","number","number","number"]);var dBodyGetForce=Module.cwrap("dBodyGetForce","number",["number"]);var dBodyAddTorque=Module.cwrap("dBodyAddTorque",null,["number","number","number","number"]);var dBodyGetTorque=Module.cwrap("dBodyGetTorque","number",["number"]);var dBodyAddRelForce=Module.cwrap("dBodyAddRelForce",null,["number","number","number","number"]);var dBodyAddRelTorque=Module.cwrap("dBodyAddRelTorque",null,["number","number","number","number"]);var dBodyAddForceAtPos=Module.cwrap("dBodyAddForceAtPos",null,["number","number","number","number","number","number","number"]);var dBodyAddForceAtRelPos=Module.cwrap("dBodyAddForceAtRelPos",null,["number","number","number","number","number","number","number"]);var dBodyAddRelForceAtPos=Module.cwrap("dBodyAddRelForceAtPos",null,["number","number","number","number","number","number","number"]);var dBodyAddRelForceAtRelPos=Module.cwrap("dBodyAddRelForceAtRelPos",null,["number","number","number","number","number","number","number"]);var dBodyGetRelPointPos=Module.cwrap("dBodyGetRelPointPos",null,["number","number","number","number","number"]);var dBodyGetRelPointVel=Module.cwrap("dBodyGetRelPointVel",null,["number","number","number","number","number"]);var dBodyEnable=Module.cwrap("dBodyEnable",null,["number"]);var dBodyDisable=Module.cwrap("dBodyDisable",null,["number"]);var dBodyIsEnabled=Module.cwrap("dBodyIsEnabled","number",["number"]);var dBodyGetNumJoints=Module.cwrap("dBodyGetNumJoints","number",["number"]);var dBodyGetJoint=Module.cwrap("dBodyGetJoint","number",["number","number"]);var dAreConnected=Module.cwrap("dAreConnected","number",["number","number"]);function Body(pointer){if(!javascriptHeap[pointer]){javascriptHeap[pointer]=this}this.getPointer=function(){return pointer};this.destroy=function(){dBodyDestroy(pointer)};this.setPosition=function(x,y,z){dBodySetPosition(pointer,x,y,z);return this};this.setRotation=function(rotation){dBodySetRotation(pointer,rotation.getPointer());return this};this.setQuaternion=function(quat){dBodySetQuaternion(pointer,quat.getPointer());return this};this.setLinearVel=function(x,y,z){dBodySetLinearVel(pointer,x,y,z);return this};this.setAngularVel=function(x,y,z){dBodySetAngularVel(pointer,x,y,z);return this};this.getPosition=function(){var p=dBodyGetPosition(pointer);return Module.HEAPF32.slice(p/4,p/4+3)};this.getRotation=function(){var p=dBodyGetRotation(pointer);return p?!javascriptHeap[p]?new ODE.Rotation(p):javascriptHeap[p]:null};this.getQuaternion=function(){var p=dBodyGetQuaternion(pointer);return p?!javascriptHeap[p]?new ODE.Quaternion(p):javascriptHeap[p]:null};this.getLinearVel=function(){var p=dBodyGetLinearVel(pointer);return Module.HEAPF32.slice(p/4,p/4+3)};this.getAngularVel=function(){var p=dBodyGetAngularVel(pointer);return Module.HEAPF32.slice(p/4,p/4+3)};this.setMass=function(mass){dBodySetMass(pointer,mass.getPointer());return this};this.getMass=function(){var pmass=Module._malloc(sizeOfMass);dBodyGetMass(pointer,pmass);return new ODE.Mass(pmass)};this.addForce=function(fx,fy,fz){dBodyAddForce(pointer,fx,fy,fz);return this};this.addTorque=function(fx,fy,fz){dBodyAddTorque(pointer,fx,fy,fz);return this};this.addRelForce=function(fx,fy,fz){dBodyAddRelForce(pointer,fx,fy,fz);return this};this.addRelTorque=function(fx,fy,fz){dBodyAddRelTorque(pointer,fx,fy,fz);return this};this.addForceAtPos=function(fx,fy,fz,px,py,pz){dBodyAddForceAtPos(pointer,fx,fy,fz,px,py,pz);return this};this.addForceAtRelPos=function(fx,fy,fz,px,py,pz){dBodyAddForceAtRelPos(pointer,fx,fy,fz,px,py,pz);return this};this.addRelForceAtPos=function(fx,fy,fz,px,py,pz){dBodyAddRelForceAtPos(pointer,fx,fy,fz,px,py,pz);return this};this.addRelForceAtRelPos=function(fx,fy,fz,px,py,pz){dBodyAddRelForceAtRelPos(pointer,fx,fy,fz,px,py,pz);return this};this.getForce=function(){var p=dBodyGetForce(pointer);return Module.HEAPF32.slice(p/4,p/4+3)};this.getTorque=function(){var p=dBodyGetTorque(pointer);return Module.HEAPF32.slice(p/4,p/4+3)};this.getRelPointPos=function(px,py,pz){dBodyGetRelPointPos(pointer,px,py,pz,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.getRelPointVel=function(px,py,pz){dBodyGetRelPointVel(pointer,px,py,pz,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};this.enable=function(){dBodyEnable(pointer);return this};this.disable=function(){dBodyDisable(pointer);return this};this.isEnabled=function(){return dBodyIsEnabled(pointer)};this.getNumJoints=function(){return dBodyGetNumJoints(pointer)};this.getJoint=function(idx){var j=dBodyGetJoint(pointer,idx);return j?!javascriptHeap[j]?new Joint(j):javascriptHeap[b]:null}}ODE.Body={areConnected:function(b1,b2){return dAreConnected(b1?b1.getPointer():0,b2?b2.getPointer():0)}};var dWorldCreate=Module.cwrap("dWorldCreate","number",[]);var dWorldDestroy=Module.cwrap("dWorldDestroy",null,["number"]);var dWorldSetGravity=Module.cwrap("dWorldSetGravity",null,["number","number","number","number"]);var dWorldGetGravity=Module.cwrap("dWorldGetGravity",null,["number","number"]);var dWorldSetERP=Module.cwrap("dWorldSetERP",null,["number","number"]);var dWorldGetERP=Module.cwrap("dWorldGetERP","number",["number"]);var dWorldSetCFM=Module.cwrap("dWorldSetCFM",null,["number","number"]);var dWorldGetCFM=Module.cwrap("dWorldGetCFM","number",["number"]);var dWorldSetContactMaxCorrectingVel=Module.cwrap("dWorldSetContactMaxCorrectingVel",null,["number","number"]);var dWorldGetContactMaxCorrectingVel=Module.cwrap("dWorldGetContactMaxCorrectingVel","number",["number"]);var dWorldSetContactSurfaceLayer=Module.cwrap("dWorldSetContactSurfaceLayer",null,["number","number"]);var dWorldGetContactSurfaceLayer=Module.cwrap("dWorldGetContactSurfaceLayer","number",["number"]);var dWorldStep=Module.cwrap("dWorldStep",null,["number","number"]);var dWorldSetQuickStepNumIterations=Module.cwrap("dWorldSetQuickStepNumIterations",null,["number","number"]);var dWorldQuickStep=Module.cwrap("dWorldQuickStep",null,["number","number"]);ODE.World=function(){var pointer=arguments[0]||dWorldCreate();this.getPointer=function(){return pointer};this.destroy=function(){dWorldDestroy(pointer)};this.setGravity=function(x,y,z){dWorldSetGravity(pointer,x,y,z);return this};this.getGravity=function(){dWorldGetGravity(pointer,vec4);return[Module.getValue(vec4,"float"),Module.getValue(vec4+4,"float"),Module.getValue(vec4+8,"float")]};Object.defineProperties(this,{ERP:{enumerable:true,get:function(){return dWorldGetERP(pointer)},set:function(val){dWorldSetERP(pointer,val)}},CFM:{enumerable:true,get:function(){return dWorldGetCFM(pointer)},set:function(val){dWorldSetCFM(pointer,val)}},ContactMaxCorrectingVel:{enumerable:true,get:function(){return dWorldGetContactMaxCorrectingVel(pointer)},set:function(val){dWorldSetContactMaxCorrectingVel(pointer,val)}},ContactSurfaceLayer:{enumerable:true,get:function(){return dWorldGetContactSurfaceLayer(pointer)},set:function(val){dWorldSetContactSurfaceLayer(pointer,val)}}});this.step=function(stepsize){dWorldStep(pointer,stepsize);return this};this.quickStep=function(stepsize){dWorldQuickStep(pointer,stepsize);return this};this.setQuickStepNumIterations=function(num){dWorldSetQuickStepNumIterations(pointer,num);return this};this.createBody=function(){return new Body(dBodyCreate(pointer))};this.createBallJoint=function(group){return new Joint(dJointCreateBall(pointer,group?group.getPointer():0))};this.createHingeJoint=function(group){return new Joint(dJointCreateHinge(pointer,group?group.getPointer():0))};this.createSliderJoint=function(group){return new Joint(dJointCreateSlider(pointer,group?group.getPointer():0))};this.createContactJoint=function(group,contact){return new Joint(dJointCreateContact(pointer,group?group.getPointer():0,contact.getPointer()))};this.createHinge2Joint=function(group){return new Joint(dJointCreateHinge2(pointer,group?group.getPointer():0))};this.createFixedJoint=function(group){return new Joint(dJointCreateFixed(pointer,group?group.getPointer():0))};this.createNullJoint=function(group){return new Joint(dJointCreateNull(pointer,group?group.getPointer():0))};this.createAMotorJoint=function(group){return new Joint(dJointCreateAMotor(pointer,group?group.getPointer():0))}};var dCreateSphere=Module.cwrap("dCreateSphere","number",["number","number"]);var dCreateBox=Module.cwrap("dCreateBox","number",["number","number","number","number"]);var dCreatePlane=Module.cwrap("dCreatePlane","number",["number","number","number","number","number"]);var dCreateCapsule=Module.cwrap("dCreateCapsule","number",["number","number","number"]);var dCreateCylinder=Module.cwrap("dCreateCylinder","number",["number","number","number"]);var dCreateGeomTransform=Module.cwrap("dCreateGeomTransform","number",["number"]);var dGeomGetClass=Module.cwrap("dGeomGetClass","number",["number"]);var dGeomDestroy=Module.cwrap("dGeomDestroy",null,["number"]);var dGeomSetPosition=Module.cwrap("dGeomSetPosition",null,["number","number","number","number"]);var dGeomSetRotation=Module.cwrap("dGeomSetRotation",null,["number","number"]);var dGeomGetPosition=Module.cwrap("dGeomGetPosition","number",["number"]);var dGeomGetRotation=Module.cwrap("dGeomGetRotation","number",["number"]);var dGeomSetBody=Module.cwrap("dGeomSetBody",null,["number","number"]);var dGeomGetBody=Module.cwrap("dGeomGetBody","number",["number"]);var dGeomGetAABB=Module.cwrap("dGeomGetAABB",null,["number","number"]);var dGeomGetSpaceAABB=Module.cwrap("dGeomGetRotation","number",["number"]);var dGeomSphereSetRadius=Module.cwrap("dGeomSphereSetRadius",null,["number","number"]);var dGeomBoxSetLengths=Module.cwrap("dGeomBoxSetLengths",null,["number","number","number","number"]);var dGeomPlaneSetParams=Module.cwrap("dGeomPlaneSetParams",null,["number","number","number","number","number"]);var dGeomCapsuleSetParams=Module.cwrap("dGeomCapsuleSetParams",null,["number","number","number"]);var dGeomSphereGetRadius=Module.cwrap("dGeomSphereGetRadius","number",["number"]);var dGeomBoxGetLengths=Module.cwrap("dGeomBoxGetLengths",null,["number","number"]);var dGeomPlaneGetParams=Module.cwrap("dGeomPlaneGetParams",null,["number","number"]);var dGeomCapsuleGetParams=Module.cwrap("dGeomCapsuleGetParams",null,["number","number","number"]);var dGeomTransformSetGeom=Module.cwrap("dGeomTransformSetGeom",null,["number","number"]);var dGeomTransformGetGeom=Module.cwrap("dGeomTransformGetGeom","number",["number"]);var dGeomTransformSetCleanup=Module.cwrap("dGeomTransformSetCleanup",null,["number","number"]);var dGeomTransformGetCleanup=Module.cwrap("dGeomTransformGetCleanup","number",["number"]);var dCollide=Module.cwrap("dCollide","number",["number","number","number","number","number"]);ODE.Geom={Types:{Sphere:1,Box:2,Capsule:3,Cylinder:4,Plane:5,Ray:6,Convex:7,Transform:8,TriMesh:9,Heightfield:10},collide:function(g1,g2,MaxContact,contactCB){var contacts=Module._malloc(MaxContact*sizeOfCantact);var n=dCollide(g1?g1.getPointer():0,g2?g2.getPointer():0,MaxContact,contacts+44,sizeOfCantact);for(var i=0;i/dev/null 2>&1; then + export CC="$CC -mtune=native -march=native" + fi + ;; + esac + if [ -n "$WE_HATE_OUR_USERS" ]; then + export CC="$CC -fno-common" + fi + shift + ;; + *) + break + ;; + esac +done +TARGETS="sdl-$debug" +if [ x"`uname`" = x"Darwin" ]; then + export CC="$CC -fno-reorder-blocks" +fi + +if [ $# -gt 0 ] && [ x"$1" = x"" ]; then + # if we give the command make the arg "", it will surely fail (invalid filename), + # so better handle it as an empty client option + BAD_TARGETS=" " + shift +elif [ -n "$1" ]; then + BAD_TARGETS= + TARGETS_SAVE=$TARGETS + TARGETS= + for X in $1; do + case "$X" in + sdl) + TARGETS="$TARGETS sdl-$debug" + ;; + dedicated) + export MAKE="make" + export CC="gcc" + TARGETS="$TARGETS sv-$debug" + ;; + *) + BAD_TARGETS="$BAD_TARGETS $X" + ;; + esac + done + if [ -n "$TARGETS" ]; then # at least a valid client + shift + else # no valid client, let's assume this option is not meant to be a client then + TARGETS=$TARGETS_SAVE + BAD_TARGETS= + fi +fi +if [ -z "$MAKEFLAGS" ]; then + ncpus=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1` + if [ $ncpus -gt 1 ]; then + MAKEFLAGS=-j$ncpus + fi +elif echo $MAKEFLAGS | head -c1 | grep -qv -; then # MAKEFLAGS starts with a single letter option + MAKEFLAGS=-$(echo $MAKEFLAGS) # echo here and above will trim whitespaces +fi +# No cp commands, we want to use static linking instead. +export CC="$CC -I../../../../misc/builddeps/emscripten/d0_blind_id/include" +export CC="$CC -L../../../../misc/builddeps/emscripten/d0_blind_id/lib" +export CC="$CC -Wl,-rpath,../../../../misc/builddeps/emscripten/d0_blind_id/lib" +export CC="$CC -I../../../../misc/builddeps/emscripten/gmp/include" +export CC="$CC -L../../../../misc/builddeps/emscripten/gmp/lib" +export CC="$CC -Wl,-rpath,../../../../misc/builddeps/emscripten/gmp/lib" +MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/emscripten/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/emscripten/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/emscripten/d0_blind_id/lib/libd0_rijndael.a" +compiled0=false +;; \ No newline at end of file diff --git a/misc/tools/all/xonotic.subr b/misc/tools/all/xonotic.subr index 0f65ac26..5876ccfa 100644 --- a/misc/tools/all/xonotic.subr +++ b/misc/tools/all/xonotic.subr @@ -22,6 +22,9 @@ case "$cmd" in fi done ;; + compile-emscripten) + misc/tools/all/emscripten.subr $1 + ;; compile) cleand0=false cleandp=false -- 2.39.2