<?hh

/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 3.0.11
 *
 * This file is not intended to be easily readable and contains a number of
 * coding conventions designed to improve portability and efficiency. Do not make
 * changes to this file unless you know what you are doing--modify the SWIG
 * interface file instead.
 * ----------------------------------------------------------------------------- */
<<__Native>>
function fact(int $arg1) : int;

<<__Native>>
function my_mod(...$argv): mixed;

<<__Native>>
function print_pair(int $arg1, int $arg2) : void;

<<__Native>>
function overprint(...$argv): mixed;

<<__Native>>
function add(mixed& $arg1, mixed& $arg2, mixed& $arg3) : void;

