MathContext.prototype.getDigits=getDigits;
MathContext.prototype.getForm=getForm;
MathContext.prototype.getLostDigits=getLostDigits;
MathContext.prototype.getRoundingMode=getRoundingMode;
MathContext.prototype.toString=toString;
MathContext.prototype.isValidRound=isValidRound;
MathContext.prototype.PLAIN=0;
MathContext.prototype.SCIENTIFIC=1;
MathContext.prototype.ENGINEERING=2;
MathContext.prototype.ROUND_CEILING=2;
MathContext.prototype.ROUND_DOWN=1;
MathContext.prototype.ROUND_FLOOR=3;
MathContext.prototype.ROUND_HALF_DOWN=5;
MathContext.prototype.ROUND_HALF_EVEN=6;
MathContext.prototype.ROUND_HALF_UP=4;
MathContext.prototype.ROUND_UNNECESSARY=7;
MathContext.prototype.ROUND_UP=0;
MathContext.prototype.DEFAULT_FORM=MathContext.prototype.SCIENTIFIC;
MathContext.prototype.DEFAULT_DIGITS=9;
MathContext.prototype.DEFAULT_LOSTDIGITS=false;
MathContext.prototype.DEFAULT_ROUNDINGMODE=MathContext.prototype.ROUND_HALF_UP;
MathContext.prototype.MIN_DIGITS=0;
MathContext.prototype.MAX_DIGITS=999999999;
MathContext.prototype.ROUNDS=new Array(MathContext.prototype.ROUND_HALF_UP,MathContext.prototype.ROUND_UNNECESSARY,MathContext.prototype.ROUND_CEILING,MathContext.prototype.ROUND_DOWN,MathContext.prototype.ROUND_FLOOR,MathContext.prototype.ROUND_HALF_DOWN,MathContext.prototype.ROUND_HALF_EVEN,MathContext.prototype.ROUND_UP);
MathContext.prototype.ROUNDWORDS=new Array("ROUND_HALF_UP","ROUND_UNNECESSARY","ROUND_CEILING","ROUND_DOWN","ROUND_FLOOR","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_UP");
MathContext.prototype.DEFAULT=new MathContext(MathContext.prototype.DEFAULT_DIGITS,MathContext.prototype.DEFAULT_FORM,MathContext.prototype.DEFAULT_LOSTDIGITS,MathContext.prototype.DEFAULT_ROUNDINGMODE);
function MathContext(){
this.digits=0;
this.form=0;
this.lostDigits=false;
this.roundingMode=0;
var _1=this.DEFAULT_FORM;
var _2=this.DEFAULT_LOSTDIGITS;
var _3=this.DEFAULT_ROUNDINGMODE;
if(MathContext.arguments.length==4){
_1=MathContext.arguments[1];
_2=MathContext.arguments[2];
_3=MathContext.arguments[3];
}else{
if(MathContext.arguments.length==3){
_1=MathContext.arguments[1];
_2=MathContext.arguments[2];
}else{
if(MathContext.arguments.length==2){
_1=MathContext.arguments[1];
}else{
if(MathContext.arguments.length!=1){
throw "MathContext(): "+MathContext.arguments.length+" arguments given; expected 1 to 4";
}
}
}
}
var _4=MathContext.arguments[0];
if(_4!=this.DEFAULT_DIGITS){
if(_4<this.MIN_DIGITS){
throw "MathContext(): Digits too small: "+_4;
}
if(_4>this.MAX_DIGITS){
throw "MathContext(): Digits too large: "+_4;
}
}
if(_1==this.SCIENTIFIC){
}else{
if(_1==this.ENGINEERING){
}else{
if(_1==this.PLAIN){
}else{
throw "MathContext() Bad form value: "+_1;
}
}
}
if((!(this.isValidRound(_3)))){
throw "MathContext(): Bad roundingMode value: "+_3;
}
this.digits=_4;
this.form=_1;
this.lostDigits=_2;
this.roundingMode=_3;
return;
}
function getDigits(){
return this.digits;
}
function getForm(){
return this.form;
}
function getLostDigits(){
return this.lostDigits;
}
function getRoundingMode(){
return this.roundingMode;
}
function toString(){
var _5=null;
var r=0;
var _7=null;
if(this.form==this.SCIENTIFIC){
_5="SCIENTIFIC";
}else{
if(this.form==this.ENGINEERING){
_5="ENGINEERING";
}
}
els;
_5="PLAIN";
var $1=this.ROUNDS.length;
r=0;
r:
for(;$1>0;$1--,r++){
if(this.roundingMode==this.ROUNDS[r]){
_7=this.ROUNDWORDS[r];
break r;
}
}
return "digits="+this.digits+" "+"form="+_5+" "+"lostDigits="+(this.lostDigits?"1":"0")+" "+"roundingMode="+_7;
}
function isValidRound(_9){
var r=0;
var $2=this.ROUNDS.length;
r=0;
r:
for(;$2>0;$2--,r++){
if(_9==this.ROUNDS[r]){
return true;
}
}
return false;
}

function div(a,b){
return (a-(a%b))/b;
}
function arraycopy(_3,_4,_5,_6,_7){
var i;
if(_6>_4){
for(i=_7-1;i>=0;--i){
_5[i+_6]=_3[i+_4];
}
}else{
for(i=0;i<_7;++i){
_5[i+_6]=_3[i+_4];
}
}
}
function createArrayWithZeros(_9){
var _a=new Array(_9);
var i;
for(i=0;i<_9;++i){
_a[i]=0;
}
return _a;
}
BigDecimal.prototype.div=div;
BigDecimal.prototype.arraycopy=arraycopy;
BigDecimal.prototype.createArrayWithZeros=createArrayWithZeros;
BigDecimal.prototype.abs=abs;
BigDecimal.prototype.add=add;
BigDecimal.prototype.compareTo=compareTo;
BigDecimal.prototype.divide=divide;
BigDecimal.prototype.divideInteger=divideInteger;
BigDecimal.prototype.max=max;
BigDecimal.prototype.min=min;
BigDecimal.prototype.multiply=multiply;
BigDecimal.prototype.negate=negate;
BigDecimal.prototype.plus=plus;
BigDecimal.prototype.pow=pow;
BigDecimal.prototype.remainder=remainder;
BigDecimal.prototype.subtract=subtract;
BigDecimal.prototype.equals=equals;
BigDecimal.prototype.format=format;
BigDecimal.prototype.intValueExact=intValueExact;
BigDecimal.prototype.movePointLeft=movePointLeft;
BigDecimal.prototype.movePointRight=movePointRight;
BigDecimal.prototype.scale=scale;
BigDecimal.prototype.setScale=setScale;
BigDecimal.prototype.signum=signum;
BigDecimal.prototype.toString=toString;
BigDecimal.prototype.layout=layout;
BigDecimal.prototype.intcheck=intcheck;
BigDecimal.prototype.dodivide=dodivide;
BigDecimal.prototype.bad=bad;
BigDecimal.prototype.badarg=badarg;
BigDecimal.prototype.extend=extend;
BigDecimal.prototype.byteaddsub=byteaddsub;
BigDecimal.prototype.diginit=diginit;
BigDecimal.prototype.clone=clone;
BigDecimal.prototype.checkdigits=checkdigits;
BigDecimal.prototype.round=round;
BigDecimal.prototype.allzero=allzero;
BigDecimal.prototype.finish=finish;
BigDecimal.prototype.ROUND_CEILING=MathContext.prototype.ROUND_CEILING;
BigDecimal.prototype.ROUND_DOWN=MathContext.prototype.ROUND_DOWN;
BigDecimal.prototype.ROUND_FLOOR=MathContext.prototype.ROUND_FLOOR;
BigDecimal.prototype.ROUND_HALF_DOWN=MathContext.prototype.ROUND_HALF_DOWN;
BigDecimal.prototype.ROUND_HALF_EVEN=MathContext.prototype.ROUND_HALF_EVEN;
BigDecimal.prototype.ROUND_HALF_UP=MathContext.prototype.ROUND_HALF_UP;
BigDecimal.prototype.ROUND_UNNECESSARY=MathContext.prototype.ROUND_UNNECESSARY;
BigDecimal.prototype.ROUND_UP=MathContext.prototype.ROUND_UP;
BigDecimal.prototype.ispos=1;
BigDecimal.prototype.iszero=0;
BigDecimal.prototype.isneg=-1;
BigDecimal.prototype.MinExp=-999999999;
BigDecimal.prototype.MaxExp=999999999;
BigDecimal.prototype.MinArg=-999999999;
BigDecimal.prototype.MaxArg=999999999;
BigDecimal.prototype.plainMC=new MathContext(0,MathContext.prototype.PLAIN);
BigDecimal.prototype.bytecar=new Array((90+99)+1);
BigDecimal.prototype.bytedig=diginit();
BigDecimal.prototype.ZERO=new BigDecimal("0");
BigDecimal.prototype.ONE=new BigDecimal("1");
BigDecimal.prototype.TEN=new BigDecimal("10");
function BigDecimal(){
this.ind=0;
this.form=MathContext.prototype.PLAIN;
this.mant=null;
this.exp=0;
if(BigDecimal.arguments.length==0){
return;
}
var _c;
var _d;
var _e;
if(BigDecimal.arguments.length==1){
_c=BigDecimal.arguments[0];
_d=0;
_e=_c.length;
}else{
_c=BigDecimal.arguments[0];
_d=BigDecimal.arguments[1];
_e=BigDecimal.arguments[2];
}
if(typeof _c=="string"){
_c=_c.split("");
}
var _f;
var _10;
var d;
var _12;
var _13;
var i=0;
var si=0;
var _16=false;
var k=0;
var _18=0;
var j=0;
var sj=0;
var _1b=0;
var mag=0;
if(_e<=0){
this.bad("BigDecimal(): ",_c);
}
this.ind=this.ispos;
if(_c[0]==("-")){
_e--;
if(_e==0){
this.bad("BigDecimal(): ",_c);
}
this.ind=this.isneg;
_d++;
}else{
if(_c[0]==("+")){
_e--;
if(_e==0){
this.bad("BigDecimal(): ",_c);
}
_d++;
}
}
_f=false;
_10=false;
d=0;
_12=-1;
_13=-1;
var $1=_e;
i=_d;
i:
for(;$1>0;$1--,i++){
si=_c[i];
if(si>="0"){
if(si<="9"){
_13=i;
d++;
continue i;
}
}
if(si=="."){
if(_12>=0){
this.bad("BigDecimal(): ",_c);
}
_12=i-_d;
continue i;
}
if(si!="e"){
if(si!="E"){
if(si<"0"||si>"9"){
this.bad("BigDecimal(): ",_c);
}
_f=true;
_13=i;
d++;
continue i;
}
}
if((i-_d)>(_e-2)){
this.bad("BigDecimal(): ",_c);
}
_16=false;
if((_c[i+1])==("-")){
_16=true;
k=i+2;
}else{
if((_c[i+1])==("+")){
k=i+2;
}else{
k=i+1;
}
}
_18=_e-((k-_d));
if((_18==0)||(_18>9)){
this.bad("BigDecimal(): ",_c);
}
var $2=_18;
j=k;
j:
for(;$2>0;$2--,j++){
sj=_c[j];
if(sj<"0"){
this.bad("BigDecimal(): ",_c);
}
if(sj>"9"){
this.bad("BigDecimal(): ",_c);
}else{
_1b=sj-"0";
}
this.exp=(this.exp*10)+_1b;
}
if(_16){
this.exp=-this.exp;
}
_10=true;
break i;
}
if(d==0){
this.bad("BigDecimal(): ",_c);
}
if(_12>=0){
this.exp=(this.exp+_12)-d;
}
var $3=_13-1;
i=_d;
i:
for(;i<=$3;i++){
si=_c[i];
if(si=="0"){
_d++;
_12--;
d--;
}else{
if(si=="."){
_d++;
_12--;
}else{
if(si<="9"){
break i;
}else{
break i;
}
}
}
}
this.mant=new Array(d);
j=_d;
if(_f){
exotica:
do{
var $4=d;
i=0;
i:
for(;$4>0;$4--,i++){
if(i==_12){
j++;
}
sj=_c[j];
if(sj<="9"){
this.mant[i]=sj-"0";
}else{
this.bad("BigDecimal(): ",_c);
}
j++;
}
}while(false);
}else{
simple:
do{
var $5=d;
i=0;
i:
for(;$5>0;$5--,i++){
if(i==_12){
j++;
}
this.mant[i]=_c[j]-"0";
j++;
}
}while(false);
}
if(this.mant[0]==0){
this.ind=this.iszero;
if(this.exp>0){
this.exp=0;
}
if(_10){
this.mant=this.ZERO.mant;
this.exp=0;
}
}else{
if(_10){
this.form=MathContext.prototype.SCIENTIFIC;
mag=(this.exp+this.mant.length)-1;
if((mag<this.MinExp)||(mag>this.MaxExp)){
this.bad("BigDecimal(): ",_c);
}
}
}
return;
}
function abs(){
var set;
if(abs.arguments.length==1){
set=abs.arguments[0];
}else{
if(abs.arguments.length==0){
set=this.plainMC;
}else{
throw "abs(): "+abs.arguments.length+" arguments given; expected 0 or 1";
}
}
if(this.ind==this.isneg){
return this.negate(set);
}
return this.plus(set);
}
function add(){
var set;
if(add.arguments.length==2){
set=add.arguments[1];
}else{
if(add.arguments.length==1){
set=this.plainMC;
}else{
throw "add(): "+add.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=add.arguments[0];
var lhs;
var _26;
var res;
var _28;
var _29;
var _2a;
var _2b;
var _2c=0;
var _2d=0;
var _2e=0;
var t=null;
var ia=0;
var ib=0;
var ea=0;
var eb=0;
var ca=0;
var cb=0;
if(set.lostDigits){
this.checkdigits(rhs,set.digits);
}
lhs=this;
if(lhs.ind==0){
if(set.form!=MathContext.prototype.PLAIN){
return rhs.plus(set);
}
}
if(rhs.ind==0){
if(set.form!=MathContext.prototype.PLAIN){
return lhs.plus(set);
}
}
_26=set.digits;
if(_26>0){
if(lhs.mant.length>_26){
lhs=this.clone(lhs).round(set);
}
if(rhs.mant.length>_26){
rhs=this.clone(rhs).round(set);
}
}
res=new BigDecimal();
_28=lhs.mant;
_29=lhs.mant.length;
_2a=rhs.mant;
_2b=rhs.mant.length;
padder:
do{
if(lhs.exp==rhs.exp){
res.exp=lhs.exp;
}else{
if(lhs.exp>rhs.exp){
_2c=(_29+lhs.exp)-rhs.exp;
if(_2c>=((_2b+_26)+1)){
if(_26>0){
res.mant=_28;
res.exp=lhs.exp;
res.ind=lhs.ind;
if(_29<_26){
res.mant=this.extend(lhs.mant,_26);
res.exp=res.exp-((_26-_29));
}
return res.finish(set,false);
}
}
res.exp=rhs.exp;
if(_2c>(_26+1)){
if(_26>0){
_2d=(_2c-_26)-1;
_2b=_2b-_2d;
res.exp=res.exp+_2d;
_2c=_26+1;
}
}
if(_2c>_29){
_29=_2c;
}
}else{
_2c=(_2b+rhs.exp)-lhs.exp;
if(_2c>=((_29+_26)+1)){
if(_26>0){
res.mant=_2a;
res.exp=rhs.exp;
res.ind=rhs.ind;
if(_2b<_26){
res.mant=this.extend(rhs.mant,_26);
res.exp=res.exp-((_26-_2b));
}
return res.finish(set,false);
}
}
res.exp=lhs.exp;
if(_2c>(_26+1)){
if(_26>0){
_2d=(_2c-_26)-1;
_29=_29-_2d;
res.exp=res.exp+_2d;
_2c=_26+1;
}
}
if(_2c>_2b){
_2b=_2c;
}
}
}
}while(false);
res.ind=(lhs.ind==this.iszero)?this.ispos:lhs.ind;
if(((lhs.ind==this.isneg)?1:0)==((rhs.ind==this.isneg)?1:0)){
_2e=1;
}else{
signdiff:
do{
_2e=-1;
swaptest:
do{
if(rhs.ind==this.iszero){
}else{
if((_29<_2b)||(lhs.ind==this.iszero)){
t=_28;
_28=_2a;
_2a=t;
_2d=_29;
_29=_2b;
_2b=_2d;
res.ind=-res.ind;
}else{
if(_29>_2b){
}else{
ia=0;
ib=0;
ea=_28.length-1;
eb=_2a.length-1;
compare:
for(;;){
if(ia<=ea){
ca=_28[ia];
}else{
if(ib>eb){
if(set.form!=MathContext.prototype.PLAIN){
return this.ZERO;
}
break compare;
}
ca=0;
}
cb=(ib<=eb)?_2a[ib]:0;
if(ca!=cb){
if(ca<cb){
t=_28;
_28=_2a;
_2a=t;
_2d=_29;
_29=_2b;
_2b=_2d;
res.ind=-res.ind;
}
break compare;
}
ia++;
ib++;
}
}
}
}
}while(false);
}while(false);
}
res.mant=this.byteaddsub(_28,_29,_2a,_2b,_2e,false);
return res.finish(set,false);
}
function compareTo(){
var set;
if(compareTo.arguments.length==2){
set=compareTo.arguments[1];
}else{
if(compareTo.arguments.length==1){
set=this.plainMC;
}else{
throw "compareTo(): "+compareTo.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=compareTo.arguments[0];
var _38=0;
var i=0;
var _3a;
if(set.lostDigits){
this.checkdigits(rhs,set.digits);
}
if((this.ind==rhs.ind)&&(this.exp==rhs.exp)){
_38=this.mant.length;
if(_38<rhs.mant.length){
return -this.ind;
}
if(_38>rhs.mant.length){
return this.ind;
}
if((_38<=set.digits)||(set.digits==0)){
var $6=_38;
i=0;
i:
for(;$6>0;$6--,i++){
if(this.mant[i]<rhs.mant[i]){
return -this.ind;
}
if(this.mant[i]>rhs.mant[i]){
return this.ind;
}
}
return 0;
}
}else{
if(this.ind<rhs.ind){
return -1;
}
if(this.ind>rhs.ind){
return 1;
}
}
_3a=this.clone(rhs);
_3a.ind=-_3a.ind;
return this.add(_3a,set).ind;
}
function divide(){
var set;
var _3d=-1;
if(divide.arguments.length==2){
if(typeof divide.arguments[1]=="number"){
set=new MathContext(0,MathContext.prototype.PLAIN,false,divide.arguments[1]);
}else{
set=divide.arguments[1];
}
}else{
if(divide.arguments.length==3){
_3d=divide.arguments[1];
if(_3d<0){
throw "divide(): Negative scale: "+_3d;
}
set=new MathContext(0,MathContext.prototype.PLAIN,false,divide.arguments[2]);
}else{
if(divide.arguments.length==1){
set=this.plainMC;
}else{
throw "divide(): "+divide.arguments.length+" arguments given; expected between 1 and 3";
}
}
}
var rhs=divide.arguments[0];
return this.dodivide("D",rhs,set,_3d);
}
function divideInteger(){
var set;
if(divideInteger.arguments.length==2){
set=divideInteger.arguments[1];
}else{
if(divideInteger.arguments.length==1){
set=this.plainMC;
}else{
throw "divideInteger(): "+divideInteger.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=divideInteger.arguments[0];
return this.dodivide("I",rhs,set,0);
}
function max(){
var set;
if(max.arguments.length==2){
set=max.arguments[1];
}else{
if(max.arguments.length==1){
set=this.plainMC;
}else{
throw "max(): "+max.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=max.arguments[0];
return ((this.compareTo(rhs,set))>=0)?this.plus(set):rhs.plus(set);
}
function min(){
var set;
if(min.arguments.length==2){
set=min.arguments[1];
}else{
if(min.arguments.length==1){
set=this.plainMC;
}else{
throw "min(): "+min.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=min.arguments[0];
return ((this.compareTo(rhs,set))<=0)?this.plus(set):rhs.plus(set);
}
function multiply(){
var set;
if(multiply.arguments.length==2){
set=multiply.arguments[1];
}else{
if(multiply.arguments.length==1){
set=this.plainMC;
}else{
throw "multiply(): "+multiply.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=multiply.arguments[0];
var lhs;
var _48;
var _49;
var _4a=null;
var _4b=null;
var _4c;
var _4d=0;
var res;
var acc;
var n=0;
var _51=0;
if(set.lostDigits){
this.checkdigits(rhs,set.digits);
}
lhs=this;
_48=0;
_49=set.digits;
if(_49>0){
if(lhs.mant.length>_49){
lhs=this.clone(lhs).round(set);
}
if(rhs.mant.length>_49){
rhs=this.clone(rhs).round(set);
}
}else{
if(lhs.exp>0){
_48=_48+lhs.exp;
}
if(rhs.exp>0){
_48=_48+rhs.exp;
}
}
if(lhs.mant.length<rhs.mant.length){
_4a=lhs.mant;
_4b=rhs.mant;
}else{
_4a=rhs.mant;
_4b=lhs.mant;
}
_4c=(_4a.length+_4b.length)-1;
if((_4a[0]*_4b[0])>9){
_4d=_4c+1;
}else{
_4d=_4c;
}
res=new BigDecimal();
acc=this.createArrayWithZeros(_4d);
var $7=_4a.length;
n=0;
n:
for(;$7>0;$7--,n++){
_51=_4a[n];
if(_51!=0){
acc=this.byteaddsub(acc,acc.length,_4b,_4c,_51,true);
}
_4c--;
}
res.ind=lhs.ind*rhs.ind;
res.exp=(lhs.exp+rhs.exp)-_48;
if(_48==0){
res.mant=acc;
}else{
res.mant=this.extend(acc,acc.length+_48);
}
return res.finish(set,false);
}
function negate(){
var set;
if(negate.arguments.length==1){
set=negate.arguments[0];
}else{
if(negate.arguments.length==0){
set=this.plainMC;
}else{
throw "negate(): "+negate.arguments.length+" arguments given; expected 0 or 1";
}
}
var res;
if(set.lostDigits){
this.checkdigits(null,set.digits);
}
res=this.clone(this);
res.ind=-res.ind;
return res.finish(set,false);
}
function plus(){
var set;
if(plus.arguments.length==1){
set=plus.arguments[0];
}else{
if(plus.arguments.length==0){
set=this.plainMC;
}else{
throw "plus(): "+plus.arguments.length+" arguments given; expected 0 or 1";
}
}
if(set.lostDigits){
this.checkdigits(null,set.digits);
}
if(set.form==MathContext.prototype.PLAIN){
if(this.form==MathContext.prototype.PLAIN){
if(this.mant.length<=set.digits){
return this;
}
if(set.digits==0){
return this;
}
}
}
return this.clone(this).finish(set,false);
}
function pow(){
var set;
if(pow.arguments.length==2){
set=pow.arguments[1];
}else{
if(pow.arguments.length==1){
set=this.plainMC;
}else{
throw "pow(): "+pow.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=pow.arguments[0];
var n;
var lhs;
var _5a;
var _5b=0;
var L=0;
var _5d;
var res;
var _5f;
var i=0;
if(set.lostDigits){
this.checkdigits(rhs,set.digits);
}
n=rhs.intcheck(this.MinArg,this.MaxArg);
lhs=this;
_5a=set.digits;
if(_5a==0){
if(rhs.ind==this.isneg){
throw "pow(): Negative power: "+rhs.toString();
}
_5b=0;
}else{
if((rhs.mant.length+rhs.exp)>_5a){
throw "pow(): Too many digits: "+rhs.toString();
}
if(lhs.mant.length>_5a){
lhs=this.clone(lhs).round(set);
}
L=rhs.mant.length+rhs.exp;
_5b=(_5a+L)+1;
}
_5d=new MathContext(_5b,set.form,false,set.roundingMode);
res=this.ONE;
if(n==0){
return res;
}
if(n<0){
n=-n;
}
_5f=false;
i=1;
i:
for(;;i++){
n=n+n;
if(n<0){
_5f=true;
res=res.multiply(lhs,_5d);
}
if(i==31){
break i;
}
if((!_5f)){
continue i;
}
res=res.multiply(res,_5d);
}
if(rhs.ind<0){
res=this.ONE.divide(res,_5d);
}
return res.finish(set,true);
}
function remainder(){
var set;
if(remainder.arguments.length==2){
set=remainder.arguments[1];
}else{
if(remainder.arguments.length==1){
set=this.plainMC;
}else{
throw "remainder(): "+remainder.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=remainder.arguments[0];
return this.dodivide("R",rhs,set,-1);
}
function subtract(){
var set;
if(subtract.arguments.length==2){
set=subtract.arguments[1];
}else{
if(subtract.arguments.length==1){
set=this.plainMC;
}else{
throw "subtract(): "+subtract.arguments.length+" arguments given; expected 1 or 2";
}
}
var rhs=subtract.arguments[0];
var _65;
if(set.lostDigits){
this.checkdigits(rhs,set.digits);
}
_65=this.clone(rhs);
_65.ind=-_65.ind;
return this.add(_65,set);
}
function equals(obj){
var rhs;
var i=0;
var lca=null;
var rca=null;
if(obj==null){
return false;
}
if((!(((obj instanceof BigDecimal))))){
return false;
}
rhs=obj;
if(this.ind!=rhs.ind){
return false;
}
if(((this.mant.length==rhs.mant.length)&&(this.exp==rhs.exp))&&(this.form==rhs.form)){
var $8=this.mant.length;
i=0;
i:
for(;$8>0;$8--,i++){
if(this.mant[i]!=rhs.mant[i]){
return false;
}
}
}else{
lca=this.layout();
rca=rhs.layout();
if(lca.length!=rca.length){
return false;
}
var $9=lca.length;
i=0;
i:
for(;$9>0;$9--,i++){
if(lca[i]!=rca[i]){
return false;
}
}
}
return true;
}
function format(){
var _6d;
var _6e;
var _6f;
var _70;
if(format.arguments.length==6){
_6d=format.arguments[2];
_6e=format.arguments[3];
_6f=format.arguments[4];
_70=format.arguments[5];
}else{
if(format.arguments.length==2){
_6d=-1;
_6e=-1;
_6f=MathContext.prototype.SCIENTIFIC;
_70=this.ROUND_HALF_UP;
}else{
throw "format(): "+format.arguments.length+" arguments given; expected 2 or 6";
}
}
var _71=format.arguments[0];
var _72=format.arguments[1];
var num;
var mag=0;
var _75=0;
var _76=0;
var _77=null;
var _78=0;
var _79=0;
var _7a=0;
var a;
var p=0;
var _7d=null;
var i=0;
var _7f=0;
if((_71<(-1))||(_71==0)){
this.badarg("format",1,_71);
}
if(_72<(-1)){
this.badarg("format",2,_72);
}
if((_6d<(-1))||(_6d==0)){
this.badarg("format",3,_6d);
}
if(_6e<(-1)){
this.badarg("format",4,_6e);
}
if(_6f==MathContext.prototype.SCIENTIFIC){
}else{
if(_6f==MathContext.prototype.ENGINEERING){
}else{
if(_6f==(-1)){
_6f=MathContext.prototype.SCIENTIFIC;
}else{
this.badarg("format",5,_6f);
}
}
}
if(_70!=this.ROUND_HALF_UP){
try{
if(_70==(-1)){
_70=this.ROUND_HALF_UP;
}else{
new MathContext(9,MathContext.prototype.SCIENTIFIC,false,_70);
}
}
catch($10){
this.badarg("format",6,_70);
}
}
num=this.clone(this);
setform:
do{
if(_6e==(-1)){
num.form=MathContext.prototype.PLAIN;
}else{
if(num.ind==this.iszero){
num.form=MathContext.prototype.PLAIN;
}else{
mag=num.exp+num.mant.length;
if(mag>_6e){
num.form=_6f;
}else{
if(mag<(-5)){
num.form=_6f;
}else{
num.form=MathContext.prototype.PLAIN;
}
}
}
}
}while(false);
if(_72>=0){
setafter:
for(;;){
if(num.form==MathContext.prototype.PLAIN){
_75=-num.exp;
}else{
if(num.form==MathContext.prototype.SCIENTIFIC){
_75=num.mant.length-1;
}else{
_76=(((num.exp+num.mant.length)-1))%3;
if(_76<0){
_76=3+_76;
}
_76++;
_75=(_76>=num.mant.length)?0:num.mant.length-_76;
}
}
if(_75==_72){
break setafter;
}
if(_75<_72){
_77=this.extend(num.mant,(num.mant.length+_72)-_75);
num.mant=_77;
num.exp=num.exp-((_72-_75));
if(num.exp<this.MinExp){
throw "format(): Exponent Overflow: "+num.exp;
}
break setafter;
}
_78=_75-_72;
if(_78>num.mant.length){
num.mant=this.ZERO.mant;
num.ind=this.iszero;
num.exp=0;
continue setafter;
}
_79=num.mant.length-_78;
_7a=num.exp;
num.round(_79,_70);
if((num.exp-_7a)==_78){
break setafter;
}
}
}
a=num.layout();
if(_71>0){
var $11=a.length;
p=0;
p:
for(;$11>0;$11--,p++){
if(a[p]=="."){
break p;
}
if(a[p]=="E"){
break p;
}
}
if(p>_71){
this.badarg("format",1,_71);
}
if(p<_71){
_7d=new Array((a.length+_71)-p);
var $12=_71-p;
i=0;
i:
for(;$12>0;$12--,i++){
_7d[i]=" ";
}
this.arraycopy(a,0,_7d,i,a.length);
a=_7d;
}
}
if(_6d>0){
var $13=a.length-1;
p=a.length-1;
p:
for(;$13>0;$13--,p--){
if(a[p]=="E"){
break p;
}
}
if(p==0){
_7d=new Array((a.length+_6d)+2);
this.arraycopy(a,0,_7d,0,a.length);
var $14=_6d+2;
i=a.length;
i:
for(;$14>0;$14--,i++){
_7d[i]=" ";
}
a=_7d;
}else{
_7f=(a.length-p)-2;
if(_7f>_6d){
this.badarg("format",3,_6d);
}
if(_7f<_6d){
_7d=new Array((a.length+_6d)-_7f);
this.arraycopy(a,0,_7d,0,p+2);
var $15=_6d-_7f;
i=p+2;
i:
for(;$15>0;$15--,i++){
_7d[i]="0";
}
this.arraycopy(a,p+2,_7d,i,_7f);
a=_7d;
}
}
}
return a.join("");
}
function intValueExact(){
var _85;
var _86=0;
var _87;
var i=0;
var _89=0;
if(this.ind==this.iszero){
return 0;
}
_85=this.mant.length-1;
if(this.exp<0){
_85=_85+this.exp;
if((!(this.allzero(this.mant,_85+1)))){
throw "intValueExact(): Decimal part non-zero: "+this.toString();
}
if(_85<0){
return 0;
}
_86=0;
}else{
if((this.exp+_85)>9){
throw "intValueExact(): Conversion overflow: "+this.toString();
}
_86=this.exp;
}
_87=0;
var $16=_85+_86;
i=0;
i:
for(;i<=$16;i++){
_87=_87*10;
if(i<=_85){
_87=_87+this.mant[i];
}
}
if((_85+_86)==9){
_89=div(_87,1000000000);
if(_89!=this.mant[0]){
if(_87==-2147483648){
if(this.ind==this.isneg){
if(this.mant[0]==2){
return _87;
}
}
}
throw "intValueExact(): Conversion overflow: "+this.toString();
}
}
if(this.ind==this.ispos){
return _87;
}
return -_87;
}
function movePointLeft(n){
var res;
res=this.clone(this);
res.exp=res.exp-n;
return res.finish(this.plainMC,false);
}
function movePointRight(n){
var res;
res=this.clone(this);
res.exp=res.exp+n;
return res.finish(this.plainMC,false);
}
function scale(){
if(this.exp>=0){
return 0;
}
return -this.exp;
}
function setScale(){
var _8f;
if(setScale.arguments.length==2){
_8f=setScale.arguments[1];
}else{
if(setScale.arguments.length==1){
_8f=this.ROUND_UNNECESSARY;
}else{
throw "setScale(): "+setScale.arguments.length+" given; expected 1 or 2";
}
}
var _90=setScale.arguments[0];
var _91;
var res;
var _93=0;
var _94=0;
_91=this.scale();
if(_91==_90){
if(this.form==MathContext.prototype.PLAIN){
return this;
}
}
res=this.clone(this);
if(_91<=_90){
_93=(_91==0)?res.exp+_90:_90-_91;
res.mant=this.extend(res.mant,res.mant.length+_93);
res.exp=-_90;
}else{
if(_90<0){
throw "setScale(): Negative scale: "+_90;
}
_94=res.mant.length-((_91-_90));
res=res.round(_94,_8f);
if(res.exp!=(-_90)){
res.mant=this.extend(res.mant,res.mant.length+1);
res.exp=res.exp-1;
}
}
res.form=MathContext.prototype.PLAIN;
return res;
}
function signum(){
return this.ind;
}
function toString(){
return this.layout().join("");
}
function layout(){
var _95;
var i=0;
var sb=null;
var _98=0;
var sig=0;
var _9a=0;
var rec=null;
var _9c;
var mag;
var len=0;
if (this.mant) {
_95=new Array(this.mant.length);
var $18=this.mant.length;
i=0;
i:
for(;$18>0;$18--,i++){
_95[i]=this.mant[i]+"";
}
}
else
{
_95=new Array(0);
}
if(this.form!=MathContext.prototype.PLAIN){
sb="";
if(this.ind==this.isneg){
sb+="-";
}
_98=(this.exp+_95.length)-1;
if(this.form==MathContext.prototype.SCIENTIFIC){
sb+=_95[0];
if(_95.length>1){
sb+=".";
}
sb+=_95.slice(1).join("");
}else{
engineering:
do{
sig=_98%3;
if(sig<0){
sig=3+sig;
}
_98=_98-sig;
sig++;
if(sig>=_95.length){
sb+=_95.join("");
var $19=sig-_95.length;
for(;$19>0;$19--){
sb+="0";
}
}else{
sb+=_95.slice(0,sig).join("");
sb+=".";
sb+=_95.slice(sig).join("");
}
}while(false);
}
if(_98!=0){
if(_98<0){
_9a="-";
_98=-_98;
}else{
_9a="+";
}
sb+="E";
sb+=_9a;
sb+=_98;
}
return sb.split("");
}
if(this.exp==0){
if(this.ind>=0){
return _95;
}
rec=new Array(_95.length+1);
rec[0]="-";
this.arraycopy(_95,0,rec,1,_95.length);
return rec;
}
_9c=((this.ind==this.isneg)?1:0);
mag=this.exp+_95.length;
if(mag<1){
len=(_9c+2)-this.exp;
rec=new Array(len);
if(_9c!=0){
rec[0]="-";
}
rec[_9c]="0";
rec[_9c+1]=".";
var $20=-mag;
i=_9c+2;
i:
for(;$20>0;$20--,i++){
rec[i]="0";
}
this.arraycopy(_95,0,rec,(_9c+2)-mag,_95.length);
return rec;
}
if(mag>_95.length){
len=_9c+mag;
rec=new Array(len);
if(_9c!=0){
rec[0]="-";
}
this.arraycopy(_95,0,rec,_9c,_95.length);
var $21=mag-_95.length;
i=_9c+_95.length;
i:
for(;$21>0;$21--,i++){
rec[i]="0";
}
return rec;
}
len=(_9c+1)+_95.length;
rec=new Array(len);
if(_9c!=0){
rec[0]="-";
}
this.arraycopy(_95,0,rec,_9c,mag);
rec[_9c+mag]=".";
this.arraycopy(_95,mag,rec,(_9c+mag)+1,_95.length-mag);
return rec;
}
function intcheck(min,max){
var i;
i=this.intValueExact();
if((i<min)||(i>max)){
throw "intcheck(): Conversion overflow: "+i;
}
return i;
}
function dodivide(_a6,rhs,set,_a9){
var lhs;
var _ab;
var _ac;
var res;
var _ae;
var _af;
var _b0;
var _b1;
var _b2;
var b2b;
var _b4;
var _b5=0;
var i=0;
var v2=0;
var ba=0;
var _b9=0;
var _ba=0;
var _bb=0;
var d=0;
var _bd=null;
var _be=0;
var _bf=0;
var _c0=null;
if(set.lostDigits){
this.checkdigits(rhs,set.digits);
}
lhs=this;
if(rhs.ind==0){
throw "dodivide(): Divide by 0";
}
if(lhs.ind==0){
if(set.form!=MathContext.prototype.PLAIN){
return this.ZERO;
}
if(_a9==(-1)){
return lhs;
}
return lhs.setScale(_a9);
}
_ab=set.digits;
if(_ab>0){
if(lhs.mant.length>_ab){
lhs=this.clone(lhs).round(set);
}
if(rhs.mant.length>_ab){
rhs=this.clone(rhs).round(set);
}
}else{
if(_a9==(-1)){
_a9=lhs.scale();
}
_ab=lhs.mant.length;
if(_a9!=(-lhs.exp)){
_ab=(_ab+_a9)+lhs.exp;
}
_ab=(_ab-((rhs.mant.length-1)))-rhs.exp;
if(_ab<lhs.mant.length){
_ab=lhs.mant.length;
}
if(_ab<rhs.mant.length){
_ab=rhs.mant.length;
}
}
_ac=((lhs.exp-rhs.exp)+lhs.mant.length)-rhs.mant.length;
if(_ac<0){
if(_a6!="D"){
if(_a6=="I"){
return this.ZERO;
}
return this.clone(lhs).finish(set,false);
}
}
res=new BigDecimal();
res.ind=(lhs.ind*rhs.ind);
res.exp=_ac;
res.mant=this.createArrayWithZeros(_ab+1);
_ae=(_ab+_ab)+1;
_af=this.extend(lhs.mant,_ae);
_b0=_ae;
_b1=rhs.mant;
_b2=_ae;
b2b=(_b1[0]*10)+1;
if(_b1.length>1){
b2b=b2b+_b1[1];
}
_b4=0;
outer:
for(;;){
_b5=0;
inner:
for(;;){
if(_b0<_b2){
break inner;
}
if(_b0==_b2){
compare:
do{
var $22=_b0;
i=0;
i:
for(;$22>0;$22--,i++){
v2=(i<_b1.length)?_b1[i]:0;
if(_af[i]<v2){
break inner;
}
if(_af[i]>v2){
break compare;
}
}
_b5++;
res.mant[_b4]=_b5;
_b4++;
_af[0]=0;
break outer;
}while(false);
ba=_af[0];
}else{
ba=_af[0]*10;
if(_b0>1){
ba=ba+_af[1];
}
}
_b9=div((ba*10),b2b);
if(_b9==0){
_b9=1;
}
_b5=_b5+_b9;
_af=this.byteaddsub(_af,_b0,_b1,_b2,-_b9,true);
if(_af[0]!=0){
continue inner;
}
var $23=_b0-2;
_ba=0;
_ba:
for(;_ba<=$23;_ba++){
if(_af[_ba]!=0){
break _ba;
}
_b0--;
}
if(_ba==0){
continue inner;
}
this.arraycopy(_af,_ba,_af,0,_b0);
}
if((_b4!=0)||(_b5!=0)){
res.mant[_b4]=_b5;
_b4++;
if(_b4==(_ab+1)){
break outer;
}
if(_af[0]==0){
break outer;
}
}
if(_a9>=0){
if((-res.exp)>_a9){
break outer;
}
}
if(_a6!="D"){
if(res.exp<=0){
break outer;
}
}
res.exp=res.exp-1;
_b2--;
}
if(_b4==0){
_b4=1;
}
if((_a6=="I")||(_a6=="R")){
if((_b4+res.exp)>_ab){
throw "dodivide(): Integer overflow";
}
if(_a6=="R"){
remainder:
do{
if(res.mant[0]==0){
return this.clone(lhs).finish(set,false);
}
if(_af[0]==0){
return this.ZERO;
}
res.ind=lhs.ind;
_bb=((_ab+_ab)+1)-lhs.mant.length;
res.exp=(res.exp-_bb)+lhs.exp;
d=_b0;
i=d-1;
i:
for(;i>=1;i--){
if(!((res.exp<lhs.exp)&&(res.exp<rhs.exp))){
break;
}
if(_af[i]!=0){
break i;
}
d--;
res.exp=res.exp+1;
}
if(d<_af.length){
_bd=new Array(d);
this.arraycopy(_af,0,_bd,0,d);
_af=_bd;
}
res.mant=_af;
return res.finish(set,false);
}while(false);
}
}else{
if(_af[0]!=0){
_be=res.mant[_b4-1];
if(((_be%5))==0){
res.mant[_b4-1]=(_be+1);
}
}
}
if(_a9>=0){
scaled:
do{
if(_b4!=res.mant.length){
res.exp=res.exp-((res.mant.length-_b4));
}
_bf=res.mant.length-(((-res.exp)-_a9));
res.round(_bf,set.roundingMode);
if(res.exp!=(-_a9)){
res.mant=this.extend(res.mant,res.mant.length+1);
res.exp=res.exp-1;
}
return res.finish(set,true);
}while(false);
}
if(_b4==res.mant.length){
res.round(set);
_b4=_ab;
}else{
if(res.mant[0]==0){
return this.ZERO;
}
_c0=new Array(_b4);
this.arraycopy(res.mant,0,_c0,0,_b4);
res.mant=_c0;
}
return res.finish(set,true);
}
function bad(_c3,s){
throw _c3+"Not a number: "+s;
}
function badarg(_c5,pos,_c7){
throw "Bad argument "+pos+" to "+_c5+": "+_c7;
}
function extend(_c8,_c9){
var _ca;
if(_c8.length==_c9){
return _c8;
}
_ca=createArrayWithZeros(_c9);
this.arraycopy(_c8,0,_ca,0,_c8.length);
return _ca;
}
function byteaddsub(a,_cc,b,_ce,m,_d0){
var _d1;
var _d2;
var ap;
var bp;
var _d5;
var reb;
var _d7;
var _d8;
var op=0;
var _da=0;
var _db;
var i=0;
_d1=a.length;
_d2=b.length;
ap=_cc-1;
bp=_ce-1;
_d5=bp;
if(_d5<ap){
_d5=ap;
}
reb=null;
if(_d0){
if((_d5+1)==_d1){
reb=a;
}
}
if(reb==null){
reb=this.createArrayWithZeros(_d5+1);
}
_d7=false;
if(m==1){
_d7=true;
}else{
if(m==(-1)){
_d7=true;
}
}
_d8=0;
op=_d5;
op:
for(;op>=0;op--){
if(ap>=0){
if(ap<_d1){
_d8=_d8+a[ap];
}
ap--;
}
if(bp>=0){
if(bp<_d2){
if(_d7){
_d8=(m>0)?_d8+b[bp]:_d8-b[bp];
}else{
_d8=_d8+(b[bp]*m);
}
}
bp--;
}
if(_d8<10){
if(_d8>=0){
quick:
do{
reb[op]=_d8;
_d8=0;
continue op;
}while(false);
}
}
_da=_d8+90;
reb[op]=this.bytedig[_da];
_d8=this.bytecar[_da];
}
if(_d8==0){
return reb;
}
_db=null;
if(_d0){
if((_d5+2)==a.length){
_db=a;
}
}
if(_db==null){
_db=new Array(_d5+2);
}
_db[0]=_d8;
var $24=_d5+1;
i=0;
i:
for(;$24>0;$24--,i++){
_db[i+1]=reb[i];
}
return _db;
}
function diginit(){
var _de;
var op=0;
var _e0=0;
_de=new Array((90+99)+1);
op=0;
op:
for(;op<=(90+99);op++){
_e0=op-90;
if(_e0>=0){
_de[op]=(_e0%10);
BigDecimal.prototype.bytecar[op]=(div(_e0,10));
continue op;
}
_e0=_e0+100;
_de[op]=(_e0%10);
BigDecimal.prototype.bytecar[op]=((div(_e0,10))-10);
}
return _de;
}
function clone(dec){
var _e2;
_e2=new BigDecimal();
_e2.ind=dec.ind;
_e2.exp=dec.exp;
_e2.form=dec.form;
_e2.mant=dec.mant;
return _e2;
}
function checkdigits(rhs,dig){
if(dig==0){
return;
}
if(this.mant.length>dig){
if((!(this.allzero(this.mant,dig)))){
throw "Too many digits: "+this.toString();
}
}
if(rhs==null){
return;
}
if(rhs.mant.length>dig){
if((!(this.allzero(rhs.mant,dig)))){
throw "Too many digits: "+rhs.toString();
}
}
return;
}
function round(){
var len;
var _e6;
if(round.arguments.length==2){
len=round.arguments[0];
_e6=round.arguments[1];
}else{
if(round.arguments.length==1){
var set=round.arguments[0];
len=set.digits;
_e6=set.roundingMode;
}else{
throw "round(): "+round.arguments.length+" arguments given; expected 1 or 2";
}
}
var _e8;
var _e9;
var _ea;
var _eb=false;
var _ec=0;
var _ed;
var _ee=null;
_e8=this.mant.length-len;
if(_e8<=0){
return this;
}
this.exp=this.exp+_e8;
_e9=this.ind;
_ea=this.mant;
if(len>0){
this.mant=new Array(len);
this.arraycopy(_ea,0,this.mant,0,len);
_eb=true;
_ec=_ea[len];
}else{
this.mant=this.ZERO.mant;
this.ind=this.iszero;
_eb=false;
_ec=(len==0)?_ea[0]:0;
}
_ed=0;
modes:
do{
if(_e6==this.ROUND_HALF_UP){
if(_ec>=5){
_ed=_e9;
}
}else{
if(_e6==this.ROUND_UNNECESSARY){
if((!(this.allzero(_ea,len)))){
throw "round(): Rounding necessary";
}
}else{
if(_e6==this.ROUND_HALF_DOWN){
if(_ec>5){
_ed=_e9;
}else{
if(_ec==5){
if((!(this.allzero(_ea,len+1)))){
_ed=_e9;
}
}
}
}else{
if(_e6==this.ROUND_HALF_EVEN){
if(_ec>5){
_ed=_e9;
}else{
if(_ec==5){
if((!(this.allzero(_ea,len+1)))){
_ed=_e9;
}else{
if((((this.mant[this.mant.length-1])%2))==1){
_ed=_e9;
}
}
}
}
}else{
if(_e6==this.ROUND_DOWN){
}else{
if(_e6==this.ROUND_UP){
if((!(this.allzero(_ea,len)))){
_ed=_e9;
}
}else{
if(_e6==this.ROUND_CEILING){
if(_e9>0){
if((!(this.allzero(_ea,len)))){
_ed=_e9;
}
}
}else{
if(_e6==this.ROUND_FLOOR){
if(_e9<0){
if((!(this.allzero(_ea,len)))){
_ed=_e9;
}
}
}else{
throw "round(): Bad round value: "+_e6;
}
}
}
}
}
}
}
}
}while(false);
if(_ed!=0){
bump:
do{
if(this.ind==this.iszero){
this.mant=this.ONE.mant;
this.ind=_ed;
}else{
if(this.ind==this.isneg){
_ed=-_ed;
}
_ee=this.byteaddsub(this.mant,this.mant.length,this.ONE.mant,1,_ed,_eb);
if(_ee.length>this.mant.length){
this.exp++;
this.arraycopy(_ee,0,this.mant,0,this.mant.length);
}else{
this.mant=_ee;
}
}
}while(false);
}
if(this.exp>this.MaxExp){
throw "round(): Exponent Overflow: "+this.exp;
}
return this;
}
function allzero(_ef,_f0){
var i=0;
if(_f0<0){
_f0=0;
}
var $25=_ef.length-1;
i=_f0;
i:
for(;i<=$25;i++){
if(_ef[i]!=0){
return false;
}
}
return true;
}
function finish(set,_f4){
var d=0;
var i=0;
var _f7=null;
var mag=0;
var sig=0;
if(set.digits!=0){
if(this.mant.length>set.digits){
this.round(set);
}
}
if(_f4){
if(set.form!=MathContext.prototype.PLAIN){
d=this.mant.length;
i=d-1;
i:
for(;i>=1;i--){
if(this.mant[i]!=0){
break i;
}
d--;
this.exp++;
}
if(d<this.mant.length){
_f7=new Array(d);
this.arraycopy(this.mant,0,_f7,0,d);
this.mant=_f7;
}
}
}
this.form=MathContext.prototype.PLAIN;
var $26=this.mant.length;
i=0;
i:
for(;$26>0;$26--,i++){
if(this.mant[i]!=0){
if(i>0){
delead:
do{
_f7=new Array(this.mant.length-i);
this.arraycopy(this.mant,i,_f7,0,this.mant.length-i);
this.mant=_f7;
}while(false);
}
mag=this.exp+this.mant.length;
if(mag>0){
if(mag>set.digits){
if(set.digits!=0){
this.form=set.form;
}
}
if((mag-1)<=this.MaxExp){
return this;
}
}else{
if(mag<(-5)){
this.form=set.form;
}
}
mag--;
if((mag<this.MinExp)||(mag>this.MaxExp)){
overflow:
do{
if(this.form==MathContext.prototype.ENGINEERING){
sig=mag%3;
if(sig<0){
sig=3+sig;
}
mag=mag-sig;
if(mag>=this.MinExp){
if(mag<=this.MaxExp){
break overflow;
}
}
}
throw "finish(): Exponent Overflow: "+mag;
}while(false);
}
return this;
}
}
this.ind=this.iszero;
if(set.form!=MathContext.prototype.PLAIN){
this.exp=0;
}else{
if(this.exp>0){
this.exp=0;
}else{
if(this.exp<this.MinExp){
throw "finish(): Exponent Overflow: "+this.exp;
}
}
}
this.mant=this.ZERO.mant;
return this;
}


