Browse Source

Merge remote-tracking branch 'refs/remotes/jl777/master'

release/v0.1
usamir 9 years ago
parent
commit
20566ed0f8
  1. 3
      README.md
  2. 2
      basilisk/basilisk.c
  3. 2
      basilisk/basilisk.h
  4. 6
      basilisk/basilisk_DEX.c
  5. 4
      basilisk/basilisk_MSG.c
  6. 6
      basilisk/basilisk_bitcoin.c
  7. 95
      basilisk/basilisk_swap.c
  8. 2
      crypto777/bitcoind_RPC.c
  9. 4
      crypto777/m_android
  10. 7
      crypto777/m_onetime_android
  11. 96
      deprecated/obsolete.h
  12. 10
      gecko/gecko.c
  13. 4
      iguana/SuperNET_keys.c
  14. 2
      iguana/coins/btcd
  15. 274
      iguana/confs/BTCD_hdrs.txt
  16. 13
      iguana/exchanges/bitcoin.c
  17. 22
      iguana/iguana777.c
  18. 16
      iguana/iguana_bundles.c
  19. 21
      iguana/iguana_chains.c
  20. 1
      iguana/iguana_init.c
  21. 4
      iguana/iguana_json.c
  22. 18
      iguana/iguana_msg.c
  23. 2
      iguana/iguana_payments.c
  24. 13
      iguana/iguana_peers.c
  25. 2
      iguana/iguana_ramchain.c
  26. 4
      iguana/iguana_realtime.c
  27. 6
      iguana/iguana_recv.c
  28. 7
      iguana/iguana_spendvectors.c
  29. 19
      iguana/iguana_txidfind.c
  30. 194
      iguana/iguana_unspents.c
  31. 26
      iguana/iguana_volatiles.c
  32. 3
      iguana/iguana_wallet.c
  33. 360
      iguana/index.html
  34. 9
      iguana/m_android
  35. 65
      iguana/main.c
  36. 23
      iguana/manifest.json
  37. 12
      iguana/mini-gmp.c
  38. 57
      iguana/ramchain_api.c
  39. 1
      iguana/secp256k1/m_android
  40. 7
      iguana/tests/PoS
  41. 2
      iguana/tests/decoderawtransaction
  42. 1
      iguana/tests/getaddressesbyaccount
  43. 2
      iguana/tests/gettransaction
  44. 2
      iguana/tests/request
  45. 1
      iguana/tests/stakers
  46. 4
      includes/iguana_apideclares.h
  47. 3
      includes/iguana_funcs.h
  48. 12
      includes/iguana_globals.h
  49. 3
      includes/iguana_structs.h
  50. 4
      pnacl_main.h
  51. 26
      tradebots/main.c

3
README.md

@ -6,7 +6,8 @@ Unix (Ubuntu 14.04) | [![Build Status](https://jenkinsmaster.sprnt.pw/buildStatu
Chrome | [![Build Status](https://jenkinsmaster.sprnt.pw/buildStatus/icon?job=PNaCl-jl777)](https://jenkinsmaster.sprnt.pw/job/PNaCl-jl777/)
Android | [![Build Status](https://jenkinsmaster.sprnt.pw/buildStatus/icon?job=Android)](https://jenkinsmaster.sprnt.pw/job/Android/)
iOS | [![Build Status](https://jenkinsmaster.sprnt.pw/buildStatus/icon?job=iOS)](https://jenkinsmaster.sprnt.pw/job/iOS/)
... | ...
Windows 32 Bit | [![Build Status](https://jenkinsmaster.sprnt.pw/job/Win32/badge/icon)](https://jenkinsmaster.sprnt.pw/job/Win32/)
Windows 64 Bit | [![Build Status](https://jenkinsmaster.sprnt.pw/job/Win64-jl777/badge/icon)](https://jenkinsmaster.sprnt.pw/job/Win64-jl777/)
docs.supernet.org | [![Build Status](https://jenkinsmaster.sprnt.pw/buildStatus/icon?job=docs.supernet.org-updating)](https://jenkinsmaster.sprnt.pw/job/docs.supernet.org-updating/)
---

2
basilisk/basilisk.c

@ -799,7 +799,7 @@ void basilisks_loop(void *arg)
}
//printf("my RELAYID.%d\n",myinfo->RELAYID);
//portable_mutex_unlock(&myinfo->allcoins_mutex);
if ( (rand() % 100) == 0 && myinfo->RELAYID >= 0 )
if ( (rand() % 10) == 0 && myinfo->RELAYID >= 0 )
basilisk_ping_send(myinfo,btcd);
}
HASH_ITER(hh,myinfo->allcoins,coin,tmpcoin)

2
basilisk/basilisk.h

@ -30,7 +30,7 @@
#define BASILISK_HDROFFSET ((int32_t)(sizeof(bits256)+sizeof(struct iguana_msghdr)+sizeof(uint32_t)))
#define INSTANTDEX_DECKSIZE 1000
#define INSTANTDEX_LOCKTIME (1800 + 300*2)
#define INSTANTDEX_LOCKTIME (3600*2 + 300*2)
#define INSTANTDEX_INSURANCEDIV 777
#define INSTANTDEX_PUBKEY "03bc2c7ba671bae4a6fc835244c9762b41647b9827d4780a89a949b984a8ddcc06"
#define INSTANTDEX_RMD160 "ca1e04745e8ca0c60d8c5881531d51bec470743f"

6
basilisk/basilisk_DEX.c

@ -197,7 +197,7 @@ int32_t basilisk_ping_processDEX(struct supernet_info *myinfo,uint32_t senderipb
if ( relay->numrequests < relay->maxrequests )
{
memcpy(serialized,&data[len],clen);
printf("ping processDEX\n");
//printf("ping processDEX\n");
n = basilisk_rwDEXquote(0,serialized,&R);
if ( n != clen )
printf("n.%d clen.%d\n",n,clen);
@ -206,7 +206,7 @@ int32_t basilisk_ping_processDEX(struct supernet_info *myinfo,uint32_t senderipb
if ( crc == R.requestid )
{
relay->requests[relay->numrequests++] = R;
printf("[(%s %.8f) -> (%s %.8f) r.%u q.%u] ",R.src,dstr(R.srcamount),R.dest,dstr(R.destamount),R.requestid,R.quoteid);
//printf("[(%s %.8f) -> (%s %.8f) r.%u q.%u] ",R.src,dstr(R.srcamount),R.dest,dstr(R.destamount),R.requestid,R.quoteid);
} else printf("crc.%u error vs %u\n",crc,R.requestid);
} else printf("relay num.%d >= max.%d\n",relay->numrequests,relay->maxrequests);
} else len += clen;
@ -247,7 +247,7 @@ int32_t basilisk_ping_genDEX(struct supernet_info *myinfo,uint8_t *data,int32_t
{
DL_DELETE(myinfo->DEX_quotes,item);
free(item);
} else printf("now.%u vs timestamp.%u, lag.%d\n",now,timestamp,now-timestamp);
} //else printf("now.%u vs timestamp.%u, lag.%d\n",now,timestamp,now-timestamp);
}
portable_mutex_unlock(&myinfo->DEX_mutex);
sn = i;

4
basilisk/basilisk_MSG.c

@ -189,7 +189,7 @@ int32_t basilisk_channelsend(struct supernet_info *myinfo,bits256 hash,uint32_t
valsobj = cJSON_CreateObject();
jaddnum(valsobj,"channel",channel);
jaddnum(valsobj,"msgid",msgid);
//char str[65]; printf("sendmessage.[%d] channel.%u msgid.%x -> %s\n",datalen,channel,msgid,bits256_str(str,hash));
char str[65]; printf("sendmessage.[%d] channel.%u msgid.%x -> %s\n",datalen,channel,msgid,bits256_str(str,hash));
if ( (retstr= basilisk_sendmessage(myinfo,0,0,0,hash,valsobj,hexstr)) != 0 )
{
retval = 0;
@ -230,7 +230,7 @@ int32_t basilisk_channelget(struct supernet_info *myinfo,bits256 hash,uint32_t c
jaddnum(valsobj,"fanout",1);
if ( (retstr= basilisk_getmessage(myinfo,0,0,0,hash,valsobj,0)) != 0 )
{
//printf("gotmessage.(%s)\n",retstr);
//printf("channel.%u msgid.%u gotmessage.(%s)\n",channel,msgid,retstr);
if ( (retarray= cJSON_Parse(retstr)) != 0 )
{
if ( is_cJSON_Array(retarray) != 0 )

6
basilisk/basilisk_bitcoin.c

@ -343,7 +343,7 @@ char *basilisk_valuestr(struct iguana_info *coin,char *coinaddr,uint64_t value,i
jadd64bits(retjson,"satoshis",value);
jaddnum(retjson,"value",dstr(value));
jaddnum(retjson,"height",height);
jaddnum(retjson,"numconfirms",coin->blocks.hwmchain.height - height);
jaddnum(retjson,"numconfirms",coin->blocks.hwmchain.height - height + 1);
jaddbits256(retjson,"txid",txid);
jaddnum(retjson,"vout",vout);
jaddstr(retjson,"coin",coin->symbol);
@ -497,10 +497,10 @@ char *basilisk_bitcoinrawtx(struct supernet_info *myinfo,struct iguana_info *coi
jadd(valsobj,"addresses",addresses);
}
//printf("use addresses.(%s)\n",jprint(addresses,0));
//printf("vals.(%s) change.(%s) spend.%s\n",jprint(valsobj,0),changeaddr,spendscriptstr);
printf("(%s) vals.(%s) change.(%s) spend.%s\n",coin->symbol,jprint(valsobj,0),changeaddr,spendscriptstr);
if ( changeaddr == 0 || changeaddr[0] == 0 || spendscriptstr == 0 || spendscriptstr[0] == 0 )
return(clonestr("{\"error\":\"invalid changeaddr or spendscript or addresses\"}"));
if ( coin != 0 && basilisk_bitcoinavail(coin) != 0 )
if ( coin != 0 )//&& basilisk_bitcoinavail(coin) != 0 )
{
if ( (txobj= bitcoin_txcreate(coin->chain->isPoS,locktime,locktime==0?coin->chain->normal_txversion:coin->chain->locktime_txversion)) != 0 )
{

95
basilisk/basilisk_swap.c

@ -118,7 +118,7 @@ int32_t basilisk_alicescript(uint8_t *script,int32_t n,char *msigaddr,uint8_t al
int32_t basilisk_numconfirms(struct supernet_info *myinfo,struct basilisk_rawtx *rawtx)
{
cJSON *argjson,*valuearray=0,*item; char *valstr; int32_t numconfirms,height,i,n;
cJSON *argjson,*valuearray=0,*item; char *valstr; int32_t numconfirms,height,i,n,retval = -1;
#ifdef BASILISK_DISABLETX
return(10);
#endif
@ -128,7 +128,7 @@ int32_t basilisk_numconfirms(struct supernet_info *myinfo,struct basilisk_rawtx
jaddstr(argjson,"coin",rawtx->coin->symbol);
if ( (valstr= basilisk_value(myinfo,rawtx->coin,0,0,myinfo->myaddr.persistent,argjson,0)) != 0 )
{
char str[65]; printf("%s %s valstr.(%s)\n",rawtx->name,bits256_str(str,rawtx->actualtxid),valstr);
//char str[65]; printf("%s %s valstr.(%s)\n",rawtx->name,bits256_str(str,rawtx->actualtxid),valstr);
if ( (valuearray= cJSON_Parse(valstr)) != 0 )
{
if ( is_cJSON_Array(valuearray) != 0 )
@ -137,24 +137,22 @@ int32_t basilisk_numconfirms(struct supernet_info *myinfo,struct basilisk_rawtx
for (i=0; i<n; i++)
{
item = jitem(valuearray,i);
height = jint(valuearray,"height");
numconfirms = jint(valuearray,"numconfirms");
height = jint(item,"height");
numconfirms = jint(item,"numconfirms");
char str[65]; printf("i.%d of %d: %s height.%d -> numconfirms.%d\n",i,n,bits256_str(str,rawtx->actualtxid),height,numconfirms);
if ( height > 0 && numconfirms >= 0 )
{
free_json(argjson);
free_json(valuearray);
free(valstr);
printf("%s height.%d -> numconfirms.%d\n",bits256_str(str,rawtx->actualtxid),height,numconfirms);
retval = numconfirms;
break;
}
}
}
}
}
} else printf("valstr not array\n");
free_json(valuearray);
} else printf("parse error\n");
free(valstr);
}
free_json(argjson);
if ( valuearray != 0 )
free_json(valuearray);
free(valstr);
return(-1);
return(retval);
}
bits256 basilisk_swap_broadcast(char *name,struct supernet_info *myinfo,struct basilisk_swap *swap,struct iguana_info *coin,uint8_t *data,int32_t datalen)
@ -197,6 +195,8 @@ int32_t basilisk_rawtx_spend(struct supernet_info *myinfo,struct basilisk_swap *
char str[65]; printf("add second privkey.(%s) %s\n",jprint(privkeys,0),bits256_str(str,*privkey2));
} else V.N = V.M = 1;
V.suppress_pubkeys = dest->suppress_pubkeys;
if ( dest->redeemlen != 0 )
memcpy(V.p2shscript,dest->redeemscript,dest->redeemlen), V.p2shlen = dest->redeemlen;
if ( userdata != 0 && userdatalen > 0 )
{
memcpy(V.userdata,userdata,userdatalen);
@ -841,7 +841,6 @@ int32_t basilisk_swapdata_deck(struct supernet_info *myinfo,struct basilisk_swap
int32_t basilisk_verify_otherdeck(struct supernet_info *myinfo,struct basilisk_swap *swap,uint8_t *data,int32_t datalen)
{
int32_t i,len = 0;
printf("verify otherdeck\n");
for (i=0; i<sizeof(swap->otherdeck)/sizeof(swap->otherdeck[0][0]); i++)
len += iguana_rwnum(0,&data[len],sizeof(swap->otherdeck[i>>1][i&1]),&swap->otherdeck[i>>1][i&1]);
return(0);
@ -918,17 +917,17 @@ void basilisk_swap01(struct supernet_info *myinfo,struct basilisk_swap *swap,uin
void basilisk_swap02(struct supernet_info *myinfo,struct basilisk_swap *swap,uint8_t *data,int32_t maxlen)
{
basilisk_swap01(myinfo,swap,data,maxlen);
printf("check for other deck\n");
if ( basilisk_swapget(myinfo,swap,0x02,data,maxlen,basilisk_verify_otherdeck) == 0 )
swap->statebits |= 0x02;
if ( (swap->statebits & 0x02) == 0 )
{
printf("check for other deck\n");
if ( basilisk_swapget(myinfo,swap,0x02,data,maxlen,basilisk_verify_otherdeck) == 0 )
swap->statebits |= 0x02;
}
}
void basilisk_swap04(struct supernet_info *myinfo,struct basilisk_swap *swap,uint8_t *data,int32_t maxlen)
{
int32_t i,datalen; char str[65];
//if ( (rand() % 10) == 0 )
basilisk_swap02(myinfo,swap,data,maxlen);
datalen = iguana_rwnum(1,data,sizeof(swap->choosei),&swap->choosei);
if ( swap->iambob != 0 )
{
@ -952,8 +951,6 @@ void basilisk_swap04(struct supernet_info *myinfo,struct basilisk_swap *swap,uin
void basilisk_swap08(struct supernet_info *myinfo,struct basilisk_swap *swap,uint8_t *data,int32_t maxlen)
{
uint8_t pubkey33[33]; char str[65];
//if ( (rand() % 10) == 0 )
basilisk_swap04(myinfo,swap,data,maxlen);
printf("check otherchoosei\n");
if ( basilisk_swapget(myinfo,swap,0x08,data,maxlen,basilisk_verify_choosei) == 0 )
{
@ -986,8 +983,6 @@ void basilisk_swap08(struct supernet_info *myinfo,struct basilisk_swap *swap,uin
void basilisk_swap10(struct supernet_info *myinfo,struct basilisk_swap *swap,uint8_t *data,int32_t maxlen)
{
int32_t i,j,datalen;
if ( (rand() % 10) == 0 )
basilisk_swap08(myinfo,swap,data,maxlen);
datalen = 0;
for (i=0; i<sizeof(swap->privkeys)/sizeof(*swap->privkeys); i++)
{
@ -1027,19 +1022,29 @@ void basilisk_swaploop(void *_swap)
data = malloc(maxlen);
while ( time(NULL) < swap->expiration )
{
fprintf(stderr,"r%u/q%u swapstate.%x\n",swap->req.requestid,swap->req.quoteid,swap->statebits);
if ( (swap->statebits & 0x01) == 0 ) // send pubkeys
basilisk_swap01(myinfo,swap,data,maxlen);
else if ( (swap->statebits & 0x02) == 0 ) // wait for pubkeys
basilisk_swap02(myinfo,swap,data,maxlen);
else if ( (swap->statebits & 0x04) == 0 ) // send choosei
basilisk_swap04(myinfo,swap,data,maxlen);
else if ( (swap->statebits & 0x08) == 0 ) // wait for choosei
basilisk_swap08(myinfo,swap,data,maxlen);
else if ( (swap->statebits & 0x10) == 0 && swap->otherchoosei >= 0 && swap->otherchoosei < INSTANTDEX_DECKSIZE ) // send all but one privkeys
basilisk_swap10(myinfo,swap,data,maxlen);
else if ( (swap->statebits & 0x20) == 0 ) // wait for all but one privkeys
printf("r%u/q%u swapstate.%x\n",swap->req.requestid,swap->req.quoteid,swap->statebits);
if ( (swap->statebits & 0x08) == 0 )
{
basilisk_swap01(myinfo,swap,data,maxlen); // send pubkeys
basilisk_swap08(myinfo,swap,data,maxlen); // wait for choosei
}
if ( (swap->statebits & 0x10) == 0 )
{
basilisk_swap02(myinfo,swap,data,maxlen); // check for other deck
basilisk_swap04(myinfo,swap,data,maxlen); // send choosei
if ( (swap->statebits & 0x10) == 0 && swap->otherchoosei >= 0 && swap->otherchoosei < INSTANTDEX_DECKSIZE ) // send all but one privkeys
basilisk_swap10(myinfo,swap,data,maxlen);
}
if ( (swap->statebits & 0x1f) != 0x1f )
{
basilisk_swap04(myinfo,swap,data,maxlen); // send choosei
printf("initial setup incomplete state.%x\n",swap->statebits);
sleep(1);
continue;
}
if ( (swap->statebits & 0x20) == 0 ) // wait for all but one privkeys
{
basilisk_swap04(myinfo,swap,data,maxlen); // send choosei
if ( basilisk_swapget(myinfo,swap,0x20,data,maxlen,basilisk_verify_privkeys) == 0 )
swap->statebits |= 0x20;
}
@ -1103,6 +1108,7 @@ void basilisk_swaploop(void *_swap)
}
else if ( (swap->statebits & 0x80) == 0 ) // wait for fee
{
basilisk_swap10(myinfo,swap,data,maxlen);
if ( basilisk_swapget(myinfo,swap,0x80,data,maxlen,basilisk_verify_otherfee) == 0 )
{
// verify and submit otherfee
@ -1114,8 +1120,8 @@ void basilisk_swaploop(void *_swap)
}
else // both sides have setup required data and paid txfee
{
if ( swap->sleeptime < 60 )
swap->sleeptime++;
//if ( swap->sleeptime < 60 )
// swap->sleeptime++;
if ( swap->iambob != 0 )
{
if ( (swap->statebits & 0x100) == 0 )
@ -1291,13 +1297,8 @@ void basilisk_swaploop(void *_swap)
}
}
}
if ( 1 || myinfo->RELAYID >= 0 )
sleep(1);
else
{
if ( swap->sleeptime > 0 )
sleep(swap->sleeptime);
}
printf("finished swapstate.%x\n",swap->statebits);
sleep(1);
}
if ( swap->iambob != 0 )
{

2
crypto777/bitcoind_RPC.c

@ -309,7 +309,7 @@ void *curl_post(CURL **cHandlep,char *url,char *userpass,char *postfields,char *
*cHandlep = cHandle = curl_easy_init();
else curl_easy_reset(cHandle);
//#ifdef DEBUG
curl_easy_setopt(cHandle,CURLOPT_VERBOSE, 1);
//curl_easy_setopt(cHandle,CURLOPT_VERBOSE, 1);
//#endif
curl_easy_setopt(cHandle,CURLOPT_USERAGENT,"mozilla/4.0");//"Mozilla/4.0 (compatible; )");
curl_easy_setopt(cHandle,CURLOPT_SSL_VERIFYPEER,0);

4
crypto777/m_android

@ -1,2 +1,2 @@
$CC -c -O2 *.c jpeg/*.c jpeg/unix/*.c
rm -f ../agents/libcrypto777.a; $AR rcu ../agents/libcrypto777.a *.o
git pull
cd iguana; ./m_android; cd ..

7
crypto777/m_onetime_android

@ -0,0 +1,7 @@
git pull
cd crypto777
./$1
cd ..
cd iguana
./m_android
../agents/iguana

96
deprecated/obsolete.h

@ -18503,5 +18503,101 @@ len = 0;
}
return(n);
}*/
continue;
for (i=bp->hdrsi; i>=0; i--)
{
if ( (bp= coin->bundles[i]) != 0 )
{
ramchain = 0;
if ( iguana_pkhashfind(coin,&ramchain,&deposits,&lastunspentind,&p,rmd160,i,i) != 0 && (rdata= ramchain->H.data) != 0 )
{
spent = 0;
deposits = 0;
unspentind = lastunspentind;
U = RAMCHAIN_PTR(rdata,Uoffset);
T = RAMCHAIN_PTR(rdata,Toffset);
while ( unspentind > 0 )
{
if ( iguana_spentflag(myinfo,coin,&RTspend,&spentheight,ramchain,i,unspentind,lastheight,0,1<<31,U[unspentind].value) == 0 )
deposits += U[unspentind].value;
else spent += U[unspentind].value;
unspentind = U[unspentind].prevunspentind;
}
weights[pkind] += (deposits - spent);
/*if ( (A2= ramchain->A2) != 0 && p.pkind > 0 && p.pkind < rdata->numpkinds && (U2= ramchain->Uextras) != 0 )
{
T = RAMCHAIN_PTR(rdata,Toffset);
U = RAMCHAIN_PTR(rdata,Uoffset);
unspentind = A2[p.pkind].lastunspentind;
while ( unspentind > 0 )
{
uheight = iguana_uheight(coin,ramchain->height,T,rdata->numtxids,&U[unspentind]);
if ( uheight < lastheight )
spent += U[unspentind].value;
unspentind = U2[unspentind].prevunspentind;
}
weights[pkind] -= spent;
} else printf("PoS.[%d] rdata.%p or A2.%p error [%d] pkind.%d\n",pkind,rdata,A2,i,p.pkind);*/
if ( weights[pkind] != 0 )
printf("wt %.8f P.%d -> [%d] pkind.%d deposits %.8f spent %.8f\n",dstr(weights[pkind]),pkind,i,p.pkind,dstr(deposits),dstr(spent));
}
}
/*if ( (retstr= iguana_orderbook("bitfinex","BTC","USD",10)) != 0 )
{
if ( (aveprice= tradebots_update(&Fbtc_usd,"bitfinex","BTC","USD",retstr,1)) != 0 )
{
Fbtc = _pairaved(avebtc,aveprice);
avebtc = _pairaved(Ebtc,Fbtc);
}
free(retstr);
}
if ( (retstr= iguana_orderbook("btce","BTC","USD",10)) != 0 )
{
if ( (aveprice= tradebots_update(&Ebtc_usd,"btce","BTC","USD",retstr,1)) != 0 )
{
Ebtc = _pairaved(avebtc,aveprice);
avebtc = _pairaved(Ebtc,Fbtc);
}
free(retstr);
}
if ( (retstr= iguana_orderbook("bittrex","SBD","BTC",10)) != 0 )
{
if ( (aveprice= tradebots_update(&Bsbd_btc,"bittrex","SBD","BTC",retstr,10)) != 0 )
{
Bsbd = _pairaved(avesbd,aveprice);
avesbd = _pairaved(Bsbd,Psbd);
}
free(retstr);
}
if ( (retstr= iguana_orderbook("poloniex","SBD","BTC",10)) != 0 )
{
if ( (aveprice= tradebots_update(&Psbd_btc,"poloniex","SBD","BTC",retstr,10)) != 0 )
{
Psbd = _pairaved(avesbd,aveprice);
avesbd = _pairaved(Bsbd,Psbd);
}
free(retstr);
}
if ( (retstr= iguana_orderbook("bittrex","STEEM","BTC",10)) != 0 )
{
if ( (aveprice= tradebots_update(&Bsteem_btc,"bittrex","STEEM","BTC",retstr,100)) != 0 )
{
Bsteem = _pairaved(avesteem,aveprice);
avesteem = _pairaved(Bsteem,Psteem);
}
free(retstr);
}
if ( (retstr= iguana_orderbook("poloniex","STEEM","BTC",10)) != 0 )
{
//printf("retstr.(%s)\n",retstr);
if ( (aveprice= tradebots_update(&Psteem_btc,"poloniex","STEEM","BTC",retstr,100)) != 0 )
{
Psteem = _pairaved(avesteem,aveprice);
avesteem = _pairaved(Bsteem,Psteem);
}
free(retstr);
}*/
#endif
#endif

10
gecko/gecko.c

@ -212,10 +212,12 @@ struct iguana_info *basilisk_geckochain(struct supernet_info *myinfo,char *symbo
if ( virt->blocks.hwmchain.height == 0 )
{
memset(&txdata,0,sizeof(txdata));
iguana_gentxarray(virt,&virt->TXMEM,&txdata,&len,serialized,datalen);
txdata.zblock.height = 0;
txdata.zblock.RO.allocsize = iguana_ROallocsize(virt);
gecko_hwmset(myinfo,virt,&txdata,virt->TXMEM.ptr,serialized,datalen,txdata.numtxids,0);
if ( iguana_gentxarray(virt,&virt->TXMEM,&txdata,&len,serialized,datalen) == datalen )
{
txdata.zblock.height = 0;
txdata.zblock.RO.allocsize = iguana_ROallocsize(virt);
gecko_hwmset(myinfo,virt,&txdata,virt->TXMEM.ptr,serialized,datalen,txdata.numtxids,0);
}
}
virt->started = virt;
virt->active = (uint32_t)time(NULL);

4
iguana/SuperNET_keys.c

@ -218,7 +218,7 @@ cJSON *SuperNET_decryptedjson(char *destfname,char *passphrase,int32_t passsize,
wallethash = GENESIS_PRIVKEY;
wallet2shared = SuperNET_wallet2shared(wallethash,wallet2priv);
wallet2pub = curve25519(wallet2shared,curve25519_basepoint9());
sprintf(destfname,"confs/%s",bits256_str(str,wallet2pub));
sprintf(destfname,"%s/%s",GLOBAL_CONFSDIR,bits256_str(str,wallet2pub));
//printf("fname.(%s) wallet2pub.%s < [%s, %s]\n",destfname,bits256_str(str,wallet2pub),passphrase,fname2fa);
if ( (confstr= OS_filestr(&allocsize,destfname)) != 0 )
{
@ -268,7 +268,7 @@ int32_t _SuperNET_encryptjson(struct supernet_info *myinfo,char *destfname,char
//char str2[65]; printf("ENCRYPT.[%s %s] (%s) 2.%s\n",passphrase,fname2fa,bits256_str(str,wallethash),bits256_str(str2,wallet2priv));
wallet2shared = SuperNET_wallet2shared(wallethash,wallet2priv);
wallet2pub = curve25519(wallet2shared,curve25519_basepoint9());
sprintf(destfname,"confs/%s",bits256_str(str,wallet2pub));
sprintf(destfname,"%s/%s",GLOBAL_CONFSDIR,bits256_str(str,wallet2pub));
//printf("SAVE ARGJSON.(%s) [%s, %s] -> destfname.(%s)\n",jprint(argjson,0),passphrase,fname2fa,destfname);
//printf("shared.%llx -> pub.%s\n",(long long)wallet2shared.txid,bits256_str(str,wallet2pub));
SuperNET_savejsonfile(myinfo,destfname,wallethash,wallet2pub,argjson);

2
iguana/coins/btcd

@ -1 +1 @@
curl --url "http://127.0.0.1:7778" --data "{\"prefetchlag\":-1,\"poll\":10,\"active\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"newcoin\":\"BTCD\",\"startpend\":18,\"endpend\":4,\"services\":129,\"maxpeers\":64,\"RELAY\":1,\"VALIDATE\":1,\"portp2p\":14631,\"rpc\":14632}"
curl --url "http://127.0.0.1:7778" --data "{\"prefetchlag\":-1,\"poll\":10,\"active\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"newcoin\":\"BTCD\",\"startpend\":180,\"endpend\":4,\"services\":129,\"maxpeers\":64,\"RELAY\":1,\"VALIDATE\":1,\"portp2p\":14631,\"rpc\":14632}"

274
iguana/confs/BTCD_hdrs.txt

@ -1,4 +1,4 @@
1112511
1196510
0 0000044966f40703b516c5af180582d53f783bfd319bb045e2dc3e05ea695d46 a5d211145f8e6ba0920b2893d307c5d7c207ae0800a80955299678d1706ea8ac 000000000c4682089c916de89eb080a877566494d4009c0089baf35fe94de22f
500 000000000680a9a697eb71155b18a5827e0889fca28afb81fcbb46469ed7877e 79f80a8f54c6762d6408347c6dd7dfd2f8b8c191077c1d7881dfc5b7ec6a408e 0000000002b868fe717dc60b8d146de4d9aecf779b7314224908566e01847769
1000 0000000000000cf908c887020f8970b7fe952f8b81164d83a87621dfdb581d08 3356ec4296ff2f04281492b0dedbaed80edeb6dd9170b87230ff79f6b0daade7 0000000000001e7c6d28962a03b3d75ffa1355ecc6d3021893b2727a1ccfc669
@ -98,7 +98,7 @@
48000 b62fdb21ede8c1760346b4325be6d08852ea3944fb0adea0b408742977fe122a 8ff82f9540381a20ba68681f6e5442df8852cf38b2476d0a6bc61162d6eeabf3 f9590291e90b1145409aafc4b35b003c3226a54b865299168fdc55ad056e6cae
48500 baf6f61655d7a53726d313806841300c1d729f7206f62a267c1b4c351b365763 fde6fd7055e1f6e03b9d327b3c502fc02bac00738ae0fb079f128e2774d0078a 7bf98929914e719c43f044b8bf5bd0cb23c1dc197682fd0e62e517d426cdc1ac
49000 854ab5b99aa89fc7d03f0b2d7f8a54aa7c98b23957520ebc8f4e6305902cf2cd f39213ce4a4fb7c2de3088ffcef3712113958562638395dcfda8ff6da621a09d 82dae721c7e522a846a3964961366f428d60788ebe25f8f649ecd605fefcf2c1
49500 c964b7057db84d6b9282baff7f2f09dd72fff06dec110201904bfc3846923bdc 51261dc44b1299e50eb364ca4d236b9b5074606928ecc6acae0eec2b6352376d 39f54442526f11b0c232276a00372762bd2481def4502b9db2413e0ecbe42ed6
49500 c964b7057db84d6b9282baff7f2f09dd72fff06dec110201904bfc3846923bdc e2c15ad8f20ec681283af4d88c56e1433c9c20ccbd11e269ea267bbc2f9ebf1d 39f54442526f11b0c232276a00372762bd2481def4502b9db2413e0ecbe42ed6
50000 fab7500f5f0b1694a9c65a4b02e84dff228af92fa447d810200a3b14c35242cb 194fd02a69a66e9293a06d354206757e2bc23484e3e8cd80522ff71feffbdff2 4da797c00b7fff361aeda31e847b2e8675c4061d1cc87e02a040c7ac34bd198d
50500 ed4e556f251680672e442c00cf6a48f3a787acc589ef3e83019851808ffd05a5 b51a4252fdbf12378dae10ac1c94690365e096f786feadb8e75cbad87c8f8a99 5a366c4316e15730fdc118fa8c910850d3f43ab2534023892dee2c1834c4595c
51000 2410005ccfce88835da97372f39ba6708e7eb10f97a4428ba2cd51e8ee87f7dc 64e4a8d5a545ffb1af7a5dc66be6ff2aa517a99c7bc5d7b2d1d1afafc1b93a84 574faa5def6045f6a923539b36bd27d5f92fc7043c3d6fd783cd3721ac604c4b
@ -198,7 +198,7 @@
98000 5124c9f250499786c2948dcf5e2be2c7c61b446be3972adbc0d65edc8ff87b0b 7f5892932cd29e78d17fda5c3d15bba0a600f1e9ec2281dbaf0fb1dc67d5e8dc 102458513889b0fe4946100a0d8d3091f46e7627c09a5b5c08a78f2cef987f25
98500 6f507567f549b3b1e387f1bf80ec0fef03a9a1af73147dbbbae2134d6d1633c1 60d73750b6ce4d508dc18cc64adc9e68b6bb7ea4828f09e8fb7419b56eb652dc 93645d925bd3d878b65cdee59ac3349db5af2325abfd0fc696fa8a2831d33d77
99000 64999aa405a2a2e5de34a4c3547ee525b503566532d82c35839a9e74a1389ffc 20052d2448a28485dee72fe536fa8b6ffda1e8465af82491e87980c8f806c8ac 783113c40eca4f0a067fca5ebfb7bf091561cf6751c3e4ebc3473c8c4c5c6400
99500 3cd60a841f4913bfaf6183237ebd325b7baee3a5992f092118fa49817240a385 e21adf8931f3ee5103fc1a3f8a92282e8bafa9fccd203acc2cb24dd0d28b6ca6 c43bb024c7dd0865bb95082f5864746f7bb41f9c7feca9adfd50856834b50d11
99500 3cd60a841f4913bfaf6183237ebd325b7baee3a5992f092118fa49817240a385 08f5df63fb4186638211b70120a165898891fdb195aa8a5b4e41bb0f9f0f16cc c43bb024c7dd0865bb95082f5864746f7bb41f9c7feca9adfd50856834b50d11
100000 f0394d3c54a8687b6090333aa03f93f9369846e7c142653524adaa9192b37b7b a739c2cc2c59123a161c9b9864a4c834dfd5021066198f51fde3ba9348d195d5 2045168ef0fde83f218d83274f9bb7204356cee8ee0554bd6824cd9b720d5429
100500 c5ad61c2da15ed8083a3d3dfd80d226b9977dc831c11e83b75b3ed68d2af0e25 e3121bb1573ace63889a3fb9305fb95857bda6e889e9a88aa2ad4c76cc407386 ccd1cfeb131dd0e478ba664886c27238e71ecfac2f3effe52e192ba370e5bb2b
101000 27c2691b9e3e9cc2008da070c0af12d0997c895fea5c405347496c6a37570f95 d465e2fcce8e1b4bf7355b4d87445d2557336354b86db40bc924752796aca840 982d0e97bbd8caa7a1f02b9b2093354bcacbac1d02836a26f15af92f5dd9c7dd
@ -248,7 +248,7 @@
123000 38b438bda7e108f97112d984725fab27d277a08b1a72affda99b79654c21e0f7 b1bfac6a48327a4005f79408df343adb7c9cb22d2b70ebf2ad79121cbbfddfde 605d68df65abb13b0b19301fb134674efae08e35be4b80d00e4124118e2f7a6d
123500 ec7a4edbed36c3d7a0eb4098e6c6bca397bf08cbc0e0b190a4cfd506df0ac656 7700c27d9c2e7a0360bfa2426fb3688bc8b3ca935de69d15b6dce9ca6b31a4fd df19951e635cc5ed4fc8c1b89b25e72949eec677b0a08b9f4bb1a2d04a00c99a
124000 c3d8229a44faa337d05e0b5311a5dda37b91babcf95e5a8ccefbe872af0bd2fa 793481678c778e8653890f1145e178e42effa2ea7f8e50522187ab298ec6b512 76327e3f2c09f87ca41a12c67941a5caea3779a1c84f0d37a8c6d530d21f626a
124500 1510db798814caabdc90f2b18282456d1b1be40948ba43fdc68e2da017c2dedd df6d64ca6cc492e32e22a218af5a3b802ae452d66ebb018c5d87ccd35489322f 3f12f0e3189266aba9532c078df96b9f6db6c9f4105057feee13485af445451a
124500 1510db798814caabdc90f2b18282456d1b1be40948ba43fdc68e2da017c2dedd ecd23539bb6699ca362d898cfd6181c49ac97b0d9031538fdc0303cc8441fe9d 3f12f0e3189266aba9532c078df96b9f6db6c9f4105057feee13485af445451a
125000 82460aef9d1133d30707bd416b3afc2929a388ec8d1431e92699aa625a4cc3e9 8ac7f7dd700d26de62506f88cf117282a7840236bd66aeb148cde751ee3f7dbe fdc651d228df5a66e58c4e8566034b13fc7c5b9d6e8ba6e7ad0ed1047e0c3533
125500 cf883230f6afd44caf802508a9bce39adeae83cfdaea0ca10c5eeb7e6e0f7abd 269f3d0cfa2df454579a4b7bc758970ffb853aaa7600808071ff130b994adfc8 cc6f34524eeb81b4d04f506e63828603973ec28f2f6eec8fbcc89178f3bf5f29
126000 e36d486bbf7eed518a2a1b1668b516daf85bcfb0359337042bb8c278a5826863 8ebd6563987e0969505718a915e7945f0d26213475be39a4b36ce9928d313935 c139ca3a3866adb6d80c89c4ffb871c9cedbdbbd8e2cc4e273a3ca2d5897268e
@ -298,7 +298,7 @@
148000 f50a828d973baaefd78a069efcbc42389c7a9d0e17cf4476d6bff763d3b219a7 7d057f6f26c87ead3d5a3bd63b23ad81ba5a9a84258b46921f27f07919be82cc 88dcf2f5fff804ef8b64dc24ea8747bda74ec2f0f0b1c15e5144ebef5543d29d
148500 219d8ce760106e41d5b6cb72360801884950e795cb80c5cb75a4cbee7c9884cc 66abe4202adfd1c91b092dc15dcd702b0e383c2a9a87dad84efc20f2391d6024 2e1b9af96ce01ed55a76a373db6f175aa7939267222b8ae2b81d904ab115c6e9
149000 e13e98351891f9940b40210188016098d67d555ee60922bd710d234393583886 2751b92f77148b0b55b15c1e1939f566749d8bd28b70f9fa9445d5c66b116a4c 679915acf67eff37a889fdec00abfe90edd8d9a6b5195eb403b4a33b2b02f6ad
149500 bd0986d58541fe55bc5615de06174615007bb0a4e9b7d52a6e1de27660ff5e1c 8cbd4ddd59183bf20e4bd2ce22136e8b1109ea2e81fae850281e600a04816105 03d93cf4d27bf5519c826bc4fcf8bdc5ebe413953587f82355c4df6b77346882
149500 bd0986d58541fe55bc5615de06174615007bb0a4e9b7d52a6e1de27660ff5e1c 075df9893a744f62bc60e850104f6ad60764b8098a18f89eba4418789bbb7c6b 03d93cf4d27bf5519c826bc4fcf8bdc5ebe413953587f82355c4df6b77346882
150000 b0a52b599b482e9e081373c2d0c12adae59742c92c3feb16f2b56a536389c566 2b66e1c89afb06043357c8a702e15f37c6cebfe2c3ac2e2994b387b111852c2c d4e5a3daa131a0afa29967f8ad8f402f8baee17056f075d0c811687b53617103
150500 348a90e69dee425ca95455f04bb8e0a9a5e8e4c9efc06e8358e90069f33cbd87 6296399a3fc3e48c09ff1bfda646b6f19277f2c2562c8cac5c850d691b2c2110 f2e3eb906a46f4e787a786c9372b847e3d667e8b7afd9dec5ec2ad405c5995d5
151000 c2fc138fb4f13487c8f0ba65b1843cbcbfef598d66205495ce12eded834ed5d6 6b3d49e0f596367b951b6939dae4629d81758a560d8bbee402b4258fe3896e18 8db9363659e76cca5e94af0b7bc72a2da150e5e34a80aa86fb42d56df45e2494
@ -348,7 +348,7 @@
173000 4187e88e79ee333c661955addb9fd1ff4853bccda1c1f73585fbc4b866d46ffc 2c561a6112ac2531467818ef79bda7fd294cc2d1aca8d700ffaa8ca3c7e2cabb b4b9badb564279262308912a9588870961cbdb6fb9ca5488f37928ed9eb3802d
173500 979cd0755a559b4298c4e1af1ca1ed389c152f6800718aee777431e3b84b2975 817578adb3539145804a17166425c07a798bedb2637e8e6567e77406da8cbab2 e0337c7b2e52ff99af8dabedd1f1912d1a2201e8153b3b984036c26a7fc46ea1
174000 84e476b10a846c1f76cd25ee8721aa8098a3a794f56a5a6e2fa8ea08dd7de954 7e3015ed948fc061ef3955ff4d18f5c9f2ccd86794be959d5e51e604c4ba315f 4282860b30cc16a2db68903e8bb0f3c1dbaa5949174240e3222d70a994cec1f0
174500 daef6a8cec458daee2a97f145d74867790d12697f424e390fa5ea96c0edc5889 e70b3b4de2ebddde769763e56a861ea73e3a9ab8360f0626ef5075560899c18f e69b1eef08603fd07359c1216cb118cca49ee176a5448a49e9a3fbaddf9936cb
174500 daef6a8cec458daee2a97f145d74867790d12697f424e390fa5ea96c0edc5889 8edfed33a6db9e18b19b49a451c2278d0df8c17b86a5be2703336ad41ddecdb7 e69b1eef08603fd07359c1216cb118cca49ee176a5448a49e9a3fbaddf9936cb
175000 3f6c5c68d024c26235bb054fe0e892b4172a50c900ff7e36a061b17bb4adb44c f36837bd4b44bb99bc4a99acdc71611e6bbfef26095aad173d5b6c2847cf5cfe 31f4639cb01d8370582158623353a2f1843dc7d0d5240035572fe76aff38480c
175500 2a25fd32974c49ec621f4256e89f3c1569734a675bfde35fe0ec4572459a99ce 0de2de8ab8f49f684a4ed93762fad169165b9f29306fddcce37a10b3e0f324b6 4aa307435bb260b7936bda377dc6b2ee78dea1859c5a50504adc278372449044
176000 ca43896b57242e50c5e1b0904b12b7008d63f30810c9d1728929a45a051b1c28 0c0a240dbb5b8d9c5303c2e401b1a9be3eb940a2ccdbd40482b18ebd9d16fdc2 735a67586d8c32fb70e490082bff35c245683e46815882484721852e5cd958d4
@ -398,7 +398,7 @@
198000 c65104e71ac22bf228691460ed6036046fb091eed1059ce756e1056bf149148b 3c3f1f86ad2cd5cea8a979c55d01fe3dfcd5d6ec6fe485c3461d65604ad4adc0 02fc4a02986275f8692e7ecccc1264bc784dcc1ccd811bdb1db098cd1e3eef1b
198500 30e8c038e2a43c5ddc9e0f3a030070380cbb09e577ed7d783b83651df9ad5015 dd0bd23d500ed9eb599249629cf07236244c001e0517c93dbe6debe262e7f4ee e6739a8f4f4e629a08189b31048e82982103b7d33ab0b4b56c5cdcb1ea2ed1b9
199000 4b4e61aa4eec7a39dd94aae2c114994fe32185c72050d3908b7fc0860d41458e 0443985e3352c7ec9e83fc34187460671679f71a3eff263956dfdb306f4e518b f6611077832a1c9dd956b563c1b09457d98a2b6b832d3788e30d8319a1026fdf
199500 09e62ab674ae8526370e0059097c80cbf382fa098e67d4a1175bada96d5d87a1 83de440f57fa996de35e346f73bc616137946dff6edd47273615c0a7d4d3d7e7 681274c8b4d83a3eb9b76bf5e984c2dfe0892282f89c2be9fcde7921ebb62dc0
199500 09e62ab674ae8526370e0059097c80cbf382fa098e67d4a1175bada96d5d87a1 b78d27bf65267b4e1e7298efed4270582f8c9e26d53af59d73250d4862ca4968 681274c8b4d83a3eb9b76bf5e984c2dfe0892282f89c2be9fcde7921ebb62dc0
200000 cd9a04e20b651dcc4518ae71ff5b0c8bc2ed5c6eb3d5fd2196b1e636987c3a95 6160d970d27a8f799d74d3e01630761bd655268486a9107be28b128fbbc9dbe6 e00de657836ceaf31f5bde6a5751a6c4c475cc23f9e78a01b405c06e106b5414
200500 03609721a5de60ab9175d5cf5b9dc444f8c9d420b94814be90e39e4d5411f33a f1625e3d9d93f152c9e351928677f1e8cbca9c6812473c759de6216321fbfe53 d3beb126fd503a82fc169a7b4b2c56840e2313847bfeeb520a91bfc0bfc721b6
201000 f1be5c8c40f967dc2f1448f38a7e7e6a47c6d7e6ae9eae150762642394644f19 562f88889f723e4c4d2a7b0f8b0eed383db6aa34c8e094f88238526206af125a 1e62d55da61d7571fe187cac6157379772d99a15a967492074786b5aecbe6250
@ -448,7 +448,7 @@
223000 2491331dde706d72557719b2d51300a41185e0a231600a748cadf6d76cb97be2 f464bf83372078d78b37b0aab9e98a697eb07bca9eb62d65919635d9a62c29f6 16b0949606f4d837cf58811261026d3e7a014f716ce4b8775e94808c33fcb1a5
223500 757897eb0ef5db6fac3a16b4167e73ac300fdf2126d175ddbfab527fe72e5cc6 8033074e1db6b73e123b62aebd8983887d50385f70770bec207b628e9c945425 ff9e7cd3fdafc513b0522c21678c4b6334872dd9c0487fdbbac6d8bd11b3e516
224000 b07c519e796e7ca9ecf620e6437128ea8762b00f16ffb3f2ee2abd5973fc3b21 eb8135fbce4a5f3d73713eb67416be84d02239e85bf87dccd22763075438c693 ed89408882869163baecf310923d4ab5bb880d85741bfb2b4ce322c6b049bae8
224500 4a873566e5cb9ef793cee37c09f7bc11668091934776eaf0cc5254cf8f565ebc 9484bb580ed6e25fec7482b2f708ee463088b54ee3bf3a06ffe06a1892e70360 ba459cb6f5e554cbff0c1fb05d217e2b67c53583b6ceb3f91f0885ed76af94d1
224500 4a873566e5cb9ef793cee37c09f7bc11668091934776eaf0cc5254cf8f565ebc e0b9c689e95ff5d675aaafc9916f010b7e5b9a13b201686d4a600c5516a8e263 ba459cb6f5e554cbff0c1fb05d217e2b67c53583b6ceb3f91f0885ed76af94d1
225000 b4b671d3954ba70856a978c8c173096a9db7ba168c8815730cb445ed0b921f7c b16288a5f727839ad38a64139741eba8f93f33035d294365e841e714927ce5d6 0a54bbd14b732d0e359a9d335dab210d8fe841f5f60246a688ea574a19b171cb
225500 17279999d391f86406797119b105c9f5f6a02678f7c3d34d9f272c73dd77faf8 d555247b00f10b1b9825a09d2692d22129b967e1ff244d1a60a756e7b2d9cefe d5fa227b78fcc9305f36c7e8ea6cf1c3f8af9cb61a697b5ec0658d2fea876edf
226000 94d997cdf120719be0ea6a4eb198704a18baebdf13f65e28e51b49df7de1d861 d3d5f6655db1fa41b2f916399ed5f36246ad98025f6943480fe15e43b0a8a034 c5144eb0548d037485fff77b1bf83cb11fcae1177d23d5883c4b711ba0a6419f
@ -548,7 +548,7 @@
273000 7e8e42c625a39262e7cd8ba81d6042788c5685fb7e1925556bb81d87f23fc9fc 60337941f27f0191f55253642397b4141c09a3796a2e8c972154c90847a04adc f65c9be70852523b31c7a92f95821f306e9017297e04d39cbfc4c8dc3ac0678e
273500 50d2fab64d92e6bd34396a65ea083c254392b73b806c9c23d10a64fa2046ef63 def5f3f2d73ebc5c90d4a3e5e8100e51e3144b63d3de0fed9a6393ba3138f62b 62b9175a2c605119fc599836a2a00fde40a976be16043bf98c0773318e8ad14c
274000 86afbaf7b386a0a5ca9199f42849ba58e03c52c3e14e4796be5a47bca65c3e56 9fa018f6e78596557adb6a6294c3ed8c02e5b07835258d38d00714b662cb88ad dffa1e76e920169f88dd0892436e3dfb2a3a6daa1ec42287913d5b758ce918e8
274500 f4a2f13cdd599a02991bab088d21e7d28d907caab124755cda5b5da1a0ac3514 3e9121bbd05409156a601f33892ebc88a1d832d59180e591e571cb8bb16d0233 77b22ea80e05caf4ff54cc45a88682693fb8d94f28c18084ec8f8d5774ea4a79
274500 f4a2f13cdd599a02991bab088d21e7d28d907caab124755cda5b5da1a0ac3514 27a84bde9f23b95957a07f3950a238602bd158eb9fc3d8b7ba88884425fa2eca 77b22ea80e05caf4ff54cc45a88682693fb8d94f28c18084ec8f8d5774ea4a79
275000 a655f397a1362429e51239e663aca0a3582f4a984001c6093e48c4e0a2e05941 c3a045ee8c5239615793c006587052cce7d63cc81c2ecb2af75e67f3c53a8ab2 380849376c9a323fb3a9bc59969eac627adda0498cc3f60c6c8979be719e29e1
275500 b3b6e311d0f5bd738f2502c2684af690e0f71c2a4c55afd5661d069e604ef3fa 0690d029ffaee874f0407d12906116c79bba67f9b8378a31334b25483daadf3f a930052ad595d7b8a70e71c48aaffda01d38e459df8e0c1887b07799cca6bc5e
276000 f24a85fcd91ad6a82056c8a76c2d3d5d04070ffd7d9b84a94ad0d6b8acc0c187 5c21716aa2a15d63d306717b47e86748fb203faeb1c6b19d63a5349176e9fa06 50e49772aa15a6a72eb61487d735b18f15f493cb29145911cadc97c1b684bef5
@ -648,7 +648,7 @@
323000 8d6c05ddfebc0476b7ea506c6edd8b1e7a1f04f46d3d44c404936fd8c8c97089 c8e2bb9126149c636285107b6b51a2ea4dfae6a9362ea82e9a01fc5b62317e13 5ad60ef0abc2a5ecac539d9f11d0c77c0cdefabdab5a9b5a4f839ff5d4986002
323500 f92d520784eb12d8ae3c11ad1803d5dd95a497c0084c88784702a5acce66ae41 81e2f522cc756b27794e1472df684a598aa925938ee87027d455dada0d2835e4 c0a590351ad91977c743641c25a96711de72eb7afcae92068bec7d39044db470
324000 4d33cb6af695638f89500645f741981a2b96eb2b6f1361cf4915e9df14639412 0d5d58a71b6fb721127f551a4744091aaafc4740ce74e1e094783488946bf46b 95d0d5cff5e6ec05e646c3afb0267b14cf1455be7cc94c7b2b99caefb333a913
324500 9cd5a93ac51080a0a3dfa6e7612adebfd307a7c2ea510d033368490c6d25b7be 046e088e42fe85a8f29cf0c61d1d7c57619c29f3a5574cb7284374151fc02f75 ba026961f26ad93bf8a1bd29ed0fd9c00d3b8d20bffedde3c7656344ea5e7686
324500 9cd5a93ac51080a0a3dfa6e7612adebfd307a7c2ea510d033368490c6d25b7be daf9a838f7b869ca77d3d1fbfa8631bd99aaf46967802148dc7e44fd261a530e ba026961f26ad93bf8a1bd29ed0fd9c00d3b8d20bffedde3c7656344ea5e7686
325000 ea1bd97d2e59f6bddba189466ffe1e7be63f5574f110d5b87ec3e0294b2bfe5e c4d8725f512f352599b2a7506b3c52e78012eded7fa5f6bfd99058046342b2a6 2806e0b32c301fc7e7b517ae6f3499179296a2a56e71256b70a68f44a6c18b41
325500 df8156f044118b84c3e2482e346c5639a19b2f1583944286cb9550931c3ca0f2 4310bc5bfec110e5da8fe1dc798b18d1b1453895c70554fb4d52dd7d6d7d813e 0121cceb434fb22a7fe131aa8e3cccddaed1db6365159c2a4540a3e82bf89af8
326000 d46ca9a4ec0e9126c9b570d00f7b47a005d51f25d9fcbf0c4ca71a29a5f255e6 426c81fa951ff0ceab76207fe576bad3be2279d802d5b95b45881c73827a1241 aa8d073b426c4a1f76a7fe65b5f70ef93a2257a4d8736432f524e67f5845848d
@ -698,7 +698,7 @@
348000 e72024ff3d0ee72f4f78b7e63ade7a7ea037da43bfa9deab400f6739fde391c5 c0ed8b08b6b7d50bf86069b1e8f6c7c36435817114e27745be63db96b5f716bb e8f81bcd2b69a03b9eb423336a20bdcf659ae0711c3d765e7ac89931fb25d2b1
348500 1d9d9ad6a6b1a8d5392aa6d35a7472fbf80535ee334a043025cc3637d9894db9 101e9ff2c05137c25a2a270055264bfdcc81b290826d968ca94de4038f791790 a3afe000faf5b427c10820657138d0fe4713b009daad3c797c00c35aa35d2d38
349000 bf0cadc56a8359bb703738a06f7a31b305fe7433989e7e4094f379511e27a19e 2a2cfebba2b09215327049cba461b4c56cf54cf31a0d3c6f8b21a637e6a4db5a 7630b9c11e847b125d2d7879d4e6305401fe6656c5c997c7a521cafaf170a131
349500 78065cd5e2af5a3a4e838289be5d1460605048c1cf2fd1ef9ba8c88619631e91 c00a12d97c8a1cdf4cfd4e5185ef06ebf6b6c58aec4cbba2851e47c51ab03089 2d1790871fad7a3ac8348c2c1272d78f99e71e73ff4d51e4e0f1421815b4cf7b
349500 78065cd5e2af5a3a4e838289be5d1460605048c1cf2fd1ef9ba8c88619631e91 aac94ac665bc7ba954323a07216ac1669f19bcae1541459f41534d8058dfd3b5 2d1790871fad7a3ac8348c2c1272d78f99e71e73ff4d51e4e0f1421815b4cf7b
350000 937db7a154c0d4c5043fe8bdaa0969670f132252a6c6bf8f7ed5858ee11c97de 8c276300614c430a75552e0cca7d83834ce7bccd7ea1d592012300ac2bc5bc66 1fbcff068ae14baf34f3bbce37b16a8cb04bb7d3cb561eff4207b4430d23b8cb
350500 6ebacc5b6fe9ff0e34d64a047981fd170f1b13d40139073e6e65da9a617fbd18 f181abacd6038099f96854c2c0ac8f7d19504609f36dd0aa085af150f21ef930 08c66db3dc00525562741c47770de3332ebe18568d59fd418949a93788b0e785
351000 156a0053ebf2ee2e68a7ef337edc14044503653188c60669ec924fde43c21ea5 dd728a51d7f9e8f04e74e2116698305470591a6e7937b2c4b714193843eeb584 6e541a9fa878ece79546e3659f1a8dee6e9b7a49fbb66073f69e3c7eee9a8339
@ -748,7 +748,7 @@
373000 c03556ea141010a523c44868eca127684b01e83f0a76090906728aa34e599931 b2d61cc71ab0b18171db2117a6d535128c25e68031c3c44c059c7c7965d05c53 4762b483ebc34a038245662d1ff2938c9b345ea9f0c43d2b06efaecac6184115
373500 b61ce82c38d812c1e72a830b062bd3854701409fed42cb8cf89d9c83a68aa4a2 3cb1ca2e543310ff8d22cba4bfa2973e264837d2a4a5052cfccde4de4a4a477b 85177a9b8ee909e6b462a0edbb6bf8fa04fb45c20a41242c60cf9e25ca661a36
374000 0a2b671cf0c4e82c857482fd9eae13f8212fabc508c3f6137fd3004038d2fb7f fe35de23fa234b6dae59ea82cfeac3259eef5f8d8878aece906a9e71121ed71a 2d73b8297e43e4800b22a92a402fc7fd9298cf4ae76b7d48a97e286d6833eb75
374500 31b2c402de5e4f0911f5d14b927f38483fec9234b0ef67efa026a3648ffd12a0 80a419a3787c4ab2a27cdeebbb020eca8f63743beceb73559c09297682c46475 b96f53cb6f434570c6f019f74824dab40cf8df0874c43fa257442b69f43915a5
374500 31b2c402de5e4f0911f5d14b927f38483fec9234b0ef67efa026a3648ffd12a0 63c1e30437b3fd68e0529230da7123339e9b8d2079576d68221897e443be0e3e b96f53cb6f434570c6f019f74824dab40cf8df0874c43fa257442b69f43915a5
375000 1673933d5b2d1584e3c923b45bacbae604b308007ff19e25999f5a1d89afb040 cdf2c192e290686651e7f63bbadc54d0d8f7b1d2f7208a097807de32159451c2 c5b8ecdcb1e90452677fbcfcdb638f552e39c9f1b842b5e7bce3ffc104aeb718
375500 6b35b7e04b2d788de6e2cc8909ab7fc5470b385905dc0e7b7b8524ff57d7d7d3 ce795b401b8cc3db0def999633c2835436348b032919c9123e1481800aaac88e 16d2091d9d7e6571a6a837e81f4000bbbb3057e229a8999b69ca532e068d84d2
376000 9a2ec84dae6c1b6dd358c57205e0858d987b68bc1e029cae1b8239ee5ac181c0 d576e0d718d3f594ef61eb7be25e4083d1ead1201fe8eaabad00c63938144f85 87b22143efdfaee0e8bcb0ae2c50b0c5b70154d0160e2718f9f6deeb867f86e7
@ -798,7 +798,7 @@
398000 2b97743e109f78d910532ee0f342b1c491ae74badc58085ba2a7b9029f9fab5f 7ab0985407419f861b725834b5643d2666cbf5aaef6aa6eb94dc9e35c0f630cc ab4a3aa2dc717532967156a2f29cadcdaced3564a28b3f2a2bf5387b9f961c2b
398500 4df2d83b00fd22751d5fc8b22743c9831701408cb9b788d86bf081c666e389fc 9c545b4c3cac0e1d1f9fecd92ba0f7c61ac3e8a28a8c973ff6026fdcd90c4a43 a5ff589844dbde9cd52951da27d06731785b5bec0908d7dfcf1703a40a81855e
399000 6a00c77818429d3ed4b9bd5211a3cca69cf68c9a99a89f9e1f9e5301c08afb03 44e27a5f4e4c32f6698257f5cd63ecf165cf4941a94f7473f3995b1a3a6bfd82 3a870921ca65e9a9bae895a4a29520a70a4f3ca8178117491427be7642070aab
399500 a6e49cf1def602b4915fbc2b208490f5a84c8a93366582f77ecf5575119e6cab 83be829fea8e1ec65f493f3910ae0f3798b9fbe006e41df4bd927a9bd98f3cc9 c001f8b45cf32c6503760c6905278ee2d55f3035b79c05307b9e446d1f2a5bb1
399500 a6e49cf1def602b4915fbc2b208490f5a84c8a93366582f77ecf5575119e6cab 5100ff78853bcfc8606b12c5c335c772964323d7486d55af0fe315c05715875f c001f8b45cf32c6503760c6905278ee2d55f3035b79c05307b9e446d1f2a5bb1
400000 641c6a53eaa3c9b94e924327e70830770397343d7927eb713609f14448ea6228 4252f178c0c42e28cce9ef5c0c40f08bc03e3b631a393de6eeff90e7b4d26d38 b1ed7a8cc5c9177b8fb8754170251bca86c728a244cfb54b7c79fd84f025021d
400500 73e034517c9649420d36a641130bf16b8634fd3b2568e58198508e65def1fa37 a13f2b06f4b1b3daff6c10571f25318c3ec8e9f2d42c59f4f19369bcbff62da4 f3788132cb664a0e812910995c536e03da19b95e03d40771fe6a7094afc1ba77
401000 b249ae5082bc1eb852ce420a2361be80dd17228fd17c709761d0f52e81e8478f 679e41c907f1e82c438671466ce285437ba23fa2c845d8c07b43af0829692b69 b5c351cc2ce12bd45cfdfb989b02ab756db45764b8cbfc5c2214ddc999d606b3
@ -848,7 +848,7 @@
423000 93bc08b4a0ce5ef57f63ee483936125540dffca3d9d6aa1a24ca2f69df2e2100 a02f084ecd89f843bf976fcc5f5c3d7b9a5c2b5f549c12b896f4985f3fb18f82 28fe299babd0481c8eeb2ea1cec2f68f82ab85f571d104be8d33943008ee5f31
423500 4a09df19634b6b11e40263176de979e2aa0b3aca1a95825c3ad7eac2a84bad86 1a2acd078f11b82d5bfc43a088c8ad652ac993c2478fc2469859ee4885da2ef9 dbfc352c35d85d0d29acc20be05bdf46ab6e6772d8373a7f43c73912d1b803e5
424000 bad4fea158757021f14bfa735be04d0514bc3632f96600b1e4d632efc33c6238 ea4dcf8ad8122d652811cb25f7277c96380f8f3b1c839f63d8085d1aa69f5f89 e33554c749df7d7bd996e3edd93461887d2f891cbc8ad2d8a4eb39604bb40c32
424500 bc5a6d616947f853ed4f4d9737fa063959d32b8acdd92b11e27dd47b435b38b7 335830fefaaddfa0a3daee3b4ce06b16ac1930cc7b2411dbe831d3c518a520a1 bf4174f8c15c19be02ce4152174b1fea5ac4d471e854c80dd226a6dc098c0969
424500 bc5a6d616947f853ed4f4d9737fa063959d32b8acdd92b11e27dd47b435b38b7 80e414f560811279931e8906a37b79d64836df3f560e19ad9a9940a2e282ce47 bf4174f8c15c19be02ce4152174b1fea5ac4d471e854c80dd226a6dc098c0969
425000 5b30049913f1ad030235ecd4deb6fc86120b8206e5269d39e56e6c5f1bdef8e8 40b7b38eead88896d0993db8806af19167c6c2dcaf989e571a90cc689568e9a4 81374c7f070937999acbb9c2f4c59cb64f5d477fd823bc45bf158bc54bdcc9f1
425500 1c8c6b6e080abbbd1aae24639ad147ce9dcfb2836be1a4d5520ebfb3a9af61f1 c6e3bb5149886a4050a284990303b89355967d534894ec988b9b9be1f451edcb 15249bdd6d51cfcc7470babf6556d8bfd2494c18e57723a4974660afd4af2554
426000 9a644de2cda849b362daeec3da5cc28e71652c6a2bbf37151d8ec938e728f2b3 a38d8a78768bea93a802d40ee5d92753afeae17ec5c625515512f4284d56eb1d d1c2c919b2a3e3615ff340778ba6d3bdd2d0a177dcc679ed3f27cc28a8896731
@ -898,7 +898,7 @@
448000 4fc96bd14509bf55922cb5d8ed4cbf372f7ce991646e5be3a086204fea0c368d 0fff78f76cbc925b62ffe927d50cbc02dc83fd9e5405a3a77e232b55a494812d 67e09df16c3fb0a8fac40ee153922aac6983631f99a341cde08c05252fc4e11d
448500 742e9431b2ac6f0ac24e58cb8e6088ac1de875cda8f16739a78e0f1f7c05ce33 d892c34609acf3eeaeb32a384985fd2da70c4f53f59f8c459eaa5e74b3d61c40 2997569447cfd809ddb51792a754d7b497adb3c23ad38b2fb15082e4f09c53c6
449000 335341c810fdea9e158ba78a542922754fac2e0fece92c27559d14c5c3ca0267 8d6340cdabfbfcddacf2991913176b17513be28b9472b744e7a64b2f2ca13896 b0cde57f64c7794da94547a5341aea6fc5680f24bb3188a01171ebc61415471b
449500 2b97e9d073d0b8922e73a1b1d6fcb7f8dbcb0e22fea6a707d9faa2afa1cddf8f 4fb82487fd05bafd111f032ee92e9864534dc93a7d0cf994928703612d816f4d 1c5d2bcb3165e293bc70060db78a5cf299d42c4815896b65b5f54d742923f434
449500 2b97e9d073d0b8922e73a1b1d6fcb7f8dbcb0e22fea6a707d9faa2afa1cddf8f 52066346f6120422b739d9d1cfd8452a00c55505e0b2b9805351f7721cf253db 1c5d2bcb3165e293bc70060db78a5cf299d42c4815896b65b5f54d742923f434
450000 a6448ff3de412e8784a4d0590120e0727c3ef1c6e98af7adec4b687e10c22b40 b12232c014cf52f4f8d0fdb4037642bc1ce2a4d709ae37b91d908c9d36830fd2 d0a08ef423f57c6c0488096bc46df33cbf920226423f7930c27c813c9d34c71d
450500 32343305ccca111d5b0396816091f1f169314acfb4974629e7beb8680523cd47 36cc9b37d7962e434782de92543635fb826a4d84fb5260ca0161680523f54272 a2ada16c0fce347e1158c64a85eafc07d49f6fdf5c91d0b1c1d973c3655d4f75
451000 adcb05f8f053823db604b6278de320da2097890b386fe67c0104721e6cd76954 c63c045a3117df4fef3287be2f66c5691b700b18b42d3ba60509faf162dc9720 642495d66438cd4d827f29aab00729237d60adfa77f4fb3e74640b459b79868f
@ -948,7 +948,7 @@
473000 c2f76403fbff7b3601c0b2bc71cc00963cf0b012e09d6be5d8fcc12a8f78c8e6 be2ae59d51ecc553798bcd9c82f4e747dfd1782ad18021dadc24e4838c2b0666 0422e26c8a7eb63d5b18dda0c3efe7bc646e75332413430c532788704507625e
473500 5f6ff7d98fff43942ec210bff0555d74768aff3e5fd5ab6e0b546d0bfea79921 b828dfae2a89c1199e2cad79165f815f8d858620d87aefe17630048ec05f0bbe 5c85d46886845128e04460eaf50ade9e4c8f1c3ca6456e74f76061492407c9e1
474000 2c191256f2a1ea617517c81c3133a47d2fa264586885b2ca6a7b782f9c78a8bf 7d0b4169707e36667345fa68284bb9eb0dbbb726b9391ec0b3018c71a343ce0b e3f7ea82b53a82fe22c0b553fe30c4c5514f5a4df2bda23b6c315d894612822c
474500 50b6c4f4c1da30ee2043c4a18b0dfa1da9aa33000be4525bb07b2462d8cabd2f 9939b0eb461196a4ea22dc6c0e2d3c776cdf08673694e3d5a520bb644df71e9c 5a123ab254ec518a34af619ae78a6caf68f12ab08ea1cf8bca8f9ddcbd5bb862
474500 50b6c4f4c1da30ee2043c4a18b0dfa1da9aa33000be4525bb07b2462d8cabd2f 097a81a5771e9db71271cc6c0ce12a4053e89f2975e8523b6dde6556c170e5e8 5a123ab254ec518a34af619ae78a6caf68f12ab08ea1cf8bca8f9ddcbd5bb862
475000 2c38054fd7a02ffcac28fb8c53ad84b68d50ef30af030e597414e15b59bef269 6faee9c17b651d220534dc8c66c0345d162426661af23bd6be235d1c0eef73ab 68fd23bcab5583cc821cc1e2fdfbd4630eeb912e69d8d3ce68fe22c0d8d55881
475500 8d981411752ee6b44f12860a9975ef23df0c7dcb5b5c621368be19033de81de2 23fd87f81163c7f0580a7eaf5f74b7501a868508ba60f47836488f5b72716608 2efe456c536da42607c5d527fa75633d20e07ed10e8d747064e21e866f115e06
476000 27aaae6fc04f000f25a467ff5c2fcf62a6872b3ea96a3ca445e0947bc912d050 061c4b35170cf452518590f1e96624dbc031e5eec8b9de1acc81a477bbaa18a0 026f245193b14cd91226fb93bb05307b3f84c121c3b4cf979eb48a4899e2329b
@ -998,7 +998,7 @@
498000 0bc8b494b42efd68080fb3d3d83cc8156b56439c10fa789814d751d5c4f7d9dc ea1ad23e7f85ec30d138ecdf527a5ec5ac6d925eb888ab061b9ae24e48e60b2b a9ff67fe494fd28395d671744bb1d60b38ac89b53e4f66eadbc03c5d5dd31bef
498500 5440fcfb2e8888508c4fd6920d0e6c7c1f3f1095813d45b691edc3a2a475722a 4c2c9c60a2a43f9786004a9b43275656b60a70c9643d6c676ede104b9f0cec12 de98b78d64b182ef34488808079e358e30189df43bff459894d14b47382d85c3
499000 d84c475656720900a0b3765c4ed57ae1f0ba17238d34ac17b1635c6c95064750 236f102f6f2350128916d138401344233a7483a0dcb1eb39730c6a5fa22fed3a 88c61322be07f9b75d7a58001e4e7460dd34bb2a72214e949d28f184007d0c97
499500 8b9aabf8cb60c29c4b60a942812968ab80ec48cad4053de2624d42372a547756 540651876cd6a44a6de24fe75706bb959b3a701ef281c7b8a3ba083d6e329dfc 4d743db021924f24501d20e27564a7dc2276c5978e0000af4a97eeea092703b8
499500 8b9aabf8cb60c29c4b60a942812968ab80ec48cad4053de2624d42372a547756 4fdf0de2a22bbd66bcebdd844beeaa7d5caa353352275953936b6f7839497577 4d743db021924f24501d20e27564a7dc2276c5978e0000af4a97eeea092703b8
500000 bb94f21cd879e992217888fa56f0cb57bf585f8a41f845fbb46872fd7ddd4a40 541ce9a7c0f8771a84281db66fba7cc2dc43fa636a39a840fee5bdf987a3348f 254e33a659e25fb647aca414051e33f03899a896d032fcb7d307b90c9080d023
500500 d74c1f7510c4307c942906d4c66ce5fc542f2a1944659c1ad37a0eb82be11751 976e8ed703619833f8d78889bb8a3a71a06392e257b093a01f7a1b7036d22fb0 fb7d68808d45544296419dfd89b69540cdb6df0917827d982ebd72adb3042843
501000 3383f0c0456774cc529b5b0633a947e0708156bc873180f56fe3c32008c8bdac 69c86425b5c47c2bc3a9fe3669b0a80aeeb72bad8179676a55dae6445b7bdd36 22618e433ce9b9fa9bafacecf096c50bb49978a2fa883ea1dbcd2211075afee4
@ -1048,7 +1048,7 @@
523000 72d57e281db8b4a79f566fb587e448883bc1d1325c9ffc2931f1100b63e5836c 00fcd8bff8a5e19824f0e98fca489d02ca2d27fa2b4fd9a73e410d935a1b93d1 cde20a46475c12e517a4326e85632a956c9f5a2a3af22c84ac9ffbb0b088366b
523500 97b2d54ba68ed4a14ca1fb4e4b697b2bf8f7d0332272af4531a72c94c35dc932 04d4f8ef5ff03931eb5c0eac18894a9a7ac8ac7f6bc0b34b43420ae9d7802a1b 21b276e5d11eb1a8331df44a4cd05c46d1868c573f3f82c8f047f67d3858a7bc
524000 f5c96b25808ab9cbbcedecfe467e163e3bd9d771a8efbd3cc414c7adf1b7d380 c11e17455d687b0dbee864879ffb41fa6dfefffd54d339fff58dfa99790a78f9 b2bafd7f61e6485200c761f5ed481e768563fef25f82469c0c67ff1d1cb988d5
524500 cc5a17d877467df92ed0b3462d0031003c642f64896f4019da641d1572d693e9 7b878f323c00d5b6d0f73d89cff64319ff2299d310a67a2d046084a77b411101 8f9c19111567dae6467b3d76132c1f786e278a040099af2ff5354f81f7c1cb6e
524500 cc5a17d877467df92ed0b3462d0031003c642f64896f4019da641d1572d693e9 471a8ebde906603f5c054eed0da8b69aee53c35133712be35b22e5b4a8a3435c 8f9c19111567dae6467b3d76132c1f786e278a040099af2ff5354f81f7c1cb6e
525000 1b009804fbb8489d23d5512262d7536375873ef933c154a7058ec1c934f61892 d583cc3f0f7f01c67294d2e98d28e83c81824cee30d1252816a7828c0461f350 f1cced480702a35ee83501eac3168b6331c2a82ecf69f2387597d21eafb011d5
525500 63de360342a1abd256b2f4a3f1a74da8e5bfff409282c8d06cadfea596220f9e 124aca94373c78ba91a8f1c01d89d5bbeded60581199d3b12ac66b76c37c112f 35bb495f4aba29424e088ef8b4ebb7b4b10e69902ca07c65f83057078bfa8561
526000 25464aef8a123b8bc5dc4b9f6b83149c84511a88da41f7b5f6ddf4cbd340dd30 ca911108aa51b78a806e58f876767baaf341c9844f31da71959ed4ea2f87d62e 53ad3900a8a89b100539e325e86c7a7a515d77ed8d7bd0bea832a1196d8a2c0a
@ -1098,7 +1098,7 @@
548000 bf973366b8395a897b56bb1f9160f8144c40ba17934fb14b46d2bdbb32715fe5 a732ddef1fa97dee750cea03675a6eb9557af9ed6314a162f5ebd8ded9407698 d78fa85231b0fb69790e643c079cb7c34d1c114fbfa8c1d7712b01ff71805749
548500 c2f20ed6a252cc714238efd5531084bd5555ab8ec65169a86c9a0ba97b2a7eb5 d029d1bf6706c1b298d9f7ffdd53a26b17704433c42683bc02718ef33d2d70b7 a2464ef54773a2cd6dfdbf05187ea2b0e1723b3dc22e31e1480d414a4bd13943
549000 7e07ebf8ad3697390d81f7381637048377f461e46030c8eb1feb17eea4c9d3dd 1f2183d7618eabf7356a08a0486675b0163aafe13e6b27bb6179fdaa59685fce ecb2f323e8f843183dac9fda0ddb68aed54277bbc0e5de60b2ebd0ab37a0cc95
549500 7ce04ee7a21eaffbe862646c3a301460da80cecad0e9a66a157bc1d0c335a18c 989d7ef547727ed49f342ae3681e86247ee5b6ad009a863ba0dc517e7977790d 7745d4f12b75c63a7213bfed8d46bdb2d0ea5f75d9765aa47ce7a689a456be59
549500 7ce04ee7a21eaffbe862646c3a301460da80cecad0e9a66a157bc1d0c335a18c cc27c95b13f1ece38002d33c7f55f371076fc10dfe1b48754e3418a0222248c4 7745d4f12b75c63a7213bfed8d46bdb2d0ea5f75d9765aa47ce7a689a456be59
550000 0b717011e4c14ba25388b6be779ec7a7fa2939c68a49ad5fc8cccb32a3fc96e6 d95f6b2500300308ce3f44e53c38e6f0eda793b3e1d96f698cdfd8d70888e277 1446f3a94e8fcecd1819e47eda64932ab5f7cd161f4801b96d751bd11bd8edf9
550500 b1388fa70e3a79143b985bbe2587a8a36a3ce7f90dbdf93c312bf375b04204d4 2f81d9add40226b4b3d3f2466a2330e412de80bc31cf3242e0f8e8c1f45f1a88 2e0c55c354dbfa29d8ecc9611013fd969f5a843b8413aa79d4b5676d9a79b7a1
551000 b0f768d89c0f0e5929e41afa3e9711a2f6dd04c71519c718ec5a4851f13ae4e4 2b1fb05c01f17b3eb7268d552a99acd306e4dc0107985d6020dfaf4443dadd73 4ef4d4f9a0fe87fa3b1bc65c582fea5eb43b00e4253b97bd536eb342a3dd3457
@ -1148,7 +1148,7 @@
573000 2cc24da51032f6db15842996a46a0f01e17e7c1fa178d34f4d520e57a1dec5f5 814f5511a95d2112e9d6f5ff9147e4af6d2d14c674008901888a59d77adc0127 97cf19530e18aed12569602045be833d526fe06530a6358c515603de77834b91
573500 5a412746451823e5fe7cf63b331c59b6b1808d176c1f3562631755a1aec62267 a8a55f440729934a987fa7bcc21e4bed9ae4cb4fdda5bba05f328d33c1c93dca 5c9ee5926501ab49698c54a8eb543b5f212b2a65dbd6b3d71bcbd04e9798c411
574000 4e71a21262bee73564eed3938de4c2a673ae763450fcb183bab52fc3739e9307 f5fd0fbd347c9146a3356914145926887833b394f0664b2e5d098660848e8b5c cc86ade9b13e059ed4015a5481ef18d63069f67a52d67749e4abe1ea165d62c0
574500 bee3161612969794e4cc7811c35fb9fd844623da6a5b5f2dc38f32d50728ab90 ec00c96d649a6290cd6b929e1a71251e4519498493fa0ee2020ed494012693b3 baac4866328b40b281dba068cb2d3682cde33b52ef2101df94ce1883d61bdd9a
574500 bee3161612969794e4cc7811c35fb9fd844623da6a5b5f2dc38f32d50728ab90 d97f6edfca11c6cdd984f126252ed5c39587feac95f4d412a947fb327ee9f4b9 baac4866328b40b281dba068cb2d3682cde33b52ef2101df94ce1883d61bdd9a
575000 0560ddebf2a1fefe36dfcbf14c0b9e2101445b34e79b4d2d2f7c329c1dc5c97a 58a5850806bdc8a70223873c23aa3a5975634c989d8ef4f4f78fc0b71c025a59 2cf5c97d7e1dac4ea45e91316928d92e4b74440d2c059bdade7bb7c1cf1d45bf
575500 077c9db46dee33b8fed0edbe55dd09ced1c04eb22096d9a7f0a8238b764a9005 a527ce25eff18c724535306c76670e1a44b010183ad970d41e4168c7e47e8ef7 db44f4bd7201dd8e1b9deb53e77c7a93787e9a992ad6b9446a3eb12f28bebeb1
576000 f9762a0e8b01efc84c09bf94e0eec3168852cac22bf5e0e657957ffbeb857c08 41b866640d3804e09ffd386d7f6b0cfcc5e95c65991fa0b753c875676eec7c37 363b120084d9530ed7d17cce535866b196dc4d39aba6ba1cc875778afedad3ee
@ -1198,7 +1198,7 @@
598000 92b359d658152c31b8c2f32c4509f3ccb1cc18b4544745608da9a230327c109e 3f75a2b9ea70de0fdc330ebbc5f83301dd507c4e0fe536200402cdf30fd28a12 5788ceff503809b984ceaf32a496e51bba2374ba415e3f459590a1655cefffc1
598500 be474d552a4f17ec673478af48534ad3c65eef1752223ed3012534dcc4274db4 9c304d0d24348fa013c7223f1e05fc9092a773e6da14920e628baf05669a0f08 67e9375d6815cb71ebddc38da5965a779ecc8729333b33bef2c4646bc611a7d4
599000 275ca25666031af015670734cd4fa02ea0e0b099921240991498e684bc234940 83b44eaabc822a3d26f168dabcbb175357e1a37a025813fe30d5e6560418dc4a 3d2abb751cfd15a5cad35fcde5b52b4e82b32c11a567fa0860a25f83b69b5cdd
599500 f20a2a85028e0a3c65f118e50296794ae25821fb5dc0a59f415305d826a827cb 937a759ca109521f0ad2dd2bcabfbdcd08508b97d2928a81bfe79962c59f6e27 504abaa85e6013ad139e47771e947acf3c858fc49e0b99c5236d7f84723f3c6c
599500 f20a2a85028e0a3c65f118e50296794ae25821fb5dc0a59f415305d826a827cb 3dbc1d013d4559da355fea928c27fb17e921124893b7052f2aced8c8ef9c9085 504abaa85e6013ad139e47771e947acf3c858fc49e0b99c5236d7f84723f3c6c
600000 fde9cb0677887e2f966c3be87d1780db88353977fa2e426249d9b26b01be1db1 74fc8f58d336eaafad2f515f0b5a5eaa679c82160f2dc54f35fed44bb845c395 3972038fd2bc0007c3ca205a21ae11ecb66096006ab3cc9ac2350e2da7f1c506
600500 ed2fdfc9d3b07cd7e4d4fb46b5cde484b7ea5cbd436608698ba0be6407928d45 78eebaf2d54a3f5ef9c98b58e75325a263d7040a85d2757eaa6fcd9edefa8bfa ab51bcdc56ef14d0313de8553fb8ddb2b9f8d08f8e9fb42ee67b2365e2855cfc
601000 3a7b3e53a5c38bb7d0600352a71701c8c7b961a9936d319ec1f39eacbfa317ea ae8e3de2cdfe471244ac6698534f60a82a93e59b36ff22135ad57f5ffa9eddde 131208c6ee4f9db5dbcb53f6b21d9de4b1bd8a4ac785684e91ec23446ae01489
@ -1248,7 +1248,7 @@
623000 248e12a541844945c6b91e45f24d7f63db3dfb41016952e628c647bb82562c91 d2dcaa98eed5db5e34581c8bc52808819c5cf98bd564661252e24fb7f98218d4 2394ef40993563da36d854a0f5f06c0af1dce3ae7274d3a3d6655264d8e1da54
623500 0f6332963afce6ea94d654d103c3604c724a5a6bcdf6e32bdf9a708d10de519f 80f5b0685f010693bff7453273d0cbef3d878e9753b19e05a5d2fdb4984f8a0a e7705c345164e7069e9529e3e5d47c12222a3df70d0f1300e39f12cf6d361337
624000 3a250bcfa462ff8b750d0a725962879d47832f0c77b46dfcd27e3eb4bf352257 f75082779f75cba11e26f60eb9556caf48daa15221abc2b4a83a1cdfff9368f0 7cc8074a65f117e7942ce910dfd07339069627e317e1d4a31106ed5847b218b3
624500 6a0ceb40f1277b4289334b6cbd593aa5bf593160ea960b4887e40afd2b06d767 cb0565ee88160d6c0a26057155cdb2f9e2b94217d229cdb627fbe0aae9aed145 9802ef2c8e15d18bccf977c41463ad4cc0ff9af9dff0a1104194dd4ff18ab9c0
624500 6a0ceb40f1277b4289334b6cbd593aa5bf593160ea960b4887e40afd2b06d767 54386a3f312db13d8151cdb5ff628ac2e9e13d897287b553d581a6c74cdad388 9802ef2c8e15d18bccf977c41463ad4cc0ff9af9dff0a1104194dd4ff18ab9c0
625000 c28164fd18e1087787d2e3c7d67b8349aafcadfbf815fd7547fd7ae8da9e7937 319cabe08b33898fc3421e1cfe329711de03a92bdf21828a59594e813e71393f 894a1464c80bf83652ceab26af7dd40661b1f157f1a1f77be34cc57fe01f0505
625500 00c9e51e1237a00f30562f40f8d7696876a62523a7888f3019103f97d27c2afb cc7d1fd4e2d9a95e3a9a7e23f44a96f6840036265a29cac5b4a364ae1ee1b806 de6b94caf4e70ed1bbcd7722a4fa7e0cae7b2490f07a815eb2b4c9278e0b3600
626000 452cd22905dce67c27114fdc0b6ca64f4127abcbaff999b7aed68be214fc9313 c969541e23ade41ed8ab864eb6fba11ab9ba5c6f29374e666af4912c2c076de9 1c307caaa8f2730c6bd3c202a15e94a9004ab2b6f0ae24d58ed678afcdbaaf00
@ -1348,7 +1348,7 @@
673000 3109a32670b3c1a796f9c6cdf5f3744848e8ac3ef0ee2ea891fac0eb69223ae2 baa8971d22821acd1fee4649f702edc70cf1b072517f4b69d6bf4060cefa34cc fe51c93dc781185d8a9fc3efe07271096264f598616d69407d0d85ba17ec633d
673500 8064bdf0c36a535d5d7788f901ac0713b627e2f8b80c4b20d26cee0daf02ee6c 5548c9d616e98ed4fcccb300d3e35a78d66e61aa95c6465fc66a98c1e40405c2 b5aa467ee5592fa80eef3af90b239407d7e31fa4c6cef603ef50598548666cd1
674000 b409ec86b27b1a828acc7f056dcece326a7892314cc5b0d6682d21c06d4e4cc5 a25e0ee6404f9db371913c15348e3aa8a9ad4b3cd99cca3fbf1e8f95b6e152dd 5d62ac697208e75078a5f465f2feda182ad6a988ce953ff4909ecad0feb96e0d
674500 0c8142e02a8e0cc1667a81f4c4d08ab7577102481f73d31b9d8c67589874e970 0e31001e8d410c86f7a525b201f135bf6902048a0a4a25d3f283b2b1ca9e0b63 ae1ef0b9fa438940e44e4804ba785686e04250c675fd4bdb76b927156bfeb9ff
674500 0c8142e02a8e0cc1667a81f4c4d08ab7577102481f73d31b9d8c67589874e970 e615eda6aec462572a43acadcbde8bccd88e07fd0029bd953e04d7022dfeb355 ae1ef0b9fa438940e44e4804ba785686e04250c675fd4bdb76b927156bfeb9ff
675000 f200a64f03ed78fdfb3a35be9133cc144cb7621be76f0a470a6cc451d31de7d6 2dec2d8e6cbe5d122786b9c571751d54ba1d597e23dd4aa03ebc50212c68cf8b f841d17cfcbc629ee12bda00e988164571dd7a3b8f9c68951620a62f378050ab
675500 44927533602536ec6857a62ddd2e7ca31a05c733cd0699a078c5106620da51f3 989564e602ccbd682fcf993e4ca7691f049bb6adcb099860f9577a83cbe436bf 997061d34d9e259b99c7911924177d59e78f2c86d0a57743e5ca07c1f1495ad2
676000 1349301af96fd291f3f6cac4d6a6a94779a2015ee9d63989d79c813e7bf3ec81 c196991fb4a511513fcdd4300dad73d556daf8eaaea1411a5c4b0d0382e96d45 e332be471e67a22109327b11ee3002dd4d151fcc0ea5355d6189e3529bedba04
@ -1398,7 +1398,7 @@
698000 8a0878bcd828268633df687a5405b2b86051640a122f616231d8d6146d4c2ab2 27a9f143cdcb85bc01f31868f92a964337c451cd1a546f93c29361f245aff07c dacf575151c578d5b0f283296f31337bd7a1b976607fd492dfb0a88e0411b9ce
698500 afbb603de0da6476915e14cf182c6c785ec6514b17d9ba7bfa74e5a228f6d8e6 f730e6ed2ef1334071ce63f9ac851de557383c98b40a72f8bdfb29c49bb7d571 70863c81dcc8cc482907c82781ebee38697b9c01791ee71132212a49ee4cc875
699000 4e3bcab244d1ec2528890ed24340027a9add680ccac038c42e9a5b4880368a57 1b7062e806e70df560b7dd19713440125dbf814412ff713c5bafc8776c443a60 7caf82dc9c49db7c7baf08b8863b2577aeb18da4679d6a26ebfb620b94b32fe1
699500 69c03ffa655f439caaa38a36031f45c27f6afa345fd8d380064ac4106a47b9d6 0522b34e7ce87f078124a74b1f26e25c44cda27ab10ca9884d777a91cff19df9 770d8310ba9272994252c5df67d39d32018ed69a29cd7cf734a9e8458412f476
699500 69c03ffa655f439caaa38a36031f45c27f6afa345fd8d380064ac4106a47b9d6 9835287f527b8d7075cb42cd361e6048b9defe40cd855bf186641ac16a40cfa2 770d8310ba9272994252c5df67d39d32018ed69a29cd7cf734a9e8458412f476
700000 19c87f86c5d859f1d4ba642097f626a5c6cc8420f1b438ef0ddfc52d77b5a7ce e7cef1ed642d40f49563c66d9428c699a66241a86d05aba5cb6fc6d6218317a6 0c8c3f94794122eb5e615582ac97d2bec3b09ea1c5262861c7d7c4db6734d2a6
700500 c22be0aa764d1e0d90432e726ecb95a769d691a7de81ea480c1bb9e74f43bd8b b0c38cfcda8312393e4906e1068c7a323defc33624e99c8c8f918771010a417f 422cc5c68ef275f1f6d93266cce5c9fde6c342e1ca44a94f39c3555ed4059759
701000 b2505b0ce33e22fc06044bc95bcf1bcea363d91c541451ba7ebbb07079c9b8e6 36066185fdc8a919096d36245786b921b24ea4b9ad0949d3685c7d54fd3faeed b8821bed4a54d18bfa8803cbc988a6328ffe601f98282b71ae2ae265c57de22d
@ -1448,7 +1448,7 @@
723000 6fafd8c865b3d0bb05f18cac70fb93007cff223789fb46958b55a205ffbbc959 cdc9d13b0b9a5fa827d2572e9c3232f498e8b06ed8627199c61db9525469fcdf 2bf56e3e72f5c449653b64c5568cf6dec1602888a9e77631b68b814e5268d29d
723500 6ed55084a271a39809b6f3455a08d082fb7c56ad97427307ec207135c7c16ef3 cd4a3d7e1dc9e293cecbcf14b969480c0c2f277819e9eb2286d1761df7320694 a0ce856d8b19fa250998213ddce8e945e25238617d9632b1345fc257bbbfcf4b
724000 c1b649d3101d61bfe8b949f443e1035a3d5944310f83e94785592c4cc91552c7 452655726058f019fcf400a89e464688ba4bd0fcf267493e54748b146c7dbe1a c21245ea304822f3c688f672f6068b2c67de6c3f2658a9e9cf7a509cc190c489
724500 21f5f4bc2fbfbfff183a3eaa110c1e3f826eae2f58d32242919026a8d1ea6206 27b9e765e888343c7180fa9b5066ea254d8b5765b2d7e4a51ec62a8ecf02c6ea c681b8a5fc3f74d6349426ef2f01340c85c28bb4fc8857fb74d284e6b3bcdd75
724500 21f5f4bc2fbfbfff183a3eaa110c1e3f826eae2f58d32242919026a8d1ea6206 d15908ddef7626667600c5eedca9119d82e0da5f4cf56bf6616edce895b38d9f c681b8a5fc3f74d6349426ef2f01340c85c28bb4fc8857fb74d284e6b3bcdd75
725000 5db006a94bfe731764372f332c2b23f9863f7741c0aacc4d92769f353cb4a4d3 db57165deffffe98c3cfe7b95e119d0253a6e984d11fc2b1894ba4bb3010301b 93b86dfe0990138a22c323a851c26bdbc1ae9d2c71b7db6468afbe0052c96799
725500 f313538888a7b2cbf72adfff7c6aac1583c44b477c27810920835e1f36104ec8 c811a4d09b2afb0e9e70bc9416e58aa2c3dfa4955ec4ecf03b3db9b65450e858 2a5cb9561d2f20edc69cc6010ad5ca11a07d77403c5f090e404bb65a879d3e29
726000 f9f289b08641492431e4ff87acb944092bb1fd4ae405569e0f3f14e433aecc79 5c10e47957ac47afc2bd4fc6daa0c7e30f127f0ebdeb1b52149756d9f996eb76 770901cce9162461c95f8f5506586075d2e0b19b82f94eb83bebeb8733146728
@ -1498,7 +1498,7 @@
748000 55f61b3e6a5434428b1a062ee86523b68f5459e7615c29d83f01eee310ec66bb 4927588d5f0600d0a418298312581aab6d41144ee3bb87a6875d7b11c676704d 92182c1111a64f08ba98870b439de9f81627d117715b3ea650bfb5fea98feaa4
748500 cc910d9ef1a087c0c9aadfb77da9051aed5124b7d072b976f4d34dc74f842f14 f1b10cb29bf15f5280b2506a480c07a610de4dd63212ac5fb1a33894c2fc0353 d5d083bee08926e2bc17c9aeec940906bdf6b0f37ea7d6c2c23b2d4d881185be
749000 70c48f09a23f35a244e22e7d43f245a20d1d171bd3958ffe261363536f92a087 5cf7c04ef74572576b5debed4c20f3446db017a0360142b325a330909c904b09 e24e68210d96e24cc04563ac6fee29b4991f3b13fa04d3b31f83506a03fb2a68
749500 33d54681aff8149655455f3331792f7a4582c0f0a436b9d3ec0fced7a525ecb6 95e2c8c804a409d62130abace845c696125f8a938bcebe60a45d9c76442fa6c3 9c16bb3f870ee8e50900d7310541f629e4e087ee581467f3dac27c7601a9a881
749500 33d54681aff8149655455f3331792f7a4582c0f0a436b9d3ec0fced7a525ecb6 382f51b24f05dcc78ee7b0e02e1389d1247a30489fbc317e6588238d78cbe478 9c16bb3f870ee8e50900d7310541f629e4e087ee581467f3dac27c7601a9a881
750000 8e0b562cbf9f5d9e0539f9964745265261cce019e73e22cd0db86f0dc7049110 03a1b08260d16527973210066d867267be1f3d4692f3bc680afadd2b1653f995 4c77b7a73824f489244a9a1ba383b413f23b932a2b7cbdfabe707ab95c66f5fa
750500 a85d11029aa82c4dfcad63d3e6e32c4525f9d192fe8ed223ab9f05a3fc4a5d11 1e1aaa3b0c05e04b991026c5a9b6a56228b007a6f936902f7a80f1b8f48eacf7 79078573a0874c4d42ed9497435e6a5e9fb2a6ceafce103a28a3f4b0f9753dd9
751000 bc48dc5090db1a9a8016b89fcef45999f9d6c87c8982dc4ed52e4b583ac2f7bf 94ffd27371d8ad63511d87f728731b0513ca8d8b948d8b777d852ea9aab4804e f0b84e3b614d9701a514808bb116eee3547821b42e0d2f6d6a3d2ed2863d951a
@ -1548,7 +1548,7 @@
773000 53c1e8e472ee4d6bad6411fdc74d9fe4fe2564d0baf1bc5107b9dc4ec6262afe 8d48f77bfb9b49f20dfdb2168f0abb988b8ddcd8e9e62ac35ab0a2968b912986 e2aec43709ca010a47522638f0624907813138e1e1b380f7bbe6f180e628fd60
773500 2836b1c2239c528ef1ca59823417c6ae51c93040e1a5e3ca11742dd10350d3e6 16f14274772f96d6d2072a33cafd5c8f9cf4bbe37111b3f620e04bfc42392829 0a71b92e9860fad2bd7f294d271466c0e66a73c057d4b8ad4fb7e0da53894584
774000 69a397d817d7155b644d650da51d5413ed2c133a3cbe2b54bbab7ae7e5a82914 c50ff677b8441b9a940984cf5ddb46f4b690ffbc9703ced2b163d89b929830b4 f8a641d436f1f789a2f605267b1acccb8e851946b22731e19a4aea620672b3c9
774500 e7569a38cfb85227d2d2189a89c59518b64da01e2fdc89bca8e4759269fad47d b72f3010914018a60019f151631c660311b949fb400e20696b900603404cb82a 131c227374a68de26401bd9fb82fdcd47bb947602a40990c87ad1830d5c95b10
774500 e7569a38cfb85227d2d2189a89c59518b64da01e2fdc89bca8e4759269fad47d 3bc601776ed5afb50fc51058a988d114287afa8fc4ce04c8d09215ad8ee3e9a4 131c227374a68de26401bd9fb82fdcd47bb947602a40990c87ad1830d5c95b10
775000 d62bff072790320b532267e13d16eaa2b6124b12e9dc9704ea8b3472c33a7584 2ccb3c701d5d6730cb7fea0a703c1228f75c58b95dd167e135689d020e686cdc 4434ccfb2b3ee14daec33d99f0e1a4f1e48f35ac1bc270a796db881fe872258c
775500 69206115fd6be6c73b95c85875329472d8550ea98bbcdad27b1fff5f13f1a383 1044c0b51ee23082e8268ea9f57e614ead985939009b2d6595f866bfd407c543 36c58dd2f153bb315fb5ac171b2d7ea231c405a995705a9aa5448887e72c46d7
776000 acae9ada07a40fbcd1abe244a88eea4497d892f56bc6c47c9a3256960c48a674 fa6f6390e5912cac9e116a1dc8ce23ea3acd3a45ab8c372f265c2a813a1d43c6 766450d063de6aab1e43fa81768c6d063e83fa9f1e3109eda9cf6dba976cf44f
@ -1598,7 +1598,7 @@
798000 f3370335ede3598caea04a87041fa7c1b51e5c9e1c5e0d50bf2bb136a64cd167 e6e1d946fc72e48f0399f980e5a4f7e544b4eb2997739223c355e3b15af48fed 647618c6d3effcc52dafc6a6705ad58695436d48ef25aaf8d684220757bca52a
798500 8f2f93e0248a8d8ded2c5106fe5034916127161f1a554e2ce307c5b6afc3e00c 2db41c24fb6ddfebf0b3bb5d74fbc1cbff4185082e7c22ef66c336467c652180 ecfa971d637bc6ee3e0f461ddcc77ac59a408c30dfd2ef3dae3d43e16c15e5bf
799000 5c376ff3e907391741b0ce9601a65e616d6183cff6bf744bdd6597c455b306eb 9b86110172b3879f17995b766972b505bf547f40e1113cdb52533357eecc4ef7 52173724bc690d27ecf672136ad648668707cbe81735bd2a77202a7c765ef32b
799500 bd143703c66bf324a5cbf67f9da778755b4f7a598450c328fbb011d1eba4d96c 83480b97e6c3221fe90a83591ec104492b37896fa34943c4f71265cdeb5659ba 07f30ede5076d4d94c9e1e8e46bc5402d1fae50effbdd0a50fe82d31e2e5bf5f
799500 bd143703c66bf324a5cbf67f9da778755b4f7a598450c328fbb011d1eba4d96c a4c63a77ffa25dcbb59ef8e829106f61ad3875ad2b9485ee6653a83691bc9ef2 07f30ede5076d4d94c9e1e8e46bc5402d1fae50effbdd0a50fe82d31e2e5bf5f
800000 e951054363c21bdb8e2c65154dc8453a7ed6908ecb10ed72fab814899d3cd345 9a0b2888559918507acbb704a78888f3293e34ec18cbc9961ac7842ca297984c 8252634f061e18d4e82e3f91d044ded94e90d223a7de0a13b6e772c5c75eb612
800500 956b9c5b3c055d3ff4ca81de618186166629076e317b2bc429faab8ed5a9bea2 9a80628c0558276ab328fbbff05e76501ccc20593000dc13d57eb3ac4b618838 f65f6f7cfec65d2c895982d1ecbe70336c1f8405783317db7207dccb3a5b0c66
801000 3abcc1a5f4b6411fad8b518e4e0266bebf4d74ec36400e0b242e299aab5d8d43 6e72ab4aef323f82c48dcd697cff16bb1f0ecb039a1a892a74c57abaed498d92 21dc9821cf54c46293bd6e575907a6e5ec525713f4328952b95cb5d9792d7131
@ -1648,7 +1648,7 @@
823000 6631367fed6a7ca98d2ca58e0ccb8060e9e0309df1bbb5d76ea337c386f3066d 4ef109d1b5fc3ec978f34d66b8d93cd3ba0b278d7ba9c6ddf4fc3d56039e0fec 88fe2323f91fc57da58b494933952f12aa11b292953077ee9664b6aa32d7c3f0
823500 b924862a40ef19454769b776643bafafdf407500c16dd73a70a61ff7d033519c dc8d2c04b3dc1785a7a76698674830e8aa8371dcb815083d849851ecb47f1805 7232bae203573f6c6689058ddb2b4d2b06ac19ddba5caed5a07b08c3912d6ad8
824000 d9ff8b7426f57da2db3d9f855572b493eba90e61b0ff3b40beec0b46578679cb 95e502ccf5b34258f239d7a5aa86f16c643e189873979210e0cee9c5acda128d cd794aad8626da79dea81ee006ca4c52b94aee1f55ef2912cb2f4807c75a091d
824500 b668014cbc4e38dbe8870d15c7ece604e8a698dead63136af5954cc403a13921 d79c1357567cc361a4629f57d3bb01e99929680f5597fb20e976ed9da246d732 b3a4d6a91d00cd7ecb1890525ca19214242805f0ddd04555b4899008c735337d
824500 b668014cbc4e38dbe8870d15c7ece604e8a698dead63136af5954cc403a13921 b634009a41de61587a78dc3ab8aeea26b6d107f5e59df2e927321f31c2751347 b3a4d6a91d00cd7ecb1890525ca19214242805f0ddd04555b4899008c735337d
825000 ab26157df7834e458aacbb394f8f6f34fd489cce3c7a1e6251289401acc59062 73352b8b59b8fdbe1d83e82c2da9ed6282c5788802e2eaf3db7e7647e04d83c6 219be8d78268674671c9953aff79dc2f3bfac601cd535dc6839ea7dd550b194a
825500 4447fc4bfa77499510c1f033998de510174732f103eccea27ffe544577472f5b f15ba38703c021fa9419af02b8210ad9a9658b8866f70cfd734e282daf996169 9d3ea35ecad6a8d38b11e387681a7b6f3ec972492c9914e5a75093bc32288bcf
826000 8b30104ee7551d9d564a9142e2334aade0c93f1fe7846f2d2d21380096a5a1c0 dafdfa617b0bb3f7980b4df7dd4d0159144b7973976db5e60a28308c0e9a2216 ada7a2c9ec028cbe84830bbbd0e4b0d4b503bd78b0567dc69a6e74e91ce59ac4
@ -1698,7 +1698,7 @@
848000 c6e8ae1f92209bde14bb652bc8478d5592d0f6741c3d2f2f232c037494d81f70 b7c0aedb71b645f0501319a9842e1fac4873184f50a0c5b758fd9f2cc2547a1e 69295041487a60c8f00f631c3e56114c9b348f5dc7ee790fc819631e55fffa0d
848500 d302c73e4d2ce3e318afb5cc773b089956501f00f64de08073bde92b2f3a99f3 0a8901df9a3d00b66ed1bd0b117645237b61fd34c63fc45a0604daf2ac932bea 4b93992d98ad1fd9b9557cdc1568803133e96fb9dd51878d5e6958a170a02867
849000 0ad8844c1a45d6846464c00e9c6853719f80056b6f0fb70821536a133432ba1b 6478dd9c136dd28bbc4a49eacb7909c179abfef94618dc6da67adb4ffe69c6dd bc7dcc71f8572ab902c0c42773f396d327657951178a1e3376556a12c8be2391
849500 8ddd724ab7ab24e5ce2f5355c2c4bea780fe7a2b4a01fd04d6a0be5bbcf6059f 54da6435a5de096881e00dc1907cb0b66274ab5b976fe6b67ccdb70761fdfd44 f71d51e6094c79459ca8b568389c91d23560f0daf00a023a460315511c97b09a
849500 8ddd724ab7ab24e5ce2f5355c2c4bea780fe7a2b4a01fd04d6a0be5bbcf6059f a8ac1fba940445cb8dc5f6eec18d1546f36bc441db187b088b1054ce8236d17b f71d51e6094c79459ca8b568389c91d23560f0daf00a023a460315511c97b09a
850000 b5e0c35c2d33ac37932b6d187a8839f1bf846817dbf5f4c58b73418e9a93941e e9f2c9230ca20ec14c17a35fa24d9eecf9119c5a38809c420ef099d9cd4ac61c 58c376de138829f5c2cdc42a78ed1936686cbb0cebcaa4f0c2ae8bf8d9e6f4fc
850500 7c1ea7bb106ee4a55d64930589f44b2e9fe63ab9846eb3caa545fd3b5597ac0b 9b2b304003bc1746f27de0d9a7cadc9dca7d6c87b6cd5c88da09f45282298480 4adb35a77d7e23f431c34032f15421dc3a75e86bb025ff7a470eeacc0feeaaa3
851000 78c3131d573b6a70a648b111fa904b99707c622bc56f842297953968e50bb804 9dcd68f3d2c985c324ae53f03582ffce484a70724e2c13602f84099737641cd8 b7e3f52bca1ede78075f9934b0bc416ab5b99ebc2dc32ce3007f9857131a1bdc
@ -1748,7 +1748,7 @@
873000 34692e36b62fdc785dd9468d43a0a637aae66ea75c592d5c92e3b79245efe449 e97152bec752a6cda91c4153cf191e6a04135a2d824a6ef8ce6d64f640a97fab 0ca6b7dff238551d4fb8495eb9cc85c22be5098f65245cf2da2ddfd4d4731eff
873500 af2ef369df933f912140c7a4ba01d3e33ae803b7b2f4939f8a98405fa4127b90 3e30270cf39cf279ffcf99ad4b0cd55c85872bbf82654d03f6a9a40867ceaead ac2375ca321b3bf357d1bfcdb51faf0664c89660abb3bdfe5e63eef55c14202a
874000 7f1cd90d997b5a1da4daac3691082770bc7bad48acca998746980f0b57ccf21c d7cba24bf85848378fbc0f655a1795b9baea22b97a29b3bb1b74fcbdc25baec1 2e4b750cd6433607f340cb88227e3d9dea81ad791931f096c1f57a9ba4199adc
874500 c15fe484c8c031d1327d24f1b563bae0c6ceb1f81b8c0b37c1a3a6d3ea9c12a4 77f11329dff67de4d40f655a73c71a76e4637b274af5ecadd6f8f2ce7e265d7d 246acefff1f0368ed146b59c7ae6e3c74ff4e2c0e99c996942fa9b109f5ca498
874500 c15fe484c8c031d1327d24f1b563bae0c6ceb1f81b8c0b37c1a3a6d3ea9c12a4 532b3b617b128a1da69a7390fa37d292771bfbe039436bc7f34cc60d51ba1289 246acefff1f0368ed146b59c7ae6e3c74ff4e2c0e99c996942fa9b109f5ca498
875000 6d606825c8c4902999704cd9839f60f072743c33ef3cc8fe5b075e15ad6f521d 0f98e7eb858a741ea9b7f9260142cd07d98f3ef2fd0f5897f0dd1196506f28af b1c7dd3bc7112815fd1d6f4c8762dbcab3e87cab642dda4c9447a037d7fadc53
875500 8102b25248d5cc9fc5e8780fa7782a5f37113d5797ec544bcb6164d922d91ddc 5331a1c3f2f1e95e9acc0acb83ef4cbe04785dc7a319ce069d252cccaaa748b8 55555d9c896142ea08db6eb683d05328b1d060bbcb4dc5aec81965a740737360
876000 2a6d640eb47cbc93033640e4eece162640b36cf256a1cafb406e2c22f0c10fb0 34f34e19ede327aa5be14240436f18ead4abe6f226c1571429937380247402d4 ff5805c276bef1199b7adfdc679d716f30cc2aa8dd02c51a9c914f28424d4e1f
@ -1798,7 +1798,7 @@
898000 e303ff088305156ddd6d2b5d0c239e459d5175585902840d3f6713a40b2490f0 4504065e186d009dd784aee6d957fbe295c8eb1c3bca23d860a92c6be32a9e16 0d624b8f5443456d6afa38e9d8f65b44e63bdde4857b2dd7d86a79657350ce62
898500 4400aba3a75afc73ab3f6f8328a179905fbae533dc9a75a67e8533dc34da8281 f78290551a6f5db3989f2c6f6087b5746c0419604cca77a8bcd63268455aff2a 493c6c9538fdd84f4a7ccdec7da1656bf3397863b566af0d053cdea28ddf4429
899000 30d2245ee16163dcab5b9b71fd37c6e0a1a5a3924f621dc4bf2213702878da82 83f95bf132b64bfdc4bd75ca04fd972d5caff941d36a7792f55f478fe140972a 828367c69dcbc2bc8db30bd6a79fed31d5b0f465c1597faa85b9fd0299a7253b
899500 f35505a5677e09578cbfc9c7900bc40b1add13a8df9f70781a95b00ff972add6 a71b0bb9f424c20a026bd94aad9922dbde345382c0751bb892ac7cc9cf0b9722 d6831c7b98fe9fe24be7e4e5e01e511c9eaea623a3c9378acc6f424f4675ed31
899500 f35505a5677e09578cbfc9c7900bc40b1add13a8df9f70781a95b00ff972add6 c2e16965e43b94444853f16cb48de52c406448aa65a2ccbad61163a18f2529f0 d6831c7b98fe9fe24be7e4e5e01e511c9eaea623a3c9378acc6f424f4675ed31
900000 e37b70b214a685698666a18c3de3362baf0bd158b6f972e77bd306e62e7e4bea 7a6f099828ed54a20b3b9565c1548ce0fcfa4de8c6131ed4caaa629d96e17864 5a5155ad28208bc00f7e8cc3e48057f389d7e52db71d4e98ed747b4a58838f81
900500 a2473a95b679ead1011918bbc526ef833ee8b03a5aa3f3e11198e30d11d2efae 9736c820b1d63362019d39a77218d604205e38ec79a117c117ad12d1dd1f0075 eeffa6fee4c89d0b7bf4aa5816c8f2d5c4bae46c937fa58f1815c732aac2de4e
901000 dda19f6a2f7a7da12753b2d7c334e3df7cfaf74a44ba8304b3c5f5e05882afc7 bc0f02a893b0609aa80e08392cffd1ad14ee3b625837d16be6869b5e405139c2 4c98b101813e05bc7c83bed737947884c949e7b299a03b9416e93491b2b988ca
@ -1848,7 +1848,7 @@
923000 438bd2d6867e38f68f61f9dc64952993f7492e39771516520eedd7d5d9d4054f 40b95ef95e78ae4c9e99865bd4e7a4f7d106c8d2aba90f54aed550f14aa9ce17 ca62e3ac3b194977d03c66b015c7975457db5f6c849f7b999dca95161d06064e
923500 6c205a2902c4c350df7de4e96c6815eda103645b9181fd9e8bbd6e53b5ed843f 9d8c87504c9db8490188c7d8fb0e6aa1950a03a80cd2bd0f8baf0297a73ceb27 c3cdf41378c92bd85ca01c42ff115906b51ace69f122d3b1b6b4a5f922d92098
924000 821de00a7dd17becc9dc0ff750b9e74237ec391e9e2effbabb71d33fe96e574b c87cec5b256635170e6428e3040000d705decb654b84a7ac9d1566211e18dd36 81890bcab453994fcd82bbe934219d642b127460aff6fd52a37c957bae1f0ca4
924500 fc66fbb75f4f01611cc4bc86249e329e5f217ec40e0f64f332ef508f4d524fa4 13e45c01e9098567eead7d1e2840a44cde36926ba83c270e6bb854ff079fe864 af0db78afb9fd983d191c7482aef99fd8fc3f83ddc7bf969250a88db0cfe3e8b
924500 fc66fbb75f4f01611cc4bc86249e329e5f217ec40e0f64f332ef508f4d524fa4 1a9d440004523707f292fd87bf077df59c59e3d39e7f799604765343197f722b af0db78afb9fd983d191c7482aef99fd8fc3f83ddc7bf969250a88db0cfe3e8b
925000 b290fffcf3f8eb763704f79a4a6e5fd76a853a3cd013efe2e41fafb9177d223a 3d9b89cc34b988fb0d1df0135f59df3495da0221277ed3abefed3558408ee132 ba6e53516126dd7d723c11edf28c7f60eea4c250f4d9183b09cdcb74df0496d5
925500 3a1fb804b8f62e4c394b4fb34b250986d195b4a066238eec560443219bb06a25 3024ae8c2825c85dfe675f2b66b4576a6ebb934166dda6a12016fa8f79f12a63 4d687963ecedcad164e63649974289bbf8f463acd84b790b1aa611ce7fbfe681
926000 819094082ab3ba4c3a715880ca1de8c9b7036d68224202838a077d1c48a0fa33 afb6ae704efec0cb30127cdc4c608245d88b3bd39e3f09b30273420046051679 471b7d7e14436515e046998af8ac65f3e9ed8339f31e292c2c1f793eee400ae3
@ -1898,7 +1898,7 @@
948000 de7bbfc82a59fa0c6691020204c4916b9b102f66536e061a3585824472bbf2ac 2de0049ec5f874e752ed146e2c7edf63f6095e53a8a349ed06c052a341d87e1c e9f976098892480b5662a211469875d3957bc09297ca5445ec32118373d80d62
948500 ac2e0e3c131538ed118a3123795a2fe51803a11c3b4b08a7e47981884b2f62cf f870ed2d50bf25f95cee956ed54551f4b3e92d54abeecc3f0aa5cc15c5b10a80 9dc10ba06c9e3657acda84f512e71e2623e92153f355fc85f292efbd7fd27293
949000 e1e69e1b1b21e4f0a18b04ac9cfd9f8285db96ff6f4e9ba2ea5a454d7b4a51cf f08f455608a96421e2c42c6fb44348331ded8f44536def80ddc2aaea53f811be e9fc9f8f87793b08608e8537c9e2ff487a6a0371c40f601076866cafe3819747
949500 5be555320df6b2e99d8f77952bb45df07ca3f9f1bffe4a4800a156af93d0c629 5801c09b3c3ddd4fecdc69bafd4b6ed5599f5b4c3d480b6cf9e319be1aebcad1 77b78279551add5e0960ac20f6beca37c1a18a3f4d8bb4afa3ee783d5e05d95a
949500 5be555320df6b2e99d8f77952bb45df07ca3f9f1bffe4a4800a156af93d0c629 989e6b9308da79b0b768c6216474a6d1700eb89a59771bec804e8caa61089dac 77b78279551add5e0960ac20f6beca37c1a18a3f4d8bb4afa3ee783d5e05d95a
950000 e227fbd4fabcb18eb1e600e30654fe09de863f77f81c7634c2815bdf909992a2 5c5fdf4e2450ff02361822c4702cbecdd0cef3c818ec819a8ada6c7791516396 2900534be4fa7b504bf8f6a1047adeced6250f63dd441cef1e1d684511f104ac
950500 9c0dd1fb0034c4a92f5b77bcc7e5818dcccee55af147ec6edccd499465ed8502 94d3663c2526c1645a1e7430614a665a7f35183275b7167c5893d6b1fac7b530 8ffc20f33c23109237f1f1fbafaa719c87402f09f90ad22c73cdf18ce0fa5cd1
951000 2e932c87fedb78048a70c47b4f33425ac91e5edf91ee12421a4dc6675c50b084 2b9e81d117f74eb48f91f5ef0c75c345f0d1f8685b2caccdd0e739f8a4d54d04 aaec22e07e78f82d3fd5336adfb33c5cf83ddc95df01a0ffe6624bc222724d80
@ -1948,7 +1948,7 @@
973000 55ddd462f4830ae58cef001b80805828381fa6f01763551fe3bf41c47bd06e33 48e54fb3fa548f31b6b8012129886ad14d438d0e6af6a05a82230ef00d80905d 5f353708dea02d4fe10525399c823d4a027a07834457e02f86b31404ce12bc09
973500 0a3ae4c2d5937527041e62d202f1f3eeb575062e464a3566f6e3d4e9811236ba 5fdd512a86c7668309807bdb7146dcaefa13813bfe05f812935dbba0c7c04d62 1c086557709d579b3773cfa821406e79327a0140967713b73241bff2a2a28d08
974000 55e80cbd096b8eb1df3fc9fdc1a4db0685f135deef48c22236a3be1df8d075af 69b5c8b41f2e5b28a329e3cb10293ba29312c252fd97e2a6e9257b2cc225354d dda002ddf0995fd3a122f864c5c55971d5590d465f019685337502e34540dabb
974500 57983b1af96d8dca16423e30c6feb4451abb992c59eb7daac3aec47f0c10404d fab5f619f442fac58344026a8e3bffca1b547084e5aea670cd678ccf1e4f7be8 a3859c46496083689d30027b40cac019d0daaf008145d6f168139dc7fc696bdd
974500 57983b1af96d8dca16423e30c6feb4451abb992c59eb7daac3aec47f0c10404d 67c8b4a9a90a48fbf8bd43f41d290fb38c4318f00d177b76472d176fa4960836 a3859c46496083689d30027b40cac019d0daaf008145d6f168139dc7fc696bdd
975000 789decbf3352b728ca2513866842487ccc080040c301c20e219a6169af17f8ad 8cd8670e216d098ef817bc6f4ac83b0de623fabe5b0bdba2bd588c28b40b7b04 bbb05c69cd49f0bcf5a87329c75f69efb90a91b5dc0ed931fa22d9b41992d3c0
975500 e4955374301cd615e606fa045946f8e1b09dd05be8d4cb90ea334e1f0bb9b0bc 73bfca0d4522e57aad1864c6659e0906da259865cac1fadc2d4c8aed47f23a12 ae8b93c18324c8f49fa73de8bb19e75ea2c04eab0e8cbd71d591ededc819b2da
976000 911ee9db7be3ef0f0932647a9ce131e21d7eef9ac7c3a40fb9da8f3d328a3313 a2d82537257e03c3256edd144045b2767b844046c07dcb75122d4100830f7800 b118c6acb7d2f8a04d82083a9f25d3f87e468a7d1d363a374bf652a3db866520
@ -2062,10 +2062,10 @@
1030000 60c0681496f782c6d175671a609d285350517adcf1351b13c5993690101b211c 98d79fedf73559704a2bc76c089dac5604ca5de734220992148b7419f8cf48b6 d97446ac79f5b498bc81d03d6563b6696b0f5a4db11b3f8bf4d53e625ef228b5
1030500 c7290f8c90153a075f2957e7479522dc8b16b70427da55f51e6aeba41c86dbc6 82ac3d69040e6be1098fb05b4a50f88979b2518135024c0a129eeaa33e2a3024 8c8ecf230f23fe7364f9dbfea6dceb042a65d4d2b000e1f5ab6f84fdc01a2553
1031000 10d5f1e3d7ebe4c1e0ac25c126939110ac48a9b03d8d48a299fa356f802cf5c2 2e2aebc460ba1bd99198559c4e3ad33b126b0e19a4dfb42c5eb35b6ecaa63737 6245b05af1438876861c8e1775f8e135a021ae14adc7ee5d3c4ec8b30cebfd29
1031500 36faab3bdc61f3100234c00b4b537295768c2d23815813d169ae2df6b4c0c769 2f70b464e2c6a88cc966d392c0324e4dbfc50ed6a85f02f09cf14c2485f2f84e b189fb3e4cb7e86cd172866294cfbc4cb759bb8f350b8835a53ed7ebd419e6f6
1032000 017ec62875e8d55eef392f0ef3b1807a184c872643ac98bd38ee650618b77b25 0a3b5e3fccb43dba43fb467f8d0d07f8921629fb0976b929ca4da686983a2deb ab1e4677a28c6dd28026ec874949eb480dac7ae6bd6d9174974cb125d430a669
1032500 99ff5e99a1b61800e956c385dc96e653e42d4a04a4793ad7ac502b518d5213ef e3eebf3aeb13c3f16888f9203037f931efcc0441dbc8ad833d275461417e0b5f e8356d391e5214499afeee845cc93f2b797280a8c0f398fea831edf5c4055149
1033000 a92f1f7987e1e91d78a8c107fdf9ee32a1e5d6c05c95ec946c3e80c645e9c3ee 528ca55f0fed1a23181382a79cd0018929612f84cbe0aa4954d28466c548f655 7b58191d1e838bb06560bbf57f883a5dbbb0a82da83c2d80a2f77cfd30cea5a0
1031500 36faab3bdc61f3100234c00b4b537295768c2d23815813d169ae2df6b4c0c769 91a7fd1868b39ef068572d0fc34cb88d1ace1f7ee9056c0feaaf39eb95b33335 b189fb3e4cb7e86cd172866294cfbc4cb759bb8f350b8835a53ed7ebd419e6f6
1032000 017ec62875e8d55eef392f0ef3b1807a184c872643ac98bd38ee650618b77b25 c6d29b289e5a207d5cf5005bbcf92b0a178061d632fcb55446c5df96b4a56745 ab1e4677a28c6dd28026ec874949eb480dac7ae6bd6d9174974cb125d430a669
1032500 99ff5e99a1b61800e956c385dc96e653e42d4a04a4793ad7ac502b518d5213ef e25e7ec45958f315088b8d91d968f31aa8ad1a4516c8d10022d148973ee4c13a e8356d391e5214499afeee845cc93f2b797280a8c0f398fea831edf5c4055149
1033000 a92f1f7987e1e91d78a8c107fdf9ee32a1e5d6c05c95ec946c3e80c645e9c3ee 010c949ffaa7017730cd93d692c33e4f3cdc5f118dab1e526648e7fb2db3f2dc 7b58191d1e838bb06560bbf57f883a5dbbb0a82da83c2d80a2f77cfd30cea5a0
1033500 030e3cd7b93b70312a5ec6cbaac9f567358078422f5b53c197cc86d2519ab70b cdcbf7bd8b051a4eab6b41f351cd6f9573b8a9ae7408b1ab633457ad9491826a b752605382827e7074e446aa45510fb7432771a1caf9b6122717fa7fe004d9d7
1034000 d15e32207ebde3b7911ebb3db34ca537b2f1e15cb1657544b30d13829390a3ba efc04e7c16e0ed1fd15e5d8c9068b77361e03feab82ebe7d73e0240877bfae72 8e618f8996635c8a7f62e323a584b9e33761d1025c887ff02e72119dedc270e8
1034500 b9d7ff12e0b634c98dd84165b76639fc92b5c86cbf793d313f0fde5d203eb8a3 57c20ce8035f48f0e305fc7e239f86f33d6382b558d68a65e1a72eaaee1e3087 9c0eb7689751f5d0419e6735d941ea1c63d785c1fdc07e9b343df87344d86c95
@ -2099,7 +2099,7 @@
1048500 d80b9eef45c8bcdcfe112f4f398aa4141888fb4bf69794b419757256f7b9bfb0 c252f3198f625fe91d91dc5e3032446956d8de987b00d5d3ba008c3e092f6763 8518048f6083c29fb1e001fbe778ed185b87a988dcbe0c61cfa868365939b562
1049000 be562935777742d22230f2b13f1d885fcd3f3966af8baaf182673075aede0a9a 7a8940e33f897394ee39c5f9edf0b04d71f28a3e07a65011496024b64a91a70b a90c364c7302fafc86ce15d51b08167f9232c44e2a7744a7a674508a146bf7e2
1049500 450bc6a5f1b7d502c9a86ecb08ed3bf26c87149f6b6242deebf998ec1190dacb e496811cc6cab5c2b821d21ba29b71ca4256b228889e352e779a82aeea96df63 64fd7f1d78833ec1260e9b39249e9957207845d99bab950ef921a3a5fafdda46
1050000 a835e80973ca0240c06703a30433a139d200453a7296c24a22b62792d17ff2a1 44c9a74b2ad97727ae4f419a77804a88f9a3cb31bb3ae65e2b372040c1eb273e 95c578d836ef48bd93f58757d6c3b093acaa373f9654410f85dae1aefdd5d3fc
1050000 a835e80973ca0240c06703a30433a139d200453a7296c24a22b62792d17ff2a1 ddb62effbd97a0caee235037f11b106feea0f693a75d98707f43cced9fad30c6 95c578d836ef48bd93f58757d6c3b093acaa373f9654410f85dae1aefdd5d3fc
1050500 631b74a56a6719158926aca09aa8ab8cd89b61e563a5b6386ec6de5e782e926a 1e1c4fc04badc617cc382d6aadde8ae735277694e233a225634e2be077c97a2a fd4f6efdea193b035f4b5947404483b6930997bf8089d1661d9b9ef48c9887aa
1051000 1ec8fcfb9b6d6c602e2775686f04f1d39a768064ee6aeb65930bfee5b1a94e19 4f2f38f9f74bfd1ea8daf0ac5ffa8afb485436d5e4b35fd0742c454439b21488 f6311a3834e71c30635c01e0c45aacfcb2241780e3aa13f2c834a84f5afda969
1051500 73133e5c1408263f8053ed9a93ae7164dffc2381d3a7fa24cc78c29665b3bf39 a47a6e2a98fef063017953ee09b4471622b986b7fe8dc6d52adda451db9c852e fb14519af510b672ace64d3d250549fad14d1ed623dd0544bc541b7e3710e38b
@ -2112,20 +2112,20 @@
1055000 6c92f01ed8c5f4247722230e045ae10ba6973c3f8d8ad66684852efdfd801234 59fb8eb1e18d1ed445f7378eacd8b02e92698d99c1ac4d1544e35d127134424e 527e64783b51c20f17908f8d4a5222f837061f839e5a35effaee8625110d96b7
1055500 655d624dd686c5c3f95a7e48687d3cc7f7e3623b02c1f8db8727e54186e16cef 508f0be15eadc58ee080897002ad681fc2fd2f4bd4e175a319807626603ed601 2a01b2336eb82c2d66c72dfa96f1bb4778d0a28b7c169c431a8030ffcb18056b
1056000 af11656c7cb4f7ff056efc8255205feb3ea12f96da9ac416e33b034e93241e42 a9d081e5eb78f1018e0a86b8c2c333989d375adb3f217df5ce8fe0dbcf84c5d4 6e3b76382e6e42804f19c5552c36c46ea24829dc035c16b0a138254a2c192aab
1056500 4f7ce26131a4923137977f716334a07a99d1fede466564c89aac75415eea0eb3 6723f6345fe576dcac1c5ccb5390321e317408c7dc34c4ddca7a6ac83c577ca1 1649fcd866bf63938016938d91a53248bf9a50db3fe7af3711beec8fc3ac573f
1056500 4f7ce26131a4923137977f716334a07a99d1fede466564c89aac75415eea0eb3 da79ba315f20eab237343f360bb5cb32c210d3d909495e847a1b8201dcbf114f 1649fcd866bf63938016938d91a53248bf9a50db3fe7af3711beec8fc3ac573f
1057000 1fbe16214e11324f46064f3754e3189dc4e57e9aafe221ea7fa45627f0db2f2d 123d5e7d330c6dc7cf7a4b9efc6375736de9b6acd14e75205e72513a19e938de c7dc8a859791fb06bc5de694f4586affa038b1b065ceb3abec61ef4e27dd3c3f
1057500 2c742e483d8a978656e28a4b574fcac3264f040a569e8e141fb3b5f0de9585c7 301d401df39b752d5e5a7c3d11b8dc6f985b7f836a4f8e4a318631c45d6d4f6f eb5eea8f78367516258e9e79be1c491b84899dbd73b9469c862b115088f44e89
1058000 71060b474bbc2cccca3629b7a682061d4c6883c35750878c998c2946f99fc70e e853025a32604033563ba0534f00dfaa3a7b7ab8a58ba1ff273f5171b8b0b467 72afdeb47d0f75352b8986ec6b7c7a8a4527a72fc245f7469a6f12df141a2ec4
1058500 86d1e3325a942cdad7e74813a1d548d16aa30477ade1436b839e5d8787886226 2c6260122193c565daafbadd28503bd5ed077ee4113f877b1625a3b6b9d86c37 b18663868cb27f76a39e3a91958c7c935cb4a8bb3146bff5b077c733f96a5780
1059000 6fbef62faa5f95b74e45eca92924aa2a1e156ba4761cbf0faf84ff5c55b585e7 7edf5298bc57370fe60d8d319d2e5d97a1d126643977823d601266da268a8935 cf0917a434d3d21f0220e2d57e912a534d10092260015e7d23a6265029134e5d
1059000 6fbef62faa5f95b74e45eca92924aa2a1e156ba4761cbf0faf84ff5c55b585e7 e452d37e5cb40bdd6156883b30656ce9ffb57a168d81aff12f9d50fc4c6ed068 cf0917a434d3d21f0220e2d57e912a534d10092260015e7d23a6265029134e5d
1059500 d2c7aecc7fc0bef185b164a6491d39525e61a7b36eec25184954116e0c98ab99 af7a5135bef5943c1aad9b8ef09e192a0230a8c4c6c1ae8fe4421aa5e5df0499 a2b06bb577630f4da626f630c564ac204b5715d128c1f6184d2dba2701b623c2
1060000 45ab1dd2a8e66e19733811b7439737685770d6dee337e3161b6d7175254e8673 4965c6b0942bc3ef57f11b6f2e0e0bc8552e4c2e2146b645ff7524aee7ff7f83 a321dd68f9f4832159b7865b31e56b694c7dd29b17bf34854ef2221f752bc613
1060500 c5761a40449ba6a74e1a5129ae07924b51b8898ff1eeaf9db8da2aee647d0612 7fe668aaef8d9836bed662b34b8f7d0b4c6abb9909cd0f722e205601dbc3e405 5855421e292165c955804224dedcd01f53fb528de99ab1a07047abb368618d7b
1061000 e297b28ed73b1a92602b1f2eeb5b440754345478353c815489e4136b343f6241 9506b5c030c839fc12e0f6806232bc7abdc76cf5e9945e232246342db52847fc 378600fbf9567f87c18d0467dc47dc8ce24571ece51eee6b5d839420fb2f695a
1061500 228ba4157527381a8bc94e12da1976385e9edfc9777445a702b90bab7a28050a 93fbe2b3a2689a91ef35e326b757903b0a82e3cfea2577d06dcaeb8735b32c39 0af1d2b58d0291856eca9a5620d87ca3f062e4dfcbd9d2a2d873f27c4f14c13e
1062000 706d3ce4695a317869634ffcfc35ad654b2efd84f844057e402ee7941848201d 6b47b1ab8102e8c326cb26c20e36eea5f995f3251aed35eda638ed4b0c5c19f5 7c947a2202e56c27a5a1d84e14caccaa04e3d3ad4348338d3a00556d895bd946
1062000 706d3ce4695a317869634ffcfc35ad654b2efd84f844057e402ee7941848201d 602273004dcbbc377da2f7969fdb13c4e3728bb7e3e98fcf571e0a0aad4abc01 7c947a2202e56c27a5a1d84e14caccaa04e3d3ad4348338d3a00556d895bd946
1062500 c3fcf4e0f04dfddee32165ed3126c9a6a91504ee311d6c10bd10f14d6fdc47c7 0279a0d50d4841649f97562751ea348f03242056f4deb13fdb4f9f8ef2801b95 394e7dc6b68233af02094e087ea557aa5c7cfcb9c68e001359bea783484c7a71
1063000 a0c1ccd1f4d73ad8d77e2de61032f30e86a3a8de6718a28dfc1863b617f39358 64fcd7f5a5c131fd3b6b36cc6bdd2a55d79e6ef9a800d46c00834f8b754ff688 3480ce4516b3ca0cf73848fc929d2b0a2e07570c0679a8845eec8d4ca1982587
1063000 a0c1ccd1f4d73ad8d77e2de61032f30e86a3a8de6718a28dfc1863b617f39358 fddecb6cb2ecb7722f31810ed7ab2b186bcaa57bd0619034b200483e0ae6d91b 3480ce4516b3ca0cf73848fc929d2b0a2e07570c0679a8845eec8d4ca1982587
1063500 2330e271b8eaafc1658c9c51dfd6b495f68551a65b96619cec0307289834d85c 86b93f157059c9597dbd98a08f8a62b53e5be73f4d0061fed3fa547b508a0643 7ce41095c1b455a6d3f74d2f75f1b4e6573de79ed67758bafec649a6bd1d0531
1064000 fdd490d245abdc95953098dab5ec68ceaeb41108f5b622f2a6e0c64565c3f1db 88bb5a1b5754de10c0ef37f329f91d444628e60cf45c79078504a405af8a0ddc 9dbe60c9362c8eaedf48c075b83a2987df3e7618680dc7f05aeb3fa406239355
1064500 9273b1a6243f98cc99a790fc73ebcaaa46c12ebc73baf39d18fd037430e44600 662cb00f6441b43c4e6a03fd0d1efa5e77f8d821b944a4b35605d111651f940f f9e42af8cf6d67cc2befc29bbeac8ba24e0e65538e5b75feecb6093abc36ac67
@ -2136,14 +2136,14 @@
1067000 28c2c19ee01f452eca69cb5e65f005b32bf80eb83faa7ce7c0e127738b74a802 16e252a29879548f52ecfcb71a2313136d5d937f79b100850325c7bb71814254 f7874698a0a8d98e3c59d4a872d4a40a9e37ce2a2fc44898e75b6b17540fb490
1067500 692144c9c45467b66ccd780438153ef077a79dd48a58fc3715023b1f76236abe 75acf1e86e7a85c042d72c6167da99efdde8d137b59542220891171bf1318ba8 59f3b75e9af5cd4a728cd137c3466f90d8145af4a7748e3c40017bde52d2aeb1
1068000 a5df3d842f3898395622bcee46f08dab2f76c2456c0e09ba25dd29f46e140c18 6875b9ab0e23047bec2cf3f1a2103f5f6bd143031fb18efa2cdd5c8da187393d 25a6556bf508526d411a5c9d1620113dda46a967e53383d9872e35b658aa546c
1068500 a48cfe7daae6a39e0022c457cdd41a79c2dd56edee7b10204cacd0c03840870b 709bfd3628d5738d27b7d505772dee2aeb55f816c4a9738d3b52251720e72ef5 90c0696efa53e585a3e8c211a7c6aff44711e986b790d86c678c0f74f6df3fec
1069000 8a58edbb5fc50b3c8c028ad46f8cde21dff8ac59b4862c23659dac18100eeb6e 3d480158595f9e106ab5c6f5a02d6dae551dfa3a8c1b015461ec61f9652318c9 e57be6967d1f0ed4233de06f706ef4db292077a8bcb424c220cee997c972270d
1068500 a48cfe7daae6a39e0022c457cdd41a79c2dd56edee7b10204cacd0c03840870b 2f7b5f49958b7b145b8f9d9bd13f0eb9d7ad69965ca98583e4884e715c219d2b 90c0696efa53e585a3e8c211a7c6aff44711e986b790d86c678c0f74f6df3fec
1069000 8a58edbb5fc50b3c8c028ad46f8cde21dff8ac59b4862c23659dac18100eeb6e 1fa50519622ebd66f3a9f69425671320ff72c378205483bbb7c46112501d7b7f e57be6967d1f0ed4233de06f706ef4db292077a8bcb424c220cee997c972270d
1069500 1c2047a1a3315ef6e285656e79be2d74599448d84b1aa15132051f8d2fbe9c5c e1232e9e501512b3241fae5eae73017481534a82d8cb12593db3dd5aec16da12 81a83b4f14907692f70b637f043a19916ade4c7fef1d2b3230956281bbe12407
1070000 b2c9ef97982d02946b78800c9dfafca9b3aae244e78aabd17790855d97eafdc4 0bee49ebf1bddebfed4b7891f616d8ed7e9f94f1a0ada35f068152fb3e715e74 6d610254493a870bc925369c82e431a894e0965d0b7e8837ffed73f900906f70
1070500 05d6e0df5eaf44379f74a59b82cf48593f554aabdc8ff1c8e7b9e29c0120e3f3 bdfd3c96915dac1ad524b75e5504827d27603780d0ce36740f0a7ac99d65269d 0a1e76f48f334f488865b68040f5806662fe1a8b97f984a0b3febce7429b8ffb
1071000 4843769a45f8e41c5addea413a9d60b3b23cad4470c645e154381dd8a052ba16 584b8d85b79c7bc04c451b77200b1f5a43ac1ac675f19df8683fc1d517fe344b 465ac9dfbcfa23e16bfa7def9c4ba8dbad6323c07c0e5bed6f5cf745a710e2ff
1071500 a054cfb37aa34581d4f0af31e90242d2d2573ebf4f2528ddb45a108d85d30654 121b54b328edcc01f19cbc89b4f3e9cd5def9f5cbd2f4af192e99e60785eec78 94289e5393a34623406aa76d1abd7f360e197dd2e47114f17009c335681500cb
1072000 c5ab550bb8c7ebda7617718ba4bc5a91ae505dc653d176ace9aee3ed3b7f621b ae1ad45f79f982b5565bee10fdda973d820f6c315b0336491daef73d08b58bc1 489ae2288e0c7a43c63c8ea05496864edc3c6c0215ef402f1c90f44111e90dd8
1071500 a054cfb37aa34581d4f0af31e90242d2d2573ebf4f2528ddb45a108d85d30654 528c0c00da0f2ab77cdaa4c68bfbaee752b064e3d9f2144b9d53051c6fbc1c80 94289e5393a34623406aa76d1abd7f360e197dd2e47114f17009c335681500cb
1072000 c5ab550bb8c7ebda7617718ba4bc5a91ae505dc653d176ace9aee3ed3b7f621b fa4c7b5a4a1d2895fd3a7dbc42e092d76238c371a1679020b35d6f0b16a8358f 489ae2288e0c7a43c63c8ea05496864edc3c6c0215ef402f1c90f44111e90dd8
1072500 e3ee28857f0079047b39c8e5b5ad5e73d500dc14ec31dcfd96376a781849eb43 3c2b1e6690dea914e5dd9d7dce63a31fd1c2ce13a024fd7cd12b3e253ea41d05 a6d2a1cbcb0f6682ebc431b44dc136e188534972d471c47cb162302dbcf08342
1073000 e4b3f78f6a5a5920108980e51beb7bf63c7fc53ee4e775dcbfaafeec8baaecd1 9a780fd47db384f0383a248bc13aa05c8a4151acde039dec571a4f855261dfde 8e07358f76aa7b0cc75ebf6f316e62bd7dc42a34ba2a83f4097ba92cac23a6b6
1073500 82b8cd32ad30ca55c5a9f817dc7cc8e4973c900cd1860abe9950fc97c907be37 5285894affcf8d17d63784deebcde89272601d347e386f933ecea357004e28ad e93bb24b4f7e093aafc9e5155875ce05ec410beaaaaa79e6731dd6070e015bf8
@ -2151,8 +2151,8 @@
1074500 e7edd11b9db357df9e63378dc7ce5125b004787fbd2dcc48e056c90b36d3fb58 611419cc6f2ccdc1557de599d1969298d6523edf6e486c913eedf8fee7f20e51 7c40e42807f2105edf27806ae4bd6053b49d176449d24be5848afd2b5d79da11
1075000 a670ddfd0da7ded58fae374fae1794bf524b7fdc0885227ceaf9af9081e49733 62d34c01429af38f299e33c02ef9105c36b35d802cd6fcbcffadd48c562dc099 906084d3e66d7860153f9573c36e4bd86c73b415208129ac889a73b871e34be1
1075500 2a728c2b869c6736e65263cba12507ac08d6b79036584d9c7a2c7d603539e7f2 50b4d0639716fb549d4c480f3c16d05cfbeffd048c6dd7a0743a213379996be6 c6b1f37b4c1436ab3f6741d39ac1345c478b1a5e07f6316032ea4260879c4aeb
1076000 cb1214126b0bd68c93c55b527dfed9ede59de69805a027857a0e05be00124e62 33bc95391e41f7a3932d551df636e00a18b2e0d629ce0b0dc5b4ca9ccc3e9e3d 194ac3bbd52aecd7e8026c704b481acf283abc7eb6744a28fbe5264c911b6681
1076500 119025bb4b9a57e4b0e4b7ba09653a531266b343307a5af0bad57bb23564dfa1 ff905ee2e1df4242ff853cabf0b189655d31bf47ff92d59f68325399ffa27859 e0f12d9cda9239fb7ad33e0126e19752cbc461096c8a89ab8609cc2b74d5d56f
1076000 cb1214126b0bd68c93c55b527dfed9ede59de69805a027857a0e05be00124e62 f499de1cd286882dce0e7f8865db42df1e9601622cd8aac36bef68421e2a7d0b 194ac3bbd52aecd7e8026c704b481acf283abc7eb6744a28fbe5264c911b6681
1076500 119025bb4b9a57e4b0e4b7ba09653a531266b343307a5af0bad57bb23564dfa1 b0e3ff0f7d53f37d61b7a3a947dfeeb5674bcd948db101165edcf7c98ae29673 e0f12d9cda9239fb7ad33e0126e19752cbc461096c8a89ab8609cc2b74d5d56f
1077000 555eb72f81aee04384cfce568eacd6eeddcb81a68e10f2f1626994d7087f1d3f a2db17ec89ea79c806a67e5a28a75ab1bca017ede8114fba789ec241aa2a6539 58fce8e993527826fe22ff6646349b98539f84d8a3f265f0eb6251fc88e4ab37
1077500 b3f4dc81c85325ac81eb531d90b6cf16d7e2b75f5f305b95865642b8c1fa1bd5 e901d71fb07f0742f446af43a1224585786c2fa127cb36fc21f20ce204cb3dab 7ee5c6c519439b93cc020a5796151c243647e1cdfc5287841c816e533a6896ba
1078000 e6deaf52d4f8f8f266a00deda4f1279dbc9277b1a606fe9b2289105397ecebc4 861db344c44d180ccdc6796b3806d286cc8727c6979eb56f2c4f247f9d946b86 31266e9df5dc02fda025e579e9aea8df2391c156be5679e1bcabce5e55ec79c4
@ -2166,7 +2166,7 @@
1082000 f78a537107770c21247246007ce08a45e7dcbaa551b9f12a4cc9079b78b64045 88decd3918e4e6d5ce1915868f881049380dd9d855001ebf28664d8f4fe279d8 6d638afd79ef31d972eef1ae1a3afc7ef155a4bbda0f59727213edd0c68d5112
1082500 84ae75ba3565ac37619c50e444bfc6fd544d6e585e433c1599a3865851967a75 709236907668df31fe07167937dfb81ebfaf44e50015f6e95e071198db66258f 7f32390a047350b63d0bf90820e84852f21bed9f887bf62f71b199565c045ec3
1083000 c4fc7daba93811ac701a8042c15c8b64bd0e0695b085725cce4f8ad1c4646a50 8592b9641c2c78e11a0d94667c0ab1f4894ceefdc061c7c6ea9031da0254f422 0c2861c131427bae71cc47dd83821d5ef9a92344c0e40c06c7a17a0713ba0bdd
1083500 0fc14672e22643a8475457e39fa6273f33e8fbfdce9b5b22b350cad9b72b3b9d 51c2c14ded65e5f023466d3b4ae4a374472576f60cf42baba6b0d679921da088 3e254c64a4a4b287645cf2bc6e4ac87d35e2c40dc5de078b35a7e356f6d519f6
1083500 0fc14672e22643a8475457e39fa6273f33e8fbfdce9b5b22b350cad9b72b3b9d b0a5953f75c83d3a16052880a0a49eef8e40861b38aea8e26b711bb041b79f1d 3e254c64a4a4b287645cf2bc6e4ac87d35e2c40dc5de078b35a7e356f6d519f6
1084000 fb57fa6354268471642b38417a993ab3c3fe495aa009f09b04285d023c3db9be 3db1a48975fe6b178f5436173dc44668bad3b413797c0df6d1365cf04b9239e1 9b4a23a29151f17df279396195029c0f94113a87c2923a2a7546ab627f3ebe5e
1084500 ac08c1808452ce0919a2813f507f09277f8aa3cd68b92e35e07130d68e78d6eb a23ff63e907d969af55f6096cb8b1635db6adf7aea9669c0d54bba686dfa9da5 fa187cdd47558624e1d8e7fdd9236bc2acbc26da1fed791d9f498d8699c4b664
1085000 1abe79c82ac99781d44e236aba1c6da64cd2382ac3a1e42c5a629fb8d1e64dc4 67e01558800c021a4161537ffeafa2e81d74312b4ca25b6e3d4949bceaf14e6f 34cf0270da07e5323cb595d5412ab8b5584a2908bc754b92da6215f5e0bdafcc
@ -2181,7 +2181,7 @@
1089500 73b592869e9121d39bbc74022204290faf811c37dd7b1f377b31042636e3b1ba 58005bde06a6f8a0d72b84e8a2b4ddc227ef9060d5293f7895abcfa545035e48 7087e0bf7e8063fadcfa43610ffd6afd79a16eaa6d002400eb4aa828c2cc5a57
1090000 31ef8e17324e817ee4784d9c4812012521d6179d612756d4b14a16eecd40a293 c2d728f7215a43d95c5185ed221d0273b5dc99fbd9d6f7f243e14bab876f2230 13172dd44d381e32e368138d44f42b215fdd4673b09260c9d8551b520ae1e65c
1090500 686b2caf7f33fcf3f019b5746d9a146c10fedb7e8f672615e0b6e6ce5113d5a4 47f370504009b9c383251cf39a7f0a87b7630c0e8bd9fac80bb6019137a96286 e4fb436b5acccb15018d9f7dc8f18834c76463b0bc566f1f7d410bb69a74156a
1091000 c6892f956bf40f0e9503dc0f249ff860f8d030a2dbef90b04c0c9a2b5883df84 98d2585ddee95b72e40f9bd1ba0d5330625231b8c31c25bff9b57ee508c23215 6c3c5a22398e694febfa38d5df32585e3835b18b23d79f7bd69a8815e4164c92
1091000 c6892f956bf40f0e9503dc0f249ff860f8d030a2dbef90b04c0c9a2b5883df84 39de090cedb5a8d5b9f272700079cb039ebd45ad1256f7b4d48a82021d05be41 6c3c5a22398e694febfa38d5df32585e3835b18b23d79f7bd69a8815e4164c92
1091500 6ee9b389ea350889ca2ad7b760addcebb3669fe449bbfd45d331f2bfe1fd91e3 596c3088087f434c7e56f7f1a864a0f2cceac34a21139f5c0b9224835245ccd5 e646be1688828df6a5a37fcab547e74b4f054c442b9bc437eccbef69952284a5
1092000 ae131361b7cf2eab6bf3949bafcb0135c9be361b80b059e91037f6e695eaa655 d7eb8ddf3cb2711d8649be5fa0e1f6b35397fe783949070c1cc71fd97df54be9 1e053b228604a3cc97764a4ef6c7a229ece936640385b4e162142f999ff2cae9
1092500 655d30044d9437dc51444aeb1c8796c237fa730d4ee1b92ec6cc76def475017a bc43c30f84657322b6dac014b80856f457020e1df7c275abf07c8b5f21117cce 4c8235ff2555249fe401f4c7cf93b33951da23697dfe8c4c87590e8c44bb8d95
@ -2224,4 +2224,172 @@
1111000 aa71ca52ebab08b1ebcdd3d74178d5111b5965452b53b0da7225b7278c386aff c619fe02fa4140f273339394f0fb4bfd932288d725435f47e079bb19d6571371 ab9a9962450788969f2ab78e048c950cdc679c97385d9e99bb3f45d6605b6b08
1111500 543ebfc4a20da2592719dbdebbf424544e497ec58abf65b4fb6356152fb191a6 61b012a00ac0313330f92978d0365dc331c73be7af762b5dc7ea9881ec11be0f 013df69ee6e580a5b205a5889a23ba88407e5786a9fd1df8f07d604dfeabfaa9
1112000 0b8fb3356b3f1bd10cb2cc2410eb9a5e63dc4e902da92e43afa8bafeed0f67e7 007b179b9a91de2545148cb761a841ec8cf6a138d0dce8851e832fe38339444c a7a733242cb715a9c918e4bbacd9473a4c93fefd931822a16de2a631fae81d79
1112500 4ba3b8106c0ce3da080cb06491b46fb5640db7d7930f7696d8f4c96af053d826
1112500 4ba3b8106c0ce3da080cb06491b46fb5640db7d7930f7696d8f4c96af053d826 5eb4191d7bd977e9bc93e416d828db098763f29ba69ccd093c418992dc4c0693 fce3b75e67debca86c1dfeefb26fab6a38f1c29639b916ecb034170b594b9750
1113000 7c523469e3f45e18f7b5d921d50278cd65a221e87142ecb3f9e1c0de7efb3f02 3a2f78d06754af9c1dca222dea8488e82374ae5a1e265e927fe663d62d8f1a6a 4ac309f47f6a3e75c4abea6d058312ffe34d7c6853f4a25181b5c6985ca1a574
1113500 99a8175318bd2cca935996f3982c789ce6d781fe4bb66d4c0add5cbd21124552 3cfcacaa24b3c6905f6c4d09d319e5edfb3c14cd989c473ee87e3ff620dc16ce 658d9f184960b8595dab1c5ab5d4eaf439db20093c855881615757b1e943bb89
1114000 b0779e071b9ee0ad0912616e9c267c2813f2f3df12d27d2ed6ba4d440a883008 affe19ca4782ffc24021698ec88e59a8c3af7152a7fcc8e5e5fbe5e2453413bb bddc37109e17ab827e6dd9e18eb8f3e39627aa287fb933c89a1a5588724b4e95
1114500 50ac1aad785d687dc562d836d7564accd2155a0a13eba165dd66de5af8d93699 49f30c636c3d2230137849072c53aa4d7b80c3879de19f357bc6d7f1927baf8c 8678beec2aebedc5e16c77ab83f55319226aaedd076e12056c3ac529e2f0793b
1115000 882f457fb70ed5c5af4c9c7d12ac0c79398339bcf471f00faab5ca3700a2b233 2dbfaaed70ef9713de7d086141e356e55b25a5cc68abf9d7c2befb7a65ec5f7c bda2f774f9a119c931e14c5905c75cbd9e138e45e9096261ace34880a40a6fc3
1115500 5bf062536cf52861ca54591dd205454a2d6a0018c9eafb39e9d4656506e4240c c97cd141809e7bd7e43d1d2e8384010d28043a61f453f1b5ffb58f75e6736c86 30809bbc15d98626360f7940f384ff59e001bca4683af96b6f4eabcfe9a25ba7
1116000 fc1cdec7557b6c6eef3e34f6049bd034e17c662c49d626e2f95a3ceac14f612b 0f5c324765751cc0c34c1af57ea47231f63ce5a6e666254d6abdd8a21f3fc439 d4891ead6a9add27e4c46330b8bda3cbf0ddfd1e2a54d754a7c308a1a1c6b5ff
1116500 ca65a5db9ee37dcb15521c45c7139448482ad33a7b9cb4c7f474f1459ee60759 844ec003738c32f93d343a2d3bb0a39a26d7a9f6447cbf22e7ecf2949f00eef0 73c7e8aa2f472695197ea0290fe2264e66957a620743d1ce97f4720d4de2a7f4
1117000 bfe0ab6e8d174f9a75b5c6ea44dcb3e4a20063d3326c9cf984e49aa4c2514d8b eb5d352168388404b800b83b7484374254cd01ed883b430d288b356f3e0e853f 424d7992768b9d71b8eb1d39f07716f95753ffba0cc22a67948cb8ea6a9d62fb
1117500 56782ef3ad747d52d5a3bba0e2902e0e45b283de01f844447ab79bbae0f92573 efa60d46e6b093c152d3f58a9e420e6f76be8e9a291dd015ec2c382bf46eb85b 04326eeb78f0c933d74e1e11639c0961a089e51ff94b585e28188c692839a8c0
1118000 2274ad79c5e39b6217642067faa46ae3c99b7daa3366c00db5e0b941e6513727 aa63d8dcd6daeabd2ead0328cd1039fe9808f002adfb8b000ab8026f7dc94ee9 9a3d1e6de9605f8a98228782a9e82ec87519fce725485b6efeb3bfc0caef2ac3
1118500 8f65398ce001d8a8c115d35b8ae7b6137afb65794e48215e39a6e53a749a3050 dd5f02c89a360e656f2aa78fa2c2418edd153324a259ce1d1d2624b3747bede4 22b51378bb77766398c19e79835a439fdebc2eab839dbe880e6d7d038955613b
1119000 42360f9c6b3ed7f8f17ba5991865d6e987fcde944641b8ea5ad175ff9fe0d687 55756394f1a3555e4539f5212be0a40616b1e4fe5376bc125a7db34188fe066c 37285757a587203458f7b69254b508fd533814a1673e3e5160cedbc389d9402f
1119500 d0c2ca3f9953b8709c59940eea858a290d95bfb5a70219f1877ded31da9c3174 d53baf30b237ab7b9490c86148e891b6ce68c0f571575f1322e85b9d04d7b7ab 9a8272d7e78eeecc81a332ce129f66d2b0e65f2d072aa500f5d17cdca29361f1
1120000 f0c0d84d13c72a4bb148f629494e5bf1413c3ac72fc137b3833079f7bcfefa07 f1f1784076870c946c827b0f4c3caf35afa4e0dc06f1e8fd351e036fb77e8875 838cd849130903b6c839ef4ba370dfa742bb532bebb785d644e78328cd6f4df0
1120500 2d6b0e1ff1369e94d42ab53acb0ca8d235b9c3328fb88378336f8e353764fb50 deecf80760f89e0e2e147745b5ea3a76f9c8c89476fd7e236356f489c615d625 db4217003a8f5c504630ebcf4263aa97a4702f076bf6707da5d4453291fdef78
1121000 c49f642ad2ad1234447bb1a48821cde8623c80df71534ce3ec5f230d7639ea40 4cb4ebdf36fe3ecc00b6e6bd5034518683bfe999e1176a628664434b9e2f28e8 6b4d3efdb71174859744262287fcbe13f36e0158ad14d35f8fa29d62d35fd84c
1121500 d0b462eda3715fdcfbfbbdb326bac0e831d60d9da17bc5d9bff5baf674194a36 404f1695df6e3557012546d2b00c50d480c7ebedb78da102edfb6617a33fa7cd c05a9c31b34293d87b3c93a6a7da334f1f159fd72e677a74b62137a328172d1a
1122000 32e2d73452ae2e06c51ffb55606c207077c6608a4b5d39cf31e059abf7de9137 745da3873852ea18368fb1857cc52b4b4c95de421bd08906b6d2369d4d4e22b5 81f91efe575453bad3307da56352a39f4ac08c7c3e19b2d5248e9da0aaed6525
1122500 1be53be5574c15522a3b41f2ebc60df0427a98877bb9b260f416be2d9d3acefe 8e896702c534294c58ce6bbb20b0a62b6db5fd60e5e0e1e17c13ee2a35ce50cc 5870707c293d51277ddb8e561ae090866093f61c5f0e0c80ac9cd87c248c2d15
1123000 01038707f7f6aba51dacac7d359a048f8dc61e9197d9b93a70a8c2723ac3fd4f a98cc3d4b4923ca8cbf1ce8ea36d9ca81b74b5aff50f57210ae66e183f067476 c92b4b1dca9be3d4fc25ad3edd9d33f08ebad7924fcc51b1e60a7ddc01286b62
1123500 bc27a40263b51c55b6bfd56a859deff8be00e4d1d782f161e16d5d6f544b7dd3 d70fdd2c075b3a3aed86581c27cb727982c7df9f95d590f915909896de3fa196 91ca5514e4b657a750537a93a739147578f32b523eb25131d05a8b46f578e36c
1124000 bd6a924108e1c96ee897ce9366d2037df8a78984c4ce449508ab87ba028a2190 9573ce3b59847a39a2fd91c222636538b4d466c194ca2ad0905b96c83f5fe86b 7d40600ed77299561afb98f3d0d989f02c1c77f942748f86b38a8e59e17600c4
1124500 c7c4d8a688aeaa072e27ec017b59dc6ae94cf89e87fd6fdb472a4f8fa84bdc82 1e711cf9776cd339abc21cf83176fd5209ac68388246fc4ec21bc515697a8e58 06712a32afd23ec1a00ffc630a7669ecbdc9cb961f74245a6cb7dd834a911e27
1125000 7709af2e0216d8aa32440833af12ebf258f3fc20778895e718e8e4e1de77af24 5e0b766a520519550d75af62c74a6df46921d2e4408eac2604b4359b4f93bf30 13bcfe304a34732c86f070369868404068f58da05067335960586e757ac96f2b
1125500 7e2e6e1310d7be6beaa3a98db2ae77b963c9f1b05057bf088adf0033af0f4b2f 0321c756dfd069cc6a7bcbc3aab9f8d05b9623b608efade8eba6b52bf0d5110a 1caafcbc33fac6047e87e88084d2d82c9bed973c51bbdf9c9d369e6f7c7afec5
1126000 2a769e90a6c21f54b5f1c29b6c90c8b4aef9f95ffb75cf44134286345250c6d8 9389346bb6ccbfdb27338afac824810ceb0852aa222d1b3ba8f902e482a3343c eb6896bc6162408b38d673655ca51c329e7fc599fb489d439676b2c037a7a587
1126500 95b1db3a3c11f179372018ba5f7ac3ce44f190140c3480871f9c7d1bfbc0b05b e332c14b1905a46078e87fdd4265378f846a32d19cf72af8aab94babb4d24b1a b09358e5be70e30599f73061be30cf0e5b302611dbddd08412158511dc07e5e9
1127000 9fd39c22a0548d671af10a2265e07085681148cbaee019e51b9dc6df7b95bdbc 71f0d4ac47a0ef52d215b7d6ab7dc3b6a244c2c7b02b0e84879aacd98d3a45d0 bacbb9e1efc49035d47b6574cfae9430996291f32278e343bfd90ffbadbd736a
1127500 aca1d9370f7988e5b26ce715608935b4d940565d2aba407b3c86a440967b6016 515df887b0c36fdeff248d984faa19f1e6f928f749d34e142e7873b71e489329 989d2ceafd9adc2bd137186244e2446edadb43d9e0e187479eec736301058496
1128000 23ef957d32b7de302d8b8fe62343ebef82ce0e74c1accaab45b197d6505beb6e 70abd8bd0823cff0b60a7136d10f847b6f932215feff51038b79746fea9bbc2e cbfedb6162af1c8c606f6b18f003e8e028917cbe21876dceae28e91c38e97f20
1128500 5135a80b7b8bbf5f67135b47d36411cd996c578e416f6a2bc347925b35f539cc 68a0c9c18d02a5bc3fdcc64d1e023ef5d06712653b7dde6b288eab044cfad020 f463ed605ef95321fa7cc20d3bfe2bac95a2b1d3cd6d531dec43a55f6607864c
1129000 7bed85f6f5298d7213f3f1eee883c197b7a30185057423bc7eb98ce797d0b278 f3e7a7e5b8553e3951448e69f003d2b872111f2a30de161cb36eba2fb2c206f5 127538d092e54ab66ff117051686c0e910c29c2a338323f835d7b1cdb3c89d40
1129500 47cdad710991d54df8425e6c0184936eae6b07bc1fd885fc16066ddd13b512a7 5311a77697579a62ad2becf8b8833083075ceb3b567240fbfd8a182b11d4fab5 576063ab3816c76a708e44cd1d20ce999445a2a0658a10eb0416e84186d0e408
1130000 80453c86a86faec09ee4a14a6f8202672728d466ceea6bcfcf5c51c6144c367b a685204657de06ee9079ca365134a185bfb2dcee1a9227cc99fb7ea3ea492a87 c11d4fb4d2552b84162b6f7d93a2a44ff0582b0cd607d5b35570f9a8d72c16d0
1130500 80891bc449402be48d217aa4ba5e274f9514dfcff1981820e1515a9c8a2b5e25 36ae1ea8df2d2631fde76330af6d357c4ccf91dbd790703ff0940d429f7da4ae 42551ea15a33a92f62262dddfe194bd175fada62c014b1072a23660b464e0433
1131000 c388137edc712616291477f0a1237d16c4100b1570949824397abbb835b59f0b 34e4612b5f9d4252fe2ee1a17c23c653df33cf7d7ff98bfc19df777c3d1352ea 5436b75e49bd806a465407c53596edf01c4cd273a15ded7719911123125a53ba
1131500 dd47d02207fd2deabc026e1e2ac779de6ab9c3a74a0712e01b72daf28bd7bf44 58bdbe8f017609e13f71c8fde89dbecc7647c8ddef31de1f69b9944ee180d5b9 df9a6f654131d5f982a22ab0447d41b0f4b4314b6288d0ef6f740011b2a7bdcf
1132000 90be07184a0407c689bdef995559076a64de1b402b0e09f408f30d4e87735316 6224524eaa0373d0cb15a9a3afa758d0051f538282979c304508fe90c7f86e44 f1bdaa1619c5df03ea9229a4f29c9868a6d7276bc422067e29cef396b146da5f
1132500 bc4a5013265f513675619177b1f242ad3d1b91bfc13c12de5dea6dc06e631c0b 9a184c28e056693496f6431e735c343a6089a97f906e8514700076fa58f57448 0a6fab7b4903cb31f5b203126bacd036d948937c1a594f6e440dcfa6b4286d26
1133000 d7523298dc28919c8013c0ac727af6acfe6f4ce267098ed967c153c7fec7281d a4962d509d46a820a49fb810e77a35e1c8098b884d7e75a4cbc8241906340512 adbe563a034f945b386d6a57415256c4e6312258b00fb1279e3c69cae994592d
1133500 917c8b09c13690e991b7c881b133c45a44807f66fbad298a380c7270c4895143 5a2627f0d04569122622ad639211acf7a9314d0034e1b45f8dd2058e6792d35d ae5a82a7b2df2017f125f25a28e6a8866cb1fbd768e2a03c4604d9dc7c70475f
1134000 60156f72aa21b858f0cb2e173443fba18ddf9a3a1345ca548ffd9d3278bc03d9 463ce4a3ea346e1bf1bd475cbb015480bec09f46f8429ca41760003c149b7c2a 85c195a267889281a7b4a03305beea7dfff57ad94c1c33eb8fd51886da795bfe
1134500 fb12d064f7194732f32ed8f2a2a7de53ea1a73dfe7a7f9031daa353ed81ecaff 8db7d73911ace26c761f021b18cd0670bc65885047f63eaf02a7b136d9697542 23a12687167ec8ae699df6c1dbb543cc915fbc27cf0544af32e5fc720c1539f0
1135000 e8cdca7a706da7e72d3481d889032df6c9b367e896cb435b090c341db78f872a c17484ddb08956e8a92f7d8b8454ef42d8dca86210198888208d913cdad86276 56b4c227906e56bd07f8ca64dd6560993dd6d44c4b2ae0acee8b2d67d6940f86
1135500 e071fd474ca9124f3acce8a34da0c3da54ba34570813fb2d473de4f83a00c978 a475045ecf13b579c43be5678fcd325aefef54afb65c9fd70f4c205c53b28b91 4155bdec9f7ead07e7e67c41e92843d579ca8cdd87bc58d928510ca3da521ed6
1136000 301ced24976685c5604fb0c5632fcc8060b42a4077c0a2213c7d6618fab10206 cd7b93520dc055aff685b0cd6cf84099a23217d70c382f326af121665b7fa041 9e5abb36e2e7dfd446ba3f558a87928356cab471ea6981963f6b9a7b4e0dacc6
1136500 29cb8c1e61205e0f50cf6a33c9ab5064194f8ee509837a4fd03630d8fbe47c4e f136af606ba628428daf02f03b7bf1195860af32197d8ebc619f2af2eabc58da 28094c0dd898249184610a05766117b1a80ced32bca94512a00f5e62d066f07b
1137000 a5d6dfc5292ec2095d323879c1004c5d0cd9fe24a8d9da46d9cfc997a81696ee 138ebd481cb3d2ba3a8d3516ff77f282212a94e724f22b8c643a5c2f1b4be27b b430d46135be570ccf210c498321fedcd8379479b60221d636136e7aa6ad8004
1137500 3197450712d51c8e4434860aaed5df6856956be1fb454121e1fdba709d2fe40e 466f5128a247f328425eb70da14d1e94a1aedf39ca2f3a47a4ba4630fabe6cdc f757fda6ee6bf2bf4064874a1895b7b1a782773a67775c920add0f42d1384ca9
1138000 6b3469825708a51d51ff35d074b24826b4006f2d03a17d85c160d5527d0ac2de 81e512c4a960ac2c015eee72d526c1006d8d3e76a9045354313374a453b84c4d fffe12c111da7cc6e183007a28cbe897404ffd6e3f2f39fff98f80ba2d64ce69
1138500 8bc75de348dc53012153c4a7bbb4cc46b535321bd2d838ab086ef984172250de 4adc04394383b517181f06bcf7d282c7e417e87fb033a2c6a960902e54617ccb 30350c2afe16ccc2450f0397c1f274fbd604b222eaa89a84d9b91eaee541600d
1139000 84020d9883b277ad87e2f1f25b1cbf4a69974fcba27f53566f9654dff75522db a8362b8552adbc873b556625497fdfec61a2530c5490012b4abeb32a1cb5b14a a5c550247c2e54401bd7bfc218413d8a1341cb5f1386cef23152dce3cca27f36
1139500 9ded14555f8d10456d0d610d57257976026c40f1093b7a2b73db0751fd372fbb 61823f1cffbdfcda10c25599155c7f13680dadbcc8398370c6137ed9cd53bbdf 0801c762d88f5d3cf8de403c93cc7dfd8be134d1028fa30979ea888468474bfd
1140000 fc25a2ef77c1c7f16bc73b8c642d2c665212e53c366029fdaa34201e9d9df72c 86a90eb020592059990975301163f067f4f8da82e8fd54f3340a26b58b2963bc 6cc1d7e664b62275a99613753a738bec9ee15323847af0a7f66ff0d38082d28e
1140500 b5a309dfca7ed54eda6ff5620fdcf83b562599037b0cda262dcd4540b030c18f 3673f48b09a77df28122d68f58a17e2c2a65b4a13779a0ba86eeb76af8afe768 c351f4a5fe0034fe39e774406f2e0b27fa9b3efcfc55de2a8d4bc76a57578dd3
1141000 0a6e1793166e49cf47afc188169fbddcf3db82f5da0133903385589d500c5213 c5bf32512c1a0ab3e7af1b090c4352a24c59682b6d9e1faaf7c69434628a83a7 5efd80052e3c7e7ffc92affa9e291f8137e5515bf01e95057da7eb0c7f441bc5
1141500 9db6657cec478f59f2886f72f9fb3749e04cf199b2ff6b9aad7758a240e1bb31 15aeb06f9511d7be48258fe65619e4253a403d082f1939adeef1d65262520c16 7e1b6d17dc37ee5f2cdd49ceeb689e0258214d6142010b886e4490585479d023
1142000 b9c2b2e3039de930b2a1ac8ffeb960f30d67946bc25ab8bdfaf4c8f8bc06bb9e 5310156a21ab1bfe648e5433ad49343d2684738b05472fc195241bded1f7ef5c a6ee7df606cbc7c6847fc5708e90f5a63fdc780459d634e688ffc36ac0a3429b
1142500 2145d2c0b75c047a079dc107b483c404da4632afa25e37c39e1938b3fa9c4e3d 4fa230a95545c7830c8d1e44fc87850f35ff2909d2e6f1377508f906c9776cbf 2dd9182c4f53478dc4f6bbbb34d8982f2bf098867289eaade77f1dab26eb6f62
1143000 d620ef2353e299c7f748667dffb1adcfc1836f6a515566a06942c1c08fafe6ac f314ebafdc807008276023f603306f1e6666987a1a14c2fca71cbc10114048e0 db6be669508b812e611d801b9ddbe83aaac16104f9f257f5245519ce69219f19
1143500 1d4c446dbe2eea70429c527c6be0ff77bef1137dca59e8bc916dd340410819cd 7e801b9960ea228ad28ef92254c6a5b34488ec7cb4c60ea4dfab16257d075417 bd5c34381a48acb6375e5982fb0e6f39080db92b66ca2471a208b90cdce9e5b8
1144000 a11f1a7543c2806cdd476440d615aa5f961cd01c2bbf0a05ccc6bed89a86aa35 5e70af2c87950e2760e5b0432838422afca1e48ccc2a475c83e9c4a249f62253 335648b6ebf0145e37a2e843e3f180902afd7a78e54d381297931a2261173cf9
1144500 427c2e0f1546121426659a34bf4ae095b704bcaaf9c845e9655ede00480e4380 e3c52560c8d5491c032b970a1ffbb2c1c74cdc4827f7feda821cd606cf727e20 d769b3a1ca2188a6a0c56781cb21c09ab0d9e33dc5dcda6245ea1f8cb691ddfe
1145000 e3145febfc927893aaae986ca6732c2d55ad48eadcacb80f8951203d1643956c b0039030fba664867c196308becf9bb0b6084e0952c1797cd3ff5227be30520e f297d10fed930f10886b34e04ba52ec73e45b3ffe5840fb631fdeb5de74ad448
1145500 a150fa0eba6fcc051ad3ca7f73a6074bdfe74fd3facee8a9db3b72151b501c83 6059febd4d638869ab99957aa42138030341abdb9324504951987a654ba402f5 6cfcf8c239a170a383abf8df2a1a279739ee93532cea449c22386294f5b7060f
1146000 8e6f1981d338c4b9a3df95dcaddd25cf2eb91fb9529b5d16a30553028e8c1f43 9defffce246e53e68571372eb9dfbb2a473d70b83ded09121181d7894b085b8a f0e092d9db5e3e5bd641dc487d810692b3bb73bf9a15791bb6bda9c9d5029f5e
1146500 179f8fd38bcc00de826ed507f71ccd82e3ffd05180056f7d30423945306e7222 239e813eed3a8dd81ffed425e5f1890e770170bba6d810e7875b3487c1369b7f c740195e9d7ac90630588a21e5a4ecca5e93abec4f310b59a353d0cc3a3426d9
1147000 270149ac4b828ae6402c568753871ac5c9ea404aded9ff47ca543ed97a514f97 b8841ab2a2da9b17483f7c21bfd624ecae38d5bcf204f9eb8486bcc381e9d97a abea8281dc544774e498bcd8c49a6333236b28e924016a91e761c30541fb5fd4
1147500 202ec673bd1d6bcd5582e5c6f16f9e58a2a7324b7aab4eeebad8ae7d9df458e0 673de6df4b377ad563ee7303ebc6223d98894da53015806dfb123c25647164a4 7d01b0b78f8de52ccf26c7ceb368dccbc53ece76c1d87c4bf7ee6f5de4a8b63a
1148000 d9802ddba71145e597dc3c1692b4b38e6573dfa5ce250e0df5eeb1b639f5afbb 1a397365203f553d45b8e2934741c34a4243fd42f2afba3df58d66a1b4de07d0 832b674f0cb1e6f69dc99a89524bc659b0708bec49c6af95844e9cc56fc83bfb
1148500 98c224ebb307a70e70be5a6375d7f24492e6cfa0667cbef1b96e3c8f94eb89b7 a4f81ce1d5a9b6e7c8c3f01e450c46b03668166781bc66d90bc06da71468117c af03b89a1393b938c68ced340769567f62d15d0b76dbbccfbfcd6c8865aef6f2
1149000 666c210cd5060d008e4f7cf3513a19511ee5785cd4ba03f56a91314879af3e69 ed011557483e008514a66f064171327cfd06965c1ac9b94580e5d9f93ee7c00f 9a6f674110b1f903d220333bee512cdc08d51f2e24cabdbc4e192f08f62367a5
1149500 d7cfa00f07e2995e32290f675a0b5e66bcff647293843e99f15ad341e9f874cb 4147f48aa175f7058e3248b94bb15051b9077f89f89c829e6261b5806eb0d306 56d3ba1f1a90cf8bf86a5d69117b9d56378c554885bbd54268a193ef5755d998
1150000 846051c51358a3993bd83e0b23613eba6a023b329d35c6105cc3c57e8ac204d1 a17e4b385452287e96d790d8e8d32100c933a8a1fbebeb59231601c2114c70ca df50ea3fdd313b6e4e66a562591cef6ca2219e875ef95db0b6e544bca81c514a
1150500 5c5cc0a581c55bbad2d4751e5a27f21bfe6e1aee9a8f06f50e4010c1a9940069 9491981f50a5e28523ff1819632c71594b9dcee964760f2d430437dc754d1502 b97120c4e1555ff840038a0174c4cdca70acec82763735954ccfe5182cee8b96
1151000 6897a800ac0b8386ae8881c9509f6edfdbc5453925fca05b0a40b7d8ce3b60c8 3c19fd1a810ee36cdf8288cba05bb14454261acc946e8654d1e645d95061d9e9 2e8f5879adcab869dbc04afb8ef8372f9a45bf73a93e797a8799190b17c4e315
1151500 4d5c605d4b3b8f422ce59c2ef3034ac8c4a052067a49540792e643f90a59ecaa 650071c2699ac59248f79ec425687831ceea160ffca218a272380a8c7680403f 9a8c2d20a3c0fb8d02f717a368fafd034ce79cd25f0c81dc9dcf1cb9725424fe
1152000 8578a233da4cfe0ab59adf604b1e95a7bceec3a5883a600f424b58224a042bd2 03c6dbaf11808b647778be55d1d2a58dcb7e86efe098a461f17a6004cae4fd06 7b777269338b83cc45cba5e1cea4b9108281d2666ee63a6b1fdc0653c2276808
1152500 386c937110e5e385e3fd54936a81965136e9f684efbf5d7cd0be0696f62d78da f31e34a9f7d75840b454ecd81a3316dfe3768baf7c03b1ddd24730d67723f0b0 eea3067db670a5720dcf08717acdaae897f7e34ab2f4f8ffa29c0d9195d46c99
1153000 8420338bb4666221a15fe2d84697a330cc98ab958113f64a37c03990bc953daa 0f928fe675bc23ae7c8e30875a8a8b13db012fe515f50651c8b9bdfe4a3271a5 8d5df0dd7d461e7cec4338487b5b5231309f158dc5ec6d81d0d8b10765644bf6
1153500 87efb4e16611a1568cf0319d145c06a9ebf49886be3c9ddf000bc73f8814733a d6afb469f35ac307455a741f92206bc4c5df3333323b4f126036e54335422f1b 9e651274e0c3b21f7256560819810eb358190a2a506de66b00be336f258e8258
1154000 1734ee39a7e0e5976745b577c011bf4101be15f1a8925ce266fbbed0c0227054 090b966bfba292abd873c50349afeb605a310e2b22054cee83f22d82629bc544 0d0948dd0efa0bf4573643646ef01f8b7bde618f2c16a0a364f15d3deaba232b
1154500 e7d65297b923f8f5bda49fbf86bc310ae2908d590737f6c38c7f4b76da9fd09b 4cc6c0d5455807d36774ffdca61ed011323c6e085b0d65901f4dfcd243677c5b eacfbc6f708b20ad2c80049c185921460e7393e09fef177aeac60337029f4c24
1155000 5e158905621b38c082ed28b8033391eb59fa7a0685d30c4d3964ddae6e2698ca b6f6be1dd46efcde85853050e48ac6b165a899939c3d2d43748f4e22d8dd54af e2a24c10f07f1ba2345f96be0980d8735d266353aa10abcd84a24f56b124d676
1155500 87bf1d707cc82d836039acc5b7afb94e4afb39173dff1da7c9737cb12b8a6fd6 16f834dc96d90345161b3eb959a28fb5560fb517148ee7be03c1d9923e854fa2 a01658b15ca91215782370c1da51e0bd83d302a290a31a446858878853b5ce45
1156000 f1c5bd2d3602236bea78ff2e92fe1cf2e8b9e3c4100ab33b70fcc95ddf4300a3 a4e305f26bea67336f1c2402694c191b5c60971bc84e4e3e343de2e6a7297202 71c82798dd11569a3a97935baed28ab9efa0f3dc5d10a403ff59f8c79eca38cc
1156500 4c0a404332dd33ad1632afeea5be131776ba024992db41aeb769a6fa79adf3c0 016370c88e8b822ce9a42283c9566e20773c3c28bc54fc2c5fcf98321c7a8cb3 8ebc886c31d9bbc1b7213d60f5286563fa02ac7dd3fa7b6884a798dcbde08d2d
1157000 7fa41bf4eaa77c953717bb955d2e061be2c773ce2d0f642580ab3881c9fb8673 496a01f8e00657df24ee40637eced09a8f167a48123632b6e01bc369faaab801 449c27eeecff852d5ace0aa8585a627e91b9fb2b06b324858207223f2e802365
1157500 08ea4ad620948c48dc1ec42a06ead6235127cbc35a12deb76a7b3344c3a95477 ec5b6799664ea074557017c2732ac65a965ac0e9e5c83490e8dba5b3e449705f 7e62b333c0b2e31f8266c7ca923e3b49b1969f2fd38005099b016b72fa3fa7f7
1158000 148ab01b3a3be90a479ef0f6f57b58affbb8467027e5c1f5ecd548c8f6aa3c9a 09b4e5eb4069bcf0c39801dc7211ccd0e8aeca612f4180f2e2e9fe073b8fd2e9 3d65dffd115109fef4ced39129c63ca7fe4a175387cba528600359e99d16d3af
1158500 831c15c8c5655cda2c2b481273064dfd5ece80c913e0d1a545609bff92cd4bca da3e6e48da50274c26eaacce26f2e3be2100cfcbc996a3e2d0bab535d7b1ad5a 0d5add586bdd5d39ba3140b64dca56f01be4224f578c30cc590667206e602123
1159000 60e07356ba84702f42a652dadc753caf51cb12a3e868978f2b735d0543b649f1 ca8fff227d6bb6da93af849688c6197a105d6f7dba98bb1d6413f0d527410fae 9ae55b150fd00828a6211359379d2928d6d439f9a8b7ec16e07f0b391cc1917f
1159500 1d53afa49a747c3deb87b45a62a682b0e99957e57c0b33f40b16b08866b4fbaa ec281b3d24746b1430d8764d6a6ccc5001ebfe7db9e4ac9015ea3ac55aae22d0 3d1e4385b3926226298d94f216eda71d0a13524ab7eaf95e0d6af08bf72b553b
1160000 6455fed407287ae515275fbf3363f4642e4b388a3d0a8428bef3a1a6f9dada16 1a77cf13f3877f55c1a4e17506097d102757d35c69fac9eadb16dcc768fcaa81 550d0c9147fbd67b7b9e252e8abd77d4ae003a88ab99b70e6f63c900fe44011e
1160500 01f38d6700634f0da4eb7db3b20bef90d932874631958157f54a813b5b36f88a 09390dd36ac673cad13bc27913a8219d2b24cb4c3a0a773d6aa36b21b4efad3b 195d06ba23cfdb0b94d40e5f1c13cd3c343bf1b3459237ba0e9724a8e92d3bf1
1161000 d7e85737906e1b39a5732d3a7f02791f33f367b92ee2814b502950bdb7c1ac78 6deaee018ba0f8395291060170e6fb999f0d4b22fad5417100f14a911507f036 ede15dc5523ed1503015e47dc9b25bd675dd3f3a51b98925fee35e05de2c9d00
1161500 0e545c48cd0b6e27221c7c0d665c1e2078a4b026b5303d7ef0686fa3ab9916c4 da0f35eabb8fd1bb701c196ba9dec94ff5f3ca958a05c818f1b92ad5b8a047d5 5e141cd592d5e9fe66c4e683b9591815c6b8334d0882ec35cb7b6acc03fdcbbc
1162000 5a60b52bb293b27f5e2a343df501a6bb69b84a88ee16980e514488481a5cef35 ec8a3a0bcc660caa13e8ba069cdc3cfcea705f24acacd57effb94945718b3c4e 0d9ca288997a657014b9d5af3c910698def6b402b236fbf1f076c6d32e55fc2c
1162500 91207c4da535c0ae6e8e346da11a7bd7ead2348b8ab39f49a0413aa61270f667 0f43a683cffa00f3cb64e19f83da801fcaf357f19fa8b2f9f41d560556f9d0d3 59bea909492c4a8af6801aa3492b49871d33386c7b911f3b0925edd8a17e4434
1163000 2837d380c18ffe8caf652039bac366b10af7c162730bdab38bd7f14af0b0632b 7fad18bcf33e557079c606a64f13ff07ecff8c78becf2c90bb02eed566cf20a5 c751822d8d898759e0972022b96db97118eb8c83ea12baa0841cfeaa98a88d9b
1163500 3be2c89e0c3fa2bb82769b31280ef94139be26f03bf14b54c02943430af8817e 701db33812fb1ef3bfd3248b02cc743394b96164f0fc36381606924eafd5dba2 fd3551ea49aba673a693c832329728113fa90cc10694ea00acb6d5d05c400ffa
1164000 a5bfedbec80c9cf269901ea1c524dfb2868172dac1431858eae9949da6b8c67c 616f029ae6acb9c483b65c8e6ee6a52ed51cf80194b176905105bd90f362565d b5a7c96b365c880b46e72889214ec882afb029ce60d4c84473ca509382539b1d
1164500 ec5c0278dc136b23b284bf1ef30d6cab0b24aaaa891207161dae7ce84d032efc 1a6c9c192dcf6eea4ba6f23490560ff723894380a5ab9d21a29aa06a8e2c2cad c58f545f582ec701da23c32da030c5ad5f8cc4eefe43084f9ac23f77f76bc417
1165000 c38c9727e3dd513927d08945a6dec41496e7bd62d03d256e261e8d23ebb5a1a7 387b63592f92337534f373bd895c03e860937750ed5c5698ca878517760914ae f5bec834a0cc7b11a5265f27285ea3f83cd433652c2b6358416eb41cf7fc13c3
1165500 82082236174f8ddb37b88fd105580d79a77924efab3fb2888e05bd7cfa8f0c4d 6d32276470bdd968f35925a2c6b9dce9b27ecbc5a3a8e71bee4b9697c88ab254 2d0a7a3d9b3263acd17b11f2e1d11880abed5a8d5170ccf5cb21e2fc3982a379
1166000 a0fac4b306c379866b4c01b909610b9e7e1f2ca794fb5c590aaa2c83a666effc 4b67f68a8adf5d50d262ceb7a95cd82ebf00065db0ab242f696e0a082b7f8151 fa111449ad59977279759470503b67df2cdbea065862f5d3b6ca61b62a34fe1b
1166500 2c79c6b923aec6eefa4951ed06fac160d02c82caaa0a1c11bd49fd6ff59d8ead ec655e3e7f55442ae0e5282b8f91a6d2a88ee19668e0df9d92eed382eba50069 7e597d5b821b7140cd3c10445409fc1f11b4f209df0b7f394c31d7b7f9f954c8
1167000 f20f0ba0c20fab2a4990bb6d31a736d1f444457af660cdc05d133228e8d15047 2166fd932a979f00318f6616c3c2184055c29c214d49a68454be63731fb380d8 63c980d73fad3a22262d71955940980544682a37c1939e259463faae424f1b6d
1167500 a401abd7e22dd4c5857bbecffbbdb575ef2f3b1cbeaccc1ff90aa3cb7ba4d03e cd245140f4ed7ca46bd7dc30295cce6db884a18f06a644408b3122f53d85eb7b 20c8c957ce0424d4a03c4ce971c2e1bde4732d10fe316b1dcf52e3683ea914fd
1168000 169f9da4c456d381a672847adc804eaaa695bc4c50a4b536ee753bab29ed0224 8fca11c8318d16f1364d2663f6cdaaa47a92d008daa7519846f22a68fbff6d44 e66b572b3c4b692d4c2ac327643cd16fd00a7a4ecb91fa4bd2e97d23030301ec
1168500 54757c8dd834113d79ebeb28a73535972d005c345e33d34d9b9f0d1b5092d71b 3fd4ecda5d6a11063d66ce9a849038ff370c6244d14917ec8c87b2cc3e8e9142 2b9f660ccf344bc479ae9cb412b7f1af7d18e08d585f10d4eb41f77ec366e438
1169000 0408e4fe84a28338f1ac1f36fd6915bcfe05dd3a08ec6c1248c5df58542dff6d bf97ed6cc13fdb2e9817a702a24b264aaf746c67e7a7bf077376dc08ee1ab9dd 1103ca26dab6666385aa27a932c63487da46a44a6c13ee27804a22bb78d9bedf
1169500 e8e952c72e3b1730dcfcc4d73c5c7ca6f64806b1c350cf127e09b05c5e03dffb ccb974938643549c6dbd2eb11bd60cfc7c4a977f88eb2f935ab81f111500dbbe 392391fd3ae91091d658218b2866be420097c4bfaaf209f37aa1961e3e380927
1170000 74283d0f2aad17892d0d4832778bd1f3a55879d8ddbe1314e410bac40f6a6c02 59407452382c4869286b028e35e69940a81ba9c9fff7eb427c0cb4650b18e7fb 25ec2c456054fef281ac033f1160df826f8458a5f7f24be4faf503b6ab9ca070
1170500 038c3e9a4f8af3e1f89208f1e10152279998e4c56c28ee571b64c1b1a2576b11 1c50f607d118aa4bf311d63ea309ac5fd6c023bd73937dfa60ae685684d5d0ca bca5f157ce2ba2f4b2fe57e949e84052ca934dee1d685460e7a207b1ac4f1dcd
1171000 657b4ad8cda15f1fac5b96ee4c78d30d24a202cbff03b05eb42b8a64a9fb3f85 b5ab985da7441c00c83a521cc8191c7b255e45996560aa7b5614c9a85ed10382 441326a82f1c67280dbd7d42d06c41e7f2b131c9b591b7b9f95bee52dc354bb0
1171500 57a6596c7a9b14774681db13f91c27e8d10a2a4a3afb4932bc0e99a352d616b8 a37e46a4e94337bc220479a47c7bcbcc512f9235e06f7cb3ca4af02e2d1784c2 2971d7353bedf68e705796a109ef562fd54215bff4d23e130940de8ff28b2abc
1172000 c8c332595916c25863c065b8164053b7306c9b91280395899646a89ef5c7efb9 79045e4de4c46ea93c7531b2983c6cca978a870f81e69caab499819eed84ff97 1ab7491c615a897bf0e521a4da4b85476a0a578946b53af637d95a25426ba645
1172500 de2a9b82e5b0fed78938dfb45b5d03486a9e8f918bd1d10e9a5dc3a5d2ebd375 ba34eb6149f1c2d4a8fda76bea4c0126d2ffb924554b02d46a7dfa3af7a42a95 8cf00395570c76499738996b0ad071319f08337efef9ba5cad46f908b9b495d0
1173000 ba3a9dccb5269e6c3c3b4372dd5473799a479d5f1bfec6f1495704a031cb7257 a5a363ac0a854dcf3b3d461a01bbcd7c23b527a5ff7b1bd80c2556a39b1611a9 be41baa05f09e1eecb3149a981ea9fc7772546695219c581cd96e3acdd89307d
1173500 6a87a0bcbe00703055e2f8d7e23d699ab348de2af5af0eb3aeb62957a5e634cc 925d9a962bd2f3ba4fbb524d3e783d0d88c7e44097b2ee2e224459b80710367e 5bcc28481baf168220c48e01d8a015d469bef8060d58ebc3eed690da7f271a72
1174000 f27b5113e31f85ad0f85e24fde10a7828ef3e8e841b6d52cfed03aff2a91eec1 6bb6b3720c1f4b5117c00fcf6a3fdfc39e8dbefa10ab076a7ae984564f4ee7a1 481d1cd64f14bb93f23db0109d6fe828a568896018615b04af18d5659600c756
1174500 689dacdea09e8fa04512de546a254b5fb31bda1d56480e88953538cdc1083659 053455a8fd5470902eb339674c47ba7210306bce1ea0e8a513fc1c5f2b00b34f c7036d82e4b1e8ad57f773059a1e117a0b1d438ffbc8075385409a36c275b52d
1175000 8dfe4fa221cae2226902551cbffabbe18c43064b94dd4467ed086ec8a8d89e4d c3e19a94c95ee409ef63067af77d24f5c2f735162b5db991eaac5fbb15880214 d409da21e3de08775ba5958543bc10b1a2faf2e414438419c618e3781b79c2f5
1175500 8911e671880ba1ebe793cbb19058778ca53caf6bda9cbc91b95f4814268d7cd0 7b9c386e2b97caebd5b7e3fbdf6a1f38cdeef152f40ff7349f4c45dcd2617e96 2a487a17738ba746ee0af68c61583275efee71756a37128357e43ef51c0c2b81
1176000 1fd913c3319e09ede8cf2a61a1e91efed1d7726e7f46a5f17e7a726a7c2fea5b d17a1abacbaa6734cdf2728ee47e79142fb7ed4a707b333bb9810ec459170c6b 50ccfc31535da45eaaec6dcccd6159d3510e5df67795c59a408cb5201439bcb4
1176500 a11bd9a24a4ad6d13027b77ed5c7294d91ef927de9fa991efc7e1bef6f633f20 a70b10a3e84e60f705faaf2e604a983afae005fe53e55a66f747ff47bece72f7 c096ba0d51513cb221e53105461803f0a69fe4d0dbe84970eae8204e41008238
1177000 6ffa6c3fdfebe30cf1a7e8ef456d706423ca7370d250108a345c921a43f6d361 e96c39acf261f3f79139e4cae812888ca292b61de0f49a6f14f724458ce941a8 0d27963c7629d5e24f8848666af214eb3753764fb839bd5b3b18b6d5c9f4b4f7
1177500 21944d33335de6e7be3eab1afed00a8840ed09059769a4cc8c95ada2b739bac7 d88e2a0c9645654dfb23354a9f0f90e41735a796e184a969ee32f38e0761f0b6 bb28cb1b9f1156ec25ba4346c69f25bb4a1a30f230199fe560394344a08ff569
1178000 8766dd180ff2d647439a5cbad9b1f79ab7e85c6c9fd748eca22f707a7544985e e250fc2eef43908fd12d91b90828486f99db25f9fa749deed0b9959c3554f667 eef4af40225d005aefb2d36e2d6b6375b78ddbc16712d82598e2e4ed351c41f9
1178500 0bfe9b952084a9906d48fc53724099d6bc735bed7b327ef362f32eebe8c59b08 4053aa9f0b929b2d3f7475fda64edbfa8a5567c3280fe8979da8cddb43e194fc acb4f384b6d271f82cd521ba1753b687b27aced918d9e5c37e4a0a2cfd91a226
1179000 9052cbdd7759a7dc740c100cfbf1f599192393b4dd166177eab203eef214fd5e a64cb29918db51c90ffca1e590956df66a3b47eead5018e56b6f894376d0f1fd 583a6a580f3062017f6a7ef8b0a51fe13b2f40659101a4bb3bd4cc3ef79c327c
1179500 2d24b0b8f56ac3c5d7016923fcbb74c9a7f2bc5cae1302edcb2a02c9ead8e285 1e8ef0170644ce900729fbf779c85a9f7c4e41913f38bedc655968799c0ec061 843a1a3ac0fb093a840dd998812c3ae7e2bd420f8e10dca85e7b153a2c99f390
1180000 5d7b2c7e019293bf5b7f4c5339aec0ce4e22fe103cb50213e8e7d3f4da3b29c7 10773667c0417cb9c8fb7028d932e840525495a92f5f0872ab2270f4dcf4c4d0 5cf1307b81e3621a6df541defdb59171a59c04a70662ad0423a8549204447215
1180500 192f605fc1077bfff7cf2c321b49948c1047dfae2e0075785af9ac544f92f694 00007009dd28ce5b73abc87ffcf7a0b893273d21f0fee75e9c0806c7a8c03279 6f937e16a2bdecea77d6824aa2e0c94b6748c876077a6f5b8903f60f4e08892c
1181000 1a374e98af0b8e62c01dd4f38fe2db26a78f29a850c81bff299b5b2b36a2c1e8 1fcaf382ebd711e568b7c74da96d6af9155a7db2480d209272b97a0895ea2135 c1862a830fe189293718009b7d9be0f1c68937306aad6bb8461454ae426bc875
1181500 26bdca057d861936576e6b74a4d152c8765986d87bc449cc90dbcbcbcc9a6f5d ddd1296eecfed70ca8da34a5842984a1839fd9dabccc570a7efb1ca282eaf76b d6eb9dfef771a4155e878e6c822d4530fdf1bb31b128334e050776427dc740d2
1182000 5818285e1deba2ad0092c2296332d3f87d8d32706f23c279b91f88d5da624cde 9b6f0d5ce5a1572d44ed11029ae3eaebb31c089e8368395fcf87e3fd7fdbda0c f7ae4edf69cfcf1d2c91ee9fa4794e005e7a77110b8c1d25d56420088a3a96dd
1182500 3cc479687fa03c61af76c9529c4a59980cbe72800d208470868ac6c213bbb901 def26e4190f2ecfb57068e1018c29d229418d811db11f402c03be4b42b47029b 603f78ce5ea7ab32b6bf1b14097610f4b9715db5795ce1e14030dc9f54aa3374
1183000 d382fc4f1bee42dbebc5cea14116c3c5ae49134e7aaca0b7984665e383408a42 74992b46fc95fa3cd83a7f8a3f04ae118a65423ad1223e4132e5ef989a347adb a94cfde8c01f50523ff4e224def5e62d484efa688d66d55119eb3dbd5760242e
1183500 c94fa0eca5eb2cd5e49cfc3c3b6455c0c7c1dabd3159be6d8b31964d660c436d 2ff08791feacbc4f71de50eedd199a13d0cba2f1a1979d09ec4ea3fd0e1f712c 219d8c0e4f4cf92a91cf10261885b1e6a131e94e8209de60e451330f4503c243
1184000 55d6b513e8ea740820706c608a1300a2e11537e85927e3db322372cbc2f15b4c 41a0a526c959d3bfe37d878a1946926b8d4ea7779d935f28b14e177f4ed7501e e26accfad135a91eb5f5aa1e5727d54f69f3bf53664a4de6e095ec1b9bff3791
1184500 ead2b73eafbd44710fa0f467b27005643fbafa61ba9006a52b743fef01a4a248 ce3e80f0249ae41473c922571e0488232d099aa1d14deb15d3556fc848f161fa 18875885f1b9f0f9542b1dd0f1c810af88d717192d957d98542382ac0cf8f0f6
1185000 117e43c2e1bb661a94b1693a5e65abb4c967d23d98d107b6467dc12acb8121f9 11ca26896eec8e59ce0f1a4c3cfc2a056d0b29a8320b1d2be9de3c52fe562fdb 39ec38423110a8e3c345c857bccff9993f90dbd81fe704e9cd0af5b51d71516b
1185500 edc207e4f6cd8df599cd92763399d54312c087d869b988e58acb2a7c7697c9b6 8847987eed302ffdc582ddb25eb1dd0312a460bad2cb2937f550924250ba4245 40f4125eda5a9b597f2cbbafafb4f2c811147bc21118deb44eb82119fb11c50b
1186000 636a1e6cc5e6cd0b8d6962a6938a5c4210b18abbad4b387db2991f19e51913bf 44f3ce5be9b1959478b1cd4b950ab6f484f8a7bea84d929dbb449b09e7a70d77 12a3037a891e443b6de0297c7824648db30905aa82ef27d068c93dbe52087d13
1186500 93ecc2ed75e31e0c625547a64ed9a28410b1ee36180fed190526ee1c3159154a bc65d5313633caa319e00e6b89d3b6da03a7bf145b0610abae9b57ca29d49820 2989f9e7826c7181c3f038f4bbf4be3977c8fdf6fd5b213d987ee8efadefb31a
1187000 73a13946820126396821e45e4aba3c6bd00385dd868dfc231879a9f289e432d8 70cd2d89d96f32832b303fb5b524987669d4f1d42f980045fba023149250ce9a 520340c83c1a0103c5dc14589a81434be1e5019483d93dd3051d9f6f2bcd44cf
1187500 1275b7e74b6e09e17624d97233c8b020249f3dc83e46959ac2644dac308b214c 647ae3418ee33df97745e1b0bbf4988e5d185693c4f4e88d0f5331fdfd27f4e9 1f32a375bd1887fc7d103f840e73f8404fd58f42617c8f99cf7b694dcb7c2396
1188000 939fe50612a46a4bd71bc908c29e6a06969e60f2e09fc9f43c71c983d5ee6d0c 973e51ee6dcc5d468d9cc41af7be8c5b96e4e6b8febd4e88fa709668648170e5 43004f78454ee7af5f1b8473ac84e7a55345e36135e11af5c110571ef5c68c4e
1188500 aeebacfada3a01155a21cc412216669133e574ca1609bf2bef4d304b1d398ef5 87af14122b8c7611986d70fcc5e7d5fb399a3f189acf0a9267f8305cd614e4df 06eb034f9432dc5659b535d58acb896931cd67b75795dd71fe19f7cbb76463ab
1189000 a199ae235f847a54e560fc871b1f31b157aefdd9676ce85f6441699d9d7b4d4d e0dbc15129d6054aa604b2273f5282d41ae17997471f7b1778cdb62ab6830d0d c5049c19edcdddb7928c54cf2e596f2b4c1a0eb465ceb038654af7405ad5705b
1189500 15faeeb18f50d9834a21bf6bc87337313c3023f9e97e57b2b872bb11093e5e44 7f0817693d1f896b2dfe3e3f8cb01d1d785c0c1cfb0d600809f9a34efcc98029 61d9a31baaacc0b2aeba6aa463aa129bdbd39b584f13a5580d31018240117f53
1190000 4c3d4c5804bd332f5432bbc684638c1a9619e01f466011d5edfb0e8c6fddc2f3 9986bbf517e907075faf988942183d7f0c69847453c7f88d16384ea57235d729 74378c41b1c4f6040624b76a5e00603173ced294d606b35dbb8bfe9749131902
1190500 a9c111f86338a7fdc31517a1d3937d58f06f1c8d017f10ac32f9d3d11ad1c325 8cb224499e2baa13802cb52756b23d91f15b4077f5deae46dc2a03387cbd6a46 f0c378d94008c2fe87acadc5a6c2a4ea5a674a5c23332349a639adbb7adf22df
1191000 3b267b1a605a610a6ec582c24a74a48f86742d49663aa610e95bcbab88c39e2e 2c119f6ba59bbecdea8be203ee12c602a48e164c4e04a548ef2a697df3bf5a33 9794cdd7dfcd809d929426c4bb8c7781bb842526e03bdc7a373b19cca8a9c101
1191500 f6b4170e43bce232de89a23cea7990b8ceb252c3409ff6ff8dd7e60bf0374e54 b28fb17ac22be6b22650067508d40f76dd45874c54d338c6f899c847f96b964d ff0ce6f473283198dda442332f1f89f410da5cb95386fa4af537092c70f4f9d5
1192000 dc2735b845593d0491eb7da24396d4502afe30f971df0846bafc4033ab279b74 a09cba4c0ca978cdd91ef0bd389cda7fc149bea4584c3bf6d2ad8b0fb42d9f67 59590ceb37aad4b20901455b57109307a7ebe2cde59cf38b65a84bbbfe474ea9
1192500 ca874ec4839b67b9fc271df0d6a94ded0c215227eed274fafe76fda87c7a1cb2 b8d910bf6c4848fc997c4395d74dc4697d9acb51c5bec82ce89be2e2d6d3007f 2b05102ef1e2044bcd33e2091bbe5a103422af759f386f69e562880122efbc42
1193000 e39828d1f3b1ea228b77858aec3499a61fc0c38fcfbde90abc691094cb4a5cba 7194b64a38f2201cfe792e77a476a441a644adb9cc150c71b6774121f56cfc36 55d733c0425b71ec8a816cba6181e37f86b5e99fa9686fe4fdb9ed4732ab53e3
1193500 f60bafc979d3bab8617315835699a3b3cd076fe21b020b1f180a51171a39281f 1517a86f5af92008fdb2a3eba9ebeb43f4e10f0159ed8f6da8a0322d38b5b716 0786f05e09539d3e834f11df611dde2149a526a21a8fe6f4048f8eaadd655ea2
1194000 e1a3ecfe4dbf8f7872cd7e1520dcdd61e85008d8e5ed2c8ed4f3d2a78c3a2688 cc95645c91f1cb8570ffb26c7004574bb7dfdb871ea11641c8dbdb3aea81fcf1 47df81a73a940195968e78cb2d376c59e00cad21074732a6f17ce5633988ea99
1194500 a96cd5f1088624b66f4cfc79af7b645a0bfdd67131d61f7cbf18b3b89a493e81 8ac98e05aeca7a4d484208ff256923aab0a94a0776cf59f3ab22ac49f5a153e6 4f63940b20dd45dbde43cd9effd174fe8d1b58d6c18d4671cd26366f2fc572b2
1195000 743ff73d991949f4943313a570302b813c1a783fc7ef4808194ba95a5d0f342f cd294af7b1de400f09820a2d0d430745205466d9ddc183b8271b40542108805f 4ce13e06e2291df5f3487a6b471c26b0eb994bcefe6d3bae889e88b786e32c32
1195500 c224c284a418e9c6170393789ce17221b65b2cb4d01d78bab846023b01337c1c b2e46eb9bf71fbd3559c99029d84df9410d8ee1541662ba79303029dd46189da 6f9b3fdfcab00fc669b96bb50858ba0c41fa7922f7407da5e9683dd3adbe216e
1196000 4f5e727fd3c0c4316ede3129db86b088a9fb077fe6eb3ec9ad84f40e89ddebf0 cc941087965fca35754518a5d3eb21be92bb38882150dab8476b47cb95ac5241 274de1abc69b95db66bb8e1d0fab6cda37df4a00cb676496c08c8751e1e6b86e
1196500 8d8c392d670e068ed6621469c7a4adefabf064424208671109d94edfb0f2e203

13
iguana/exchanges/bitcoin.c

@ -31,21 +31,20 @@ int32_t bitcoin_addr2rmd160(uint8_t *addrtypep,uint8_t rmd160[20],char *coinaddr
if ( (len= bitcoin_base58decode(buf,coinaddr)) >= 4 )
{
// validate with trailing hash, then remove hash
hash = bits256_doublesha256(0,buf,len - 4);
hash = bits256_doublesha256(0,buf,21);
*addrtypep = *buf;
memcpy(rmd160,buf+1,20);
if ( (buf[len - 4]&0xff) == hash.bytes[31] && (buf[len - 3]&0xff) == hash.bytes[30] &&(buf[len - 2]&0xff) == hash.bytes[29] &&(buf[len - 1]&0xff) == hash.bytes[28] )
if ( (buf[21]&0xff) == hash.bytes[31] && (buf[22]&0xff) == hash.bytes[30] &&(buf[23]&0xff) == hash.bytes[29] && (buf[24]&0xff) == hash.bytes[28] )
{
//printf("coinaddr.(%s) valid checksum addrtype.%02x\n",coinaddr,*addrtypep);
return(20);
}
else
{
//char hexaddr[64];
//btc_convaddr(hexaddr,coinaddr);
//for (i=0; i<len; i++)
// printf("%02x ",buf[i]);
char str[65]; printf("\nhex checkhash.(%s) len.%d mismatch %02x %02x %02x %02x vs %02x %02x %02x %02x (%s)\n",coinaddr,len,buf[len - 4]&0xff,buf[len - 3]&0xff,buf[len - 2]&0xff,buf[len - 1]&0xff,hash.bytes[31],hash.bytes[30],hash.bytes[29],hash.bytes[28],bits256_str(str,hash));
int32_t i;
for (i=0; i<len; i++)
printf("%02x ",buf[i]);
char str[65]; printf("\nhex checkhash.(%s) len.%d mismatch %02x %02x %02x %02x vs %02x %02x %02x %02x (%s)\n",coinaddr,len,buf[21]&0xff,buf[22]&0xff,buf[23]&0xff,buf[24]&0xff,hash.bytes[31],hash.bytes[30],hash.bytes[29],hash.bytes[28],bits256_str(str,hash));
}
}
return(0);

22
iguana/iguana777.c

@ -145,7 +145,8 @@ int32_t iguana_peermetrics(struct supernet_info *myinfo,struct iguana_info *coin
addr = &coin->peers->active[i];
if ( addr->usock < 0 || addr->dead != 0 || addr->ready == 0 || addr->ipbits == 0 )
continue;
addr->pendblocks = 0;
addr->pendblocks >>= 1;
addr->pendhdrs >>= 1;
if ( addr->recvblocks > coin->peers->mostreceived )
coin->peers->mostreceived = addr->recvblocks;
//printf("[%.0f %.0f] ",addr->recvblocks,addr->recvtotal);
@ -450,6 +451,8 @@ void iguana_update_balances(struct iguana_info *coin)
int32_t iguana_utxogen(struct supernet_info *myinfo,struct iguana_info *coin,int32_t helperid,int32_t convertflag)
{
int32_t hdrsi,n,i,max,incr,num = 0; struct iguana_bundle *bp;
if ( helperid != 0 )
return(0);
if ( coin->spendvectorsaved > 1 )
{
printf("skip utxogen as spendvectorsaved.%u\n",coin->spendvectorsaved);
@ -469,7 +472,7 @@ int32_t iguana_utxogen(struct supernet_info *myinfo,struct iguana_info *coin,int
}
while ( (n= iguana_utxofinished(coin)) < max )
{
//printf("helperid.%d utxofinished.%d vs %d\n",helperid,n,max);
printf("helperid.%d utxofinished.%d vs %d\n",helperid,n,max);
sleep(IGUANA_NUMHELPERS+3);
}
if ( helperid < incr )
@ -490,7 +493,7 @@ int32_t iguana_utxogen(struct supernet_info *myinfo,struct iguana_info *coin,int
for (i=0; i<max; i++)
if ( (bp= coin->bundles[i]) != 0 )
{
//iguana_volatilespurge(coin,&bp->ramchain);
iguana_volatilespurge(coin,&bp->ramchain);
iguana_volatilesmap(coin,&bp->ramchain);
}
}
@ -558,7 +561,7 @@ void iguana_helper(void *arg)
{
flag = 0;
//iguana_jsonQ(); cant do this here
allcurrent = 2;
allcurrent = 1;
polltimeout = 100;
//portable_mutex_lock(&myinfo->allcoins_mutex);
HASH_ITER(hh,myinfo->allcoins,coin,tmp)
@ -731,7 +734,16 @@ void iguana_coinloop(void *arg)
//if ( coin->longestchain+10000 > coin->blocks.maxbits )
// iguana_recvalloc(coin,coin->longestchain + 100000);
if ( coin->RELAYNODE != 0 || coin->VALIDATENODE != 0 || coin->MAXPEERS == 1 )
{
flag += iguana_processrecv(myinfo,coin);
if ( coin->RTheight > 0 && coin->RTheight > coin->chain->bundlesize )
{
int32_t hdrsi,nonz,errs; struct iguana_pkhash *refP; struct iguana_bundle *bp;
hdrsi = (coin->RTheight / coin->chain->bundlesize) - 1;
if ( (bp= coin->bundles[hdrsi]) != 0 && bp->weights == 0 )
bp->weights = iguana_PoS_weights(myinfo,coin,&refP,&bp->supply,&bp->numweights,&nonz,&errs,bp->bundleheight);
}
}
iguana_jsonQ();
}
coin->idletime = (uint32_t)time(NULL);
@ -851,7 +863,7 @@ struct iguana_info *iguana_setcoin(char *symbol,void *launched,int32_t maxpeers,
strcpy(coin->name,"illegalcoin");
coin->symbol[0] = 0;
return(0);
}
}
if ( jobj(json,"RELAY") != 0 )
coin->RELAYNODE = juint(json,"RELAY");
else coin->RELAYNODE = (strcmp(coin->symbol,"BTCD") == 0);

16
iguana/iguana_bundles.c

@ -390,13 +390,15 @@ struct iguana_txid *iguana_bundletx(struct iguana_info *coin,struct iguana_bundl
{
static const bits256 zero;
int32_t hdrsi,iter; struct iguana_txid *T; int64_t Toffset; char fname[1024]; FILE *fp; struct iguana_ramchaindata rdata,*rptr;
portable_mutex_lock(&coin->special_mutex);
if ( (rptr= bp->ramchain.H.data) != 0 || (bp == coin->current && (rptr= coin->RTramchain.H.data) != 0) )
{
//T = (void *)(long)((long)rptr + (long)rptr->Toffset);
T = RAMCHAIN_PTR(rptr,Toffset);
*tx = T[txidind];
portable_mutex_unlock(&coin->special_mutex);
return(tx);
}
portable_mutex_unlock(&coin->special_mutex);
printf("bundletx without ramchain\n");
for (iter=0; iter<2; iter++)
{
@ -1020,6 +1022,8 @@ int32_t iguana_bundlefinalize(struct supernet_info *myinfo,struct iguana_info *c
{
fprintf(stderr,"emitQ done coin.%p bp.[%d] ht.%d error\n",coin,bp->hdrsi,bp->bundleheight);
bp->emitfinish = 0;
coin->emitbusy--;
return(0);
}
coin->emitbusy--;
}
@ -1066,8 +1070,10 @@ int32_t iguana_bundleiters(struct supernet_info *myinfo,struct iguana_info *coin
else if ( bp->emitfinish == 0 && bp->numsaved >= bp->n )
{
if ( coin->virtualchain != 0 || iguana_bundlefinalize(myinfo,coin,bp,mem,memB) > 0 )
{
printf("bundlefinalized done.[%d]\n",bp->hdrsi);
return(0);
//else printf("bundlefinalize not done.[%d]\n",bp->hdrsi);
}
retval = 1;
}
else if ( bp->hdrsi == starti || (bp->hdrsi >= starti && bp->hdrsi <= starti+range) )
@ -1079,7 +1085,11 @@ int32_t iguana_bundleiters(struct supernet_info *myinfo,struct iguana_info *coin
} else bp->nexttime += 3;
if ( bp->emitfinish <= 1 )
iguana_bundleQ(coin,bp,1000);
else bp->queued = 0;
else
{
//printf("[%d] not queued\n",bp->hdrsi);
bp->queued = 0;
}
return(retval);
}

21
iguana/iguana_chains.c

@ -36,6 +36,7 @@ static struct iguana_chain Chains[] =
"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
18333,18334,0,
},*/
// curl --data '{"jsonrpc": "2.0", "method": "get_order_book", "params": [], "id": 1}' http://127.0.0.1:8090/rpc
//[CHAIN_BITCOIN] =
{
//CHAIN_BITCOIN,
@ -291,7 +292,9 @@ void iguana_chainparms(struct iguana_chain *chain,cJSON *argjson)
if ( strcmp(chain->symbol,"NXT") != 0 )
{
if ( strcmp(chain->symbol,"BTCD") == 0 )
chain->pubtype = 60, chain->p2shtype = 85;
chain->pubtype = 60, chain->p2shtype = 85, chain->portp2p = 14631, chain->rpcport = 14632;
else if ( strcmp(chain->symbol,"BTC") == 0 )
chain->pubtype = 0, chain->p2shtype = 5, chain->portp2p = 8333, chain->rpcport = 8332;
else chain->do_opreturn = juint(argjson,"do_opreturn");
if ( (chain->minoutput= j64bits(argjson,"minoutput")) == 0 )
chain->minoutput = 10000;
@ -323,6 +326,20 @@ void iguana_chainparms(struct iguana_chain *chain,cJSON *argjson)
if ( chain->portp2p != 0 )
chain->rpcport = chain->portp2p-1;
}
if ( chain->portp2p == 0 )
{
if ( strcmp("BTC",chain->symbol) == 0 )
chain->portp2p = 8333;
else if ( strcmp("BTCD",chain->symbol) == 0 )
chain->portp2p = 14631;
}
if ( chain->rpcport == 0 )
{
if ( strcmp("BTC",chain->symbol) == 0 )
chain->rpcport = 8332;
else if ( strcmp("BTCD",chain->symbol) == 0 )
chain->rpcport = 14632;
}
chain->zcash = juint(argjson,"zcash");
if ( (chain->normal_txversion= juint(argjson,"normal_txversion")) == 0 )
chain->normal_txversion = IGUANA_NORMAL_TXVERSION;
@ -429,7 +446,7 @@ void iguana_chainparms(struct iguana_chain *chain,cJSON *argjson)
}
}
sprintf(chain->messagemagic,"%s Signed Message:\n",chain->name);
printf("COIN.%s serverport.(%s) userpass.(%s) RPCport.%u magic.%08x\n",chain->symbol,chain->serverport,chain->userpass,chain->rpcport,*(uint32_t *)chain->netmagic);
printf("COIN.%s serverport.(%s) userpass.(%s) RPCport.%u P2P.%u magic.%08x\n",chain->symbol,chain->serverport,chain->userpass,chain->rpcport,chain->portp2p,*(uint32_t *)chain->netmagic);
}
}

1
iguana/iguana_init.c

@ -73,6 +73,7 @@ void iguana_initcoin(struct iguana_info *coin,cJSON *argjson)
usleep(1);
coin->startutc++;
printf("start.%u\n",coin->startutc);
portable_mutex_init(&coin->special_mutex);
coin->startmillis = OS_milliseconds(), coin->starttime = tai_now();
coin->avetime = 1 * 100;
//coin->R.maxrecvbundles = IGUANA_INITIALBUNDLES;

4
iguana/iguana_json.c

@ -480,8 +480,8 @@ char *SuperNET_htmlstr(char *fname,char *htmlstr,int32_t maxsize,char *agentstr)
int32_t i,n,len,size = 0; long filesize; cJSON *helpjson,*item,*array; char *str; FILE *fp = 0;
htmlstr[0] = 0;
pretty_forms(fname,agentstr,"html");
printf("autocreate %s\n","_API.md");
pretty_forms("_API.md",0,"md");
printf("autocreate %s\n","autoAPI.md");
pretty_forms("autoAPI.md",0,"md");
return(OS_filestr(&filesize,"index7778.html"));
sprintf(htmlstr,"<!DOCTYPE HTML><html> <head><title>SuperUGLY GUI></title></head> <body> ");
size = (int32_t)strlen(htmlstr);

18
iguana/iguana_msg.c

@ -575,12 +575,20 @@ int32_t iguana_rwjoinsplit(int32_t rwflag,uint8_t *serialized,struct iguana_msgj
int32_t iguana_rwtx(uint8_t zcash,int32_t rwflag,struct OS_memspace *mem,uint8_t *serialized,struct iguana_msgtx *msg,int32_t maxsize,bits256 *txidp,int32_t hastimestamp,int32_t isvpncoin)
{
int32_t i,len = 0; uint8_t *txstart = serialized; char txidstr[65];
if ( maxsize < sizeof(msg->version) )
return(-1);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg->version),&msg->version);
if ( hastimestamp != 0 )
{
if ( maxsize-len < sizeof(msg->timestamp) )
return(-1);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg->timestamp),&msg->timestamp);
}
len += iguana_rwvarint32(rwflag,&serialized[len],&msg->tx_in);
if ( rwflag == 0 )
msg->vins = iguana_memalloc(mem,msg->tx_in * sizeof(*msg->vins),1);
if ( maxsize-len <= 0 )
return(-1);
for (i=0; i<msg->tx_in; i++)
{
len += iguana_rwvin(rwflag,mem,&serialized[len],&msg->vins[i]);
@ -591,7 +599,7 @@ int32_t iguana_rwtx(uint8_t zcash,int32_t rwflag,struct OS_memspace *mem,uint8_t
}
}
len += iguana_rwvarint32(rwflag,&serialized[len],&msg->tx_out);
//printf("numvouts.%d ",msg->tx_out);
//printf("numvouts.%d ",msg->tx_out);
if ( rwflag == 0 )
msg->vouts = iguana_memalloc(mem,msg->tx_out * sizeof(*msg->vouts),1);
for (i=0; i<msg->tx_out; i++)
@ -686,17 +694,17 @@ int32_t iguana_gentxarray(struct iguana_info *coin,struct OS_memspace *mem,struc
tx = iguana_memalloc(mem,msg.txn_count*sizeof(*tx),1);
for (i=0; i<msg.txn_count; i++)
{
if ( len > recvlen )
if ( len+32 > recvlen )
{
printf("gentxarrayB error len.%d > recvlen.%d\n",len,recvlen);
break;
return(-1);
}
if ( (n= iguana_rwtx(coin->chain->zcash,0,mem,&data[len],&tx[i],recvlen - len,&tx[i].txid,coin->chain->isPoS,strcmp(coin->symbol,"VPN")==0)) < 0 )
{
for (i=0; i<recvlen-hdrlen; i++)
printf("%02x",data[hdrlen+i]);
printf(" <- gentxarrayC error i.%d len.%d > recvlen.%d, n.%d hdrlen.%d\n",i,len,recvlen,n,hdrlen);
break;
return(-1);
}
numvouts += tx[i].tx_out;
numvins += tx[i].tx_in;
@ -835,7 +843,7 @@ int32_t iguana_msgparser(struct iguana_info *coin,struct iguana_peer *addr,struc
retval = 0;
if ( (ishost= (strcmp(H->command,"getblocks") == 0)) || strcmp(H->command,"block") == 0 )
{
if ( addr != 0 )
if ( addr != 0 && rawmem->ptr != 0 )
{
struct iguana_txblock txdata;
iguana_memreset(rawmem), iguana_memreset(txmem);

2
iguana/iguana_payments.c

@ -527,7 +527,7 @@ STRING_ARG(bitcoinrpc,submitblock,rawbytes)
return(jprint(retjson,1));
}
ZERO_ARGS(bitcoinrpc,makekeypair)
ZERO_ARGS(iguana,makekeypair)
{
if ( remoteaddr != 0 )
return(clonestr("{\"error\":\"no remote\"}"));

13
iguana/iguana_peers.c

@ -740,7 +740,7 @@ void iguana_startconnection(void *arg)
coin->peers->ranked[0] = addr;
} else n = 0;
iguana_iAconnected(coin,addr);
//printf("%s.PEER CONNECTED.%d:%d of max.%d! %s:%d usock.%d\n",coin->symbol,coin->peers->numconnected,n,coin->MAXPEERS,addr->ipaddr,coin->chain->portp2p,addr->usock);
printf("%s.PEER CONNECTED.%d:%d of max.%d! %s:%d usock.%d\n",coin->symbol,coin->peers->numconnected,n,coin->MAXPEERS,addr->ipaddr,coin->chain->portp2p,addr->usock);
#ifdef IGUANA_DEDICATED_THREADS
//iguana_launch("recv",iguana_dedicatedrecv,addr,IGUANA_RECVTHREAD);
iguana_dedicatedloop(SuperNET_MYINFO(0),coin,addr);
@ -1279,10 +1279,13 @@ void iguana_dedicatedloop(struct supernet_info *myinfo,struct iguana_info *coin,
}
}
//printf(">>>>>>>>>>>>>> finish %s dedicatedloop.%s\n",coin->symbol,addr->ipaddr);
if ( addr->vinsfp != 0 )
fclose(addr->vinsfp), addr->vinsfp = 0;
if ( addr->voutsfp != 0 )
fclose(addr->voutsfp), addr->voutsfp = 0;
if ( 0 )
{
if ( addr->vinsfp != 0 )
fclose(addr->vinsfp), addr->vinsfp = 0;
if ( addr->voutsfp != 0 )
fclose(addr->voutsfp), addr->voutsfp = 0;
}
iguana_iAkill(coin,addr,addr->dead != 0);
myfree(buf,bufsize);
if ( addr->filehash2 != 0 )

2
iguana/iguana_ramchain.c

@ -1863,7 +1863,7 @@ long iguana_ramchain_data(struct iguana_info *coin,struct iguana_peer *addr,stru
if ( bits256_cmp(merkle_root,origtxdata->zblock.RO.merkle_root) != 0 )
{
char str[65],str2[65];
printf(">>>>>>>>>> merkle mismatch.[%d] calc.(%s) vs (%s)\n",txn_count,bits256_str(str,merkle_root),bits256_str(str2,origtxdata->zblock.RO.merkle_root));
printf(">>>>>>>>>> %s merkle mismatch.[%d] calc.(%s) vs (%s)\n",coin->symbol,txn_count,bits256_str(str,merkle_root),bits256_str(str2,origtxdata->zblock.RO.merkle_root));
origtxdata->zblock.RO.recvlen = 0;
origtxdata->zblock.issued = 0;
return(-1);

4
iguana/iguana_realtime.c

@ -273,11 +273,11 @@ int32_t iguana_realtime_update(struct supernet_info *myinfo,struct iguana_info *
//char str[65]; printf("check longest.%d RTheight.%d hwm.%d %s %p\n",coin->longestchain,coin->RTheight,coin->blocks.hwmchain.height,bits256_str(str,bp->hashes[0]),block);
if ( bits256_cmp(coin->RThash1,bp->hashes[1]) != 0 )
coin->RThash1 = bp->hashes[1];
bp->lastRT = (uint32_t)time(NULL);
//bp->lastRT = (uint32_t)time(NULL);
if ( coin->peers != 0 && coin->RTheight <= coin->longestchain-offset && coin->peers->numranked > 0 && time(NULL) > coin->RThdrstime+6 )
{
iguana_RThdrs(coin,bp,coin->peers->numranked);
coin->RThdrstime = bp->lastRT;
coin->RThdrstime = (uint32_t)time(NULL);
}
bp->lastRT = (uint32_t)time(NULL);
iguana_RTramchainalloc("RTbundle",coin,bp);

6
iguana/iguana_recv.c

@ -1652,7 +1652,7 @@ int32_t iguana_processrecv(struct supernet_info *myinfo,struct iguana_info *coin
flag += iguana_processrecvQ(coin,&newhwm);
//printf("reqhdrs\n");
flag += iguana_reqhdrs(coin);
if ( coin->spendvectorsaved > 1 )
//if ( coin->spendvectorsaved > 1 )
{
if ( time(NULL) > coin->laststats+5 )
{
@ -1663,11 +1663,11 @@ int32_t iguana_processrecv(struct supernet_info *myinfo,struct iguana_info *coin
coin->laststats = (uint32_t)time(NULL);
}
}
else
/*else
{
flag += iguana_reqblocks(coin);
iguana_bundlestats(coin,str,IGUANA_DEFAULTLAG);
}
}*/
if ( time(NULL) > coin->spendvectorsaved )
{
for (i=0; i<coin->chain->bundlesize; i++)

7
iguana/iguana_spendvectors.c

@ -725,7 +725,7 @@ void iguana_initfinal(struct iguana_info *coin,bits256 lastbundle)
if ( i == 0 )
bp->utxofinish = bp->startutxo = (uint32_t)time(NULL);
}
if ( i < coin->bundlescount-1 )
if ( 1 || i < coin->bundlescount-1 )
{
printf("spendvectors.[%d] max.%d missing, will regen all of them\n",i,coin->bundlescount-1);
for (i=0; i<coin->bundlescount-1; i++)
@ -747,7 +747,8 @@ void iguana_initfinal(struct iguana_info *coin,bits256 lastbundle)
coin->balanceswritten = iguana_volatilesinit(coin);
if ( coin->balanceswritten > 1 )
{
for (i=0; i<coin->balanceswritten; i++)
//for (i=0; i<coin->balanceswritten; i++)
for (i=0; i<coin->bundlescount; i++)
{
//printf("%d ",i);
iguana_validateQ(coin,coin->bundles[i]);
@ -756,7 +757,7 @@ void iguana_initfinal(struct iguana_info *coin,bits256 lastbundle)
printf("i.%d balanceswritten.%d\n",i,coin->balanceswritten);
if ( coin->balanceswritten < coin->bundlescount )
{
for (i=coin->balanceswritten; i<coin->bundlescount; i++)
for (i=0*coin->balanceswritten; i<coin->bundlescount; i++)
{
if ( (bp= coin->bundles[i]) != 0 && bp->queued == 0 )
{

19
iguana/iguana_txidfind.c

@ -211,14 +211,17 @@ uint32_t iguana_sparseadd(uint8_t *bits,uint32_t ind,int32_t width,uint32_t tabl
uint32_t iguana_sparseaddtx(uint8_t *bits,int32_t width,uint32_t tablesize,bits256 txid,struct iguana_txid *T,uint32_t txidind,struct iguana_ramchain *ramchain)
{
uint32_t ind,retval=0; struct iguana_ramchaindata *rdata = ramchain->H.data;
//char str[65]; printf("sparseaddtx %s txidind.%d bits.%p\n",bits256_str(str,txid),txidind,bits);
ind = (txid.ulongs[0] ^ txid.ulongs[1] ^ txid.ulongs[2] ^ txid.ulongs[3]) % tablesize;
if ( rdata != 0 && (retval= iguana_sparseadd(bits,ind,width,tablesize,txid.bytes,sizeof(txid),txidind,T,sizeof(*T),ramchain,rdata->numtxids)) != 0 )
if ( tablesize > 0 )
{
char str[65];
if ( txidind != 0 && retval != txidind )
printf("sparse tx collision %s %u vs %u\n",bits256_str(str,txid),retval,txidind);
return(retval);
//char str[65]; printf("sparseaddtx %s txidind.%d bits.%p\n",bits256_str(str,txid),txidind,bits);
ind = (txid.ulongs[0] ^ txid.ulongs[1] ^ txid.ulongs[2] ^ txid.ulongs[3]) % tablesize;
if ( rdata != 0 && (retval= iguana_sparseadd(bits,ind,width,tablesize,txid.bytes,sizeof(txid),txidind,T,sizeof(*T),ramchain,rdata->numtxids)) != 0 )
{
char str[65];
if ( txidind != 0 && retval != txidind )
printf("sparse tx collision %s %u vs %u\n",bits256_str(str,txid),retval,txidind);
return(retval);
}
}
return(retval);
}
@ -226,7 +229,7 @@ uint32_t iguana_sparseaddtx(uint8_t *bits,int32_t width,uint32_t tablesize,bits2
uint32_t iguana_sparseaddpk(uint8_t *bits,int32_t width,uint32_t tablesize,uint8_t rmd160[20],struct iguana_pkhash *P,uint32_t pkind,struct iguana_ramchain *ramchain)
{
uint32_t ind,key2; uint64_t key0,key1; struct iguana_ramchaindata *rdata;
if ( (rdata= ramchain->H.data) != 0 )
if ( (rdata= ramchain->H.data) != 0 && tablesize > 0 )
{
//int32_t i; for (i=0; i<20; i++)
// printf("%02x",rmd160[i]);

194
iguana/iguana_unspents.c

@ -23,7 +23,7 @@
int32_t iguana_unspentind2txid(struct supernet_info *myinfo,struct iguana_info *coin,int32_t *spentheightp,bits256 *txidp,int32_t *voutp,int16_t hdrsi,uint32_t unspentind)
{
struct iguana_ramchaindata *rdata=0; struct iguana_bundle *bp=0; struct iguana_unspent *U,*u; struct iguana_txid *T,*t;
/*struct iguana_ramchaindata *rdata=0; struct iguana_bundle *bp=0; struct iguana_unspent *U,*u; struct iguana_txid *T,*t;
*voutp = *spentheightp = -1;
memset(txidp,0,sizeof(*txidp));
if ( hdrsi < coin->bundlescount-1 )
@ -50,7 +50,49 @@ int32_t iguana_unspentind2txid(struct supernet_info *myinfo,struct iguana_info *
rdata = bp->ramchain.H.data;
else break;
}
return(-1);
return(-1);*/
//{"txid":"e34686afc17ec37a8438f0c9a7e48f98d0c625c7917a59c2d7fa22b53d570115","vout":1,"address":"16jsjc1YvzDXqKf7PorMhTyK8ym3ra3uxm","scriptPubKey":"76a9143ef4734c1141725c095342095f6e0e7748b6c16588ac","amount":0.01000000,"timestamp":0,"height":419261,"confirmations":1729,"checkind":4497018,"account":"default","spendable":true,"spent":{"hdrsi":209,"pkind":2459804,"unspentind":4497018,"prevunspentind":0,"satoshis":"1000000","txidind":1726947,"vout":1,"type":2,"fileid":0,"scriptpos":0,"scriptlen":25},"spentheight":419713,"dest":{"spentfrom":"22651e62f248fe2e72053d650f177e4b246ee016605102a40419e603b2bbeac8","vin":0,"timestamp":0,"vouts":[{"1KRhTPvoxyJmVALwHFXZdeeWFbcJSbkFPu":0.00010000}, {"1GQHQ7vwVpGeir2kKrYATsLtrkUQSc7FGY":0.00980000}],"total":0.00990000,"ratio":1}}
cJSON *retarray,*item,*uitem,*sitem; char *retstr; int32_t i,n,retval = -1;
*voutp = *spentheightp = -1;
memset(txidp,0,sizeof(*txidp));
if ( (retstr= bitcoinrpc_listunspent(myinfo,coin,0,0,0,0,0)) != 0 )
{
if ( (retarray= cJSON_Parse(retstr)) != 0 )
{
if ( (n= cJSON_GetArraySize(retarray)) > 0 )
{
for (i=0; i<n; i++)
{
item = jitem(retarray,i);
if ( (uitem= jobj(item,"unspent")) != 0 )
{
if ( juint(uitem,"hdrsi") == hdrsi && juint(uitem,"unspentind") == unspentind )
{
*txidp = jbits256(item,"txid");
*voutp = jint(item,"vout");
*spentheightp = 0;
retval = 0;
break;
}
}
else if ( (sitem= jobj(item,"spent")) != 0 )
{
if ( juint(sitem,"hdrsi") == hdrsi && juint(sitem,"unspentind") == unspentind )
{
*txidp = jbits256(item,"txid");
*voutp = jint(item,"vout");
*spentheightp = jint(item,"spentheight");
retval = 1;
break;
}
}
}
}
free_json(retarray);
}
free(retstr);
}
return(retval);
}
int32_t iguana_unspentindfind(struct supernet_info *myinfo,struct iguana_info *coin,char *coinaddr,uint8_t *spendscript,int32_t *spendlenp,uint64_t *valuep,int32_t *heightp,bits256 txid,int32_t vout,int32_t lasthdrsi,int32_t mempool)
@ -290,7 +332,7 @@ struct iguana_pkhash *iguana_pkhashfind(struct iguana_info *coin,struct iguana_r
else if ( pkind != 0 )
printf("[%d] not found pkind.%d vs num.%d RT.%d rdata.%p\n",i,pkind,rdata->numpkinds,bp->isRT,rdata);
}
else if ( coin->spendvectorsaved > 1 )
else if ( coin->spendvectorsaved > 1 && bp != coin->current )
printf("%s.[%d] skip null rdata isRT.%d\n",coin->symbol,i,bp->isRT);
}
}
@ -342,7 +384,7 @@ int32_t iguana_datachain_scan(struct supernet_info *myinfo,struct iguana_info *c
int64_t iguana_pkhashbalance(struct supernet_info *myinfo,struct iguana_info *coin,cJSON *array,int64_t *spentp,int64_t *unspents,int32_t *nump,struct iguana_ramchain *ramchain,struct iguana_pkhash *p,uint32_t lastunspentind,uint8_t rmd160[20],char *coinaddr,uint8_t *pubkey33,int32_t hdrsi,int32_t lastheight,int32_t minconf,int32_t maxconf,char *remoteaddr)
{
struct iguana_unspent *U; struct iguana_utxo *U2; struct iguana_spend *S; int32_t max,uheight,spentheight; uint32_t pkind=0,unspentind; int64_t spent = 0,checkval,deposits = 0; struct iguana_txid *T; struct iguana_account *A2; struct iguana_ramchaindata *rdata = 0; int64_t RTspend = 0;
struct iguana_unspent *U; struct iguana_utxo *U2; int32_t max,uheight,spentheight; uint32_t pkind=0,unspentind; int64_t spent = 0,checkval,deposits = 0; struct iguana_txid *T; struct iguana_account *A2; struct iguana_ramchaindata *rdata = 0; int64_t RTspend = 0; //struct iguana_spend *S;
max = *nump;
*spentp = *nump = 0;
if ( 0 && coin->RTramchain_busy != 0 )
@ -352,7 +394,11 @@ int64_t iguana_pkhashbalance(struct supernet_info *myinfo,struct iguana_info *co
}
if ( ramchain->Uextras == 0 || (rdata= ramchain->H.data) == 0 )
{
printf("iguana_pkhashbalance: unexpected null spents.%p or rdata.%p\n",ramchain->Uextras,rdata);
if ( ramchain->height < (coin->bundlescount-1)*coin->chain->bundlesize )
{
//printf("iguana_pkhashbalance.[%d] %d: unexpected null spents.%p or rdata.%p\n",ramchain->height,(coin->bundlescount-1)*coin->chain->bundlesize,ramchain->Uextras,rdata);
}
else iguana_volatilesalloc(coin,ramchain,0);
return(0);
}
unspentind = lastunspentind;
@ -376,14 +422,14 @@ int64_t iguana_pkhashbalance(struct supernet_info *myinfo,struct iguana_info *co
}
//printf("%.8f ",dstr(U[unspentind].value));
(*nump)++;
if ( array != 0 )
jaddi(array,iguana_unspentjson(myinfo,coin,hdrsi,unspentind,T,&U[unspentind],rmd160,coinaddr,pubkey33,spentheight,remoteaddr));
}
else
{
//printf("-%.8f ",dstr(U[unspentind].value));
spent += U[unspentind].value;
}
if ( array != 0 )
jaddi(array,iguana_unspentjson(myinfo,coin,hdrsi,unspentind,T,&U[unspentind],rmd160,coinaddr,pubkey33,spentheight,remoteaddr));
if ( p->pkind != U[unspentind].pkind )
printf("warning: [%d] p->pkind.%u vs U->pkind.%u for u%d\n",hdrsi,p->pkind,U[unspentind].pkind,unspentind);
}
@ -392,8 +438,7 @@ int64_t iguana_pkhashbalance(struct supernet_info *myinfo,struct iguana_info *co
}
if ( lastheight > 0 && (A2= ramchain->A2) != 0 && (U2= ramchain->Uextras) != 0 )
{
S = RAMCHAIN_PTR(rdata,Soffset);
//S = (void *)(long)((long)rdata + rdata->Soffset);
//S = RAMCHAIN_PTR(rdata,Soffset);
unspentind = A2[pkind].lastunspentind;
checkval = 0;
while ( unspentind > 0 )
@ -406,7 +451,7 @@ int64_t iguana_pkhashbalance(struct supernet_info *myinfo,struct iguana_info *co
}
unspentind = U2[unspentind].prevunspentind;
}
if ( llabs(spent - checkval - RTspend) > SMALLVAL )
if ( 0 && llabs(spent - checkval - RTspend) > SMALLVAL )
printf("spend %s: [%d] deposits %.8f spent %.8f check %.8f (%.8f) vs A2[%u] %.8f\n",lastheight==IGUANA_MAXHEIGHT?"checkerr":"",hdrsi,dstr(deposits),dstr(spent),dstr(checkval)+dstr(RTspend),dstr(*spentp),pkind,dstr(A2[pkind].total));
}
(*spentp) = spent;
@ -530,17 +575,118 @@ uint8_t *iguana_rmdarray(struct supernet_info *myinfo,struct iguana_info *coin,i
{
bitcoin_addr2rmd160(&addrtypes[j],&rmdarray[20 * j],coinaddr);
init_hexbytes_noT(rmdstr,&rmdarray[20 * j],20);
printf("(%s %s) ",coinaddr,rmdstr);
//printf("(%s %s) ",coinaddr,rmdstr);
j++;
}
}
printf("rmdarray[%d]\n",n);
//printf("rmdarray[%d]\n",n);
}
if ( flag != 0 )
free_json(array);
return(rmdarray);
}
int64_t *iguana_PoS_weights(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_pkhash **Ptrp,int64_t *supplyp,int32_t *numacctsp,int32_t *nonzp,int32_t *errsp,int32_t lastheight)
{
int64_t balance,total,supply,*weights=0; uint32_t pkind; int32_t numrmds,minconf,neg,numunspents,nonz,num=0; struct iguana_bundle *bp; struct iguana_ramchaindata *rdata; struct iguana_pkhash *refP; uint8_t rmd160[20],*rmdarray; cJSON *array; char coinaddr[64]; //struct iguana_account *A2; struct iguana_utxo *U2;
*supplyp = 0;
*numacctsp = *nonzp = 0;
*errsp = 1;
(*Ptrp) = 0;
if ( (bp= coin->bundles[lastheight / coin->chain->bundlesize]) == 0 || bp == coin->current )
return(0);
if ( (rdata= bp->ramchain.H.data) == 0 )
return(0);
(*Ptrp) = refP = RAMCHAIN_PTR(rdata,Poffset);
if ( (num= rdata->numpkinds) > 0 )
{
weights = calloc(num,sizeof(*weights));
minconf = coin->blocks.hwmchain.height - lastheight;
for (pkind=1; pkind<num; pkind++)
{
total = 0;
memcpy(rmd160,refP[pkind].rmd160,sizeof(rmd160));
array = cJSON_CreateArray();
bitcoin_address(coinaddr,coin->chain->pubtype,rmd160,sizeof(rmd160));
jaddistr(array,coinaddr);
//bitcoin_address(coinaddr,coin->chain->p2shtype,rmd160,sizeof(rmd160));
//jaddistr(array,coinaddr);
if ( (rmdarray= iguana_rmdarray(myinfo,coin,&numrmds,array,0)) != 0 )
{
numunspents = 0;
balance = iguana_unspents(myinfo,coin,0,minconf,(1 << 30),rmdarray,numrmds,lastheight,0,&numunspents,0);
free(rmdarray);
weights[pkind] += balance;
if ( weights[pkind] != balance )
printf("PKIND.%d %s %.8f += %.8f\n",pkind,coinaddr,dstr(weights[pkind]),dstr(balance));
}
free_json(array);
}
}
nonz = neg = 0;
supply = 0;
for (pkind=1; pkind<num; pkind++)
if ( weights[pkind] != 0 )
{
nonz++;
if ( weights[pkind] < 0 )
neg++, weights[pkind] = 0;
else supply += weights[pkind];
}
*numacctsp = num;
*errsp = neg;
*nonzp = nonz;
*supplyp = supply;
printf("ht.%d [%d] numaddrs.%d nonz.%d neg.%d supply %.8f\n",lastheight,lastheight/coin->chain->bundlesize,num,nonz,neg,dstr(supply));
return(weights);
}
bits256 iguana_staker_hash2(bits256 refhash2,uint8_t *refrmd160,uint8_t *rmd160,int64_t weight)
{
bits256 hash2;
vcalc_sha256cat(hash2.bytes,refhash2.bytes,sizeof(refhash2),rmd160,20);
return(mpz_div64(hash2,weight));
}
int _cmp_hashes(const void *a,const void *b)
{
#define hasha (*(bits256 *)a)
#define hashb (*(bits256 *)b)
return(bits256_cmp(hasha,hashb));
#undef hasha
#undef hashb
}
int32_t iguana_staker_sort(struct iguana_info *coin,bits256 *hash2p,uint8_t *refrmd160,struct iguana_pkhash *refP,int64_t *weights,int32_t numweights,bits256 *sortbuf)
{
int32_t i,j,n = 0; bits256 ind,refhash2 = *hash2p;
memset(sortbuf,0,sizeof(*sortbuf) * 2 * numweights);
for (i=0; i<numweights; i++)
{
if ( weights[i] > 0 )
{
memset(&ind,0,sizeof(ind));
for (j=0; j<20; j++)
ind.bytes[j] = refP[i].rmd160[j];
ind.ulongs[3] = weights[i];
ind.uints[5] = i;
sortbuf[n << 1] = iguana_staker_hash2(refhash2,refrmd160,ind.bytes,weights[i]);
sortbuf[(n << 1) + 1] = ind;
n++;
}
}
if ( n > 0 )
qsort(sortbuf,n,sizeof(*sortbuf)*2,_cmp_hashes);
vcalc_sha256cat(hash2p->bytes,refhash2.bytes,sizeof(refhash2),sortbuf[1].bytes,20);
memcpy(refrmd160,sortbuf[1].bytes,20);
{
char str[65],coinaddr[64];
bitcoin_address(coinaddr,coin->chain->pubtype,refrmd160,20);
printf("winner.%s %.8f: %s\n",coinaddr,dstr(sortbuf[1].ulongs[3]),bits256_str(str,sortbuf[0]));
}
return((int32_t)sortbuf[1].uints[5]);
}
int32_t iguana_unspent_check(struct supernet_info *myinfo,struct iguana_info *coin,uint16_t hdrsi,uint32_t unspentind)
{
bits256 txid; int32_t vout,spentheight;
@ -560,7 +706,7 @@ int32_t iguana_unspent_check(struct supernet_info *myinfo,struct iguana_info *co
int32_t iguana_unspentslists(struct supernet_info *myinfo,struct iguana_info *coin,int64_t *totalp,int64_t *unspents,int32_t max,int64_t required,int32_t minconf,cJSON *addresses,char *remoteaddr)
{
int64_t *candidates,total,sum = 0; uint32_t unspentind; int32_t i,n,j,r,hdrsi,numunspents,numaddrs; uint8_t addrtype,pubkey[65],rmd160[20]; char *coinaddr,str[65]; struct iguana_waddress *waddr; struct iguana_waccount *wacct; struct basilisk_unspent *bu;
int64_t *candidates,total,sum = 0; uint32_t unspentind; int32_t k,i,n,j,r,hdrsi,numunspents,numaddrs; uint8_t addrtype,pubkey[65],rmd160[20]; char *coinaddr,str[65]; struct iguana_waddress *waddr; struct iguana_waccount *wacct; struct basilisk_unspent *bu;
*totalp = 0;
if ( (numaddrs= cJSON_GetArraySize(addresses)) == 0 )
{
@ -590,18 +736,24 @@ int32_t iguana_unspentslists(struct supernet_info *myinfo,struct iguana_info *co
if ( iguana_unspent_check(myinfo,coin,hdrsi,unspentind) == 0 )
{
//printf("(%d u%d) %.8f not in mempool\n",hdrsi,unspentind,dstr(candidates[(j << 1) + 1]));
unspents[numunspents << 1] = candidates[j << 1];
unspents[(numunspents << 1) + 1] = candidates[(j << 1) + 1];
sum += candidates[(j << 1) + 1];
unspents += 2;
numunspents++;
for (k=0; k<numunspents; k++)
if ( unspents[k << 1] == candidates[j << 1] )
break;
if ( k == numunspents )
{
unspents[numunspents << 1] = candidates[j << 1];
unspents[(numunspents << 1) + 1] = candidates[(j << 1) + 1];
sum += candidates[(j << 1) + 1];
unspents += 2;
numunspents++;
} else printf("found duplicate unspent j.%d numunspents.%d\n",j,numunspents);
}
}
}
}
else
{
if ( (waddr= iguana_waddresssearch(myinfo,&wacct,coinaddr)) != 0 )
if ( (waddr= iguana_waddresssearch(myinfo,&wacct,coinaddr)) != 0 && waddr->numunspents > 0 )
{
r = (rand() % waddr->numunspents);
for (j=0; j<waddr->numunspents; j++)
@ -610,6 +762,10 @@ int32_t iguana_unspentslists(struct supernet_info *myinfo,struct iguana_info *co
bu = &waddr->unspents[i];
if ( basilisk_addspend(myinfo,coin->symbol,bu->txid,bu->vout,0) == 0 )
{
for (k=0; k<numunspents; k++)
{
// filterout duplicates here
}
unspents[0] = ((uint64_t)bu->hdrsi << 32) | bu->unspentind;
unspents[1] = bu->value;
sum += bu->value;

26
iguana/iguana_volatiles.c

@ -209,7 +209,6 @@ int32_t iguana_volatileupdate(struct iguana_info *coin,int32_t incremental,struc
}
}
printf("iguana_volatileupdate.%d: [%d] spent.(u%u %.8f pkind.%d) double spend? at ht.%d [%d] spendind.%d (%p %p)\n",incremental,spent_hdrsi,spent_unspentind,dstr(spent_value),spent_pkind,fromheight,fromheight/coin->chain->bundlesize,spendind,spentchain->Uextras,spentchain->A2);
coin->RTdatabad = 1;
/*if ( coin->current != 0 && fromheight >= coin->current->bundleheight )
coin->RTdatabad = 1;
else
@ -217,11 +216,28 @@ int32_t iguana_volatileupdate(struct iguana_info *coin,int32_t incremental,struc
printf("from.%d vs current.%d\n",fromheight,coin->current->bundleheight);
iguana_bundleremove(coin,fromheight/coin->chain->bundlesize,0);
}
if ( coin->current != 0 && spent_hdrsi != coin->current->hdrsi )
iguana_bundleremove(coin,spent_hdrsi,0);
coin->spendvectorsaved = 0;
coin->started = 0;
coin->active = 0;*/
coin->RTdatabad = 1;
if ( coin->current != 0 && spent_hdrsi != coin->current->hdrsi && spent_hdrsi != fromheight/coin->chain->bundlesize )
{
printf("restart iguana\n");
struct iguana_bundle *bp;
portable_mutex_lock(&coin->special_mutex);
if ( (bp= coin->bundles[spent_hdrsi]) != 0 )
{
iguana_bundleremove(coin,spent_hdrsi,0);
bp->ramchain.H.data = 0;
}
if ( (bp= coin->bundles[fromheight/coin->chain->bundlesize]) != 0 )
{
iguana_bundleremove(coin,fromheight/coin->chain->bundlesize,0);
bp->ramchain.H.data = 0;
}
portable_mutex_unlock(&coin->special_mutex);
exit(-1);
}
}
else if ( coin->spendvectorsaved > 1 )
printf("volatileupdate skip null rdata [%d]\n",spentchain->height/coin->current->bundleheight);
@ -328,7 +344,7 @@ int32_t iguana_volatilesmap(struct iguana_info *coin,struct iguana_ramchain *ram
coin->balancehash = balancehash;
coin->allbundles = allbundles;
}
if ( numhdrsi == coin->balanceswritten && memcmp(balancehash.bytes,coin->balancehash.bytes,sizeof(balancehash)) == 0 && memcmp(allbundles.bytes,coin->allbundles.bytes,sizeof(allbundles)) == 0 )
if ( numhdrsi >= coin->balanceswritten-1 && memcmp(balancehash.bytes,coin->balancehash.bytes,sizeof(balancehash)) == 0 && memcmp(allbundles.bytes,coin->allbundles.bytes,sizeof(allbundles)) == 0 )
{
ramchain->A2 = (void *)((long)ramchain->debitsfileptr + sizeof(numhdrsi) + 2*sizeof(bits256));
sprintf(fname,"%s/%s%s/accounts/lastspends.%d",GLOBAL_DBDIR,iter==0?"ro/":"",coin->symbol,ramchain->height);
@ -337,7 +353,7 @@ int32_t iguana_volatilesmap(struct iguana_info *coin,struct iguana_ramchain *ram
numhdrsi = *(int32_t *)ramchain->lastspendsfileptr;
memcpy(balancehash.bytes,(void *)((long)ramchain->lastspendsfileptr + sizeof(numhdrsi)),sizeof(balancehash));
memcpy(allbundles.bytes,(void *)((long)ramchain->lastspendsfileptr + sizeof(numhdrsi) + sizeof(balancehash)),sizeof(allbundles));
if ( numhdrsi == coin->balanceswritten && memcmp(balancehash.bytes,coin->balancehash.bytes,sizeof(balancehash)) == 0 && memcmp(allbundles.bytes,coin->allbundles.bytes,sizeof(allbundles)) == 0 )
if ( numhdrsi >= coin->balanceswritten-1 && memcmp(balancehash.bytes,coin->balancehash.bytes,sizeof(balancehash)) == 0 && memcmp(allbundles.bytes,coin->allbundles.bytes,sizeof(allbundles)) == 0 )
{
ramchain->Uextras = (void *)((long)ramchain->lastspendsfileptr + sizeof(numhdrsi) + 2*sizeof(bits256));
ramchain->from_roU = (iter == 0);

3
iguana/iguana_wallet.c

@ -393,6 +393,7 @@ char *getaccount(struct supernet_info *myinfo,struct iguana_info *coin,char *coi
char *jsuccess()
{
cJSON *retjson = cJSON_CreateObject();
jaddstr(retjson,"result","success");
return(jprint(retjson,1));
}
@ -923,7 +924,7 @@ char *getnewaddress(struct supernet_info *myinfo,struct iguana_waddress **waddrp
if ( iguana_waddresscalc(myinfo,coin->chain->pubtype,coin->chain->wiftype,&addr,bitcoin_randkey(myinfo->ctx)) != 0 )
retjson = iguana_walletadd(myinfo,waddrp,coin,retstr,account,&addr,1,0);
else return(clonestr("{\"error\":\"couldnt calculate waddr\"}"));
} else return(clonestr("{\"error\":\"no wallet data\"}"));
} else return(clonestr("{\"error\":\"no wallet data, did you remember to do encryptwallet onetime?\"}"));
return(jprint(retjson,1));
}

360
iguana/index.html

@ -23,196 +23,188 @@
<script src="js/amcharts/amstock.js" type="text/javascript"></script>
<script src="js/amcharts/plugins/dataloader/dataloader.min.js" type="text/javascript"></script>
<script>
var httpresult;
function http_handler()
{
if ( this.status == 200 && this.responseText != null )
{
alert(this.responseText);
httpresult = this.responseText;
}
}
function httpGet(url)
{
var client;
if ( window.XMLHttpRequest )
client = new XMLHttpRequest();
else
client = new ActiveXObject(\"Microsoft.XMLHTTP\");
client.onload = http_handler;
client.open(\"GET\",url);
client.send();
}
AmCharts.ready(function () { createStockChart(); });
var interval,BASE= "BTCD",REL = "BTC";
function createStockChart() {
var chartData = [];
var chart = AmCharts.makeChart("chartdiv",
{
"type": "serial",
"theme": "dark",
"valueAxes": [
{ "title":"BTC", "id": "vert", "axisAlpha": 0, "dashLength": 1, "position": "left"},
{ "id": "horiz", "axisAlpha": 0, "dashLength": 1, "position": "bottom", "labelFunction": function (value) {
var date = new Date(value);
return AmCharts.formatDate(date, "MMM DD HH:NN:SS");
}}
],
"graphs": [
{ "id": "g1", "lineColor": "#00FFFF", "bullet": "round", "valueField": "bid", "balloonText": "[[category]] [[h]]:[[m]]:[[s]] account:[[offerer]] id:[[orderid]] volume:[[volume]] bid:[[bid]]" },
{ "id": "g2", "lineColor": "#FF8800", "bullet": "round", "valueField": "ask", "balloonText": "[[category]] [[h]]:[[m]]:[[s]] account:[[offerer]] id:[[orderid]] volume:[[volume]] ask:[[ask]]" }],
"categoryField": "date",
"categoryAxis": { "parseDates": true, "equalSpacing": true, "dashLength": 1, "minorGridEnabled": true },
"chartScrollbar": {},
"chartCursor": {},
"dataProvider": chartData
});
var startButton = document.getElementById('start');
var endButton = document.getElementById('stop');
var buyButton = document.getElementById('buy');
var sellButton = document.getElementById('sell');
/*
var BTCbutton = document.getElementById('BTC');
var CNYbutton = document.getElementById('CNY');
var USDbutton = document.getElementById('USD');
var EURbutton = document.getElementById('EUR');
var JPYbutton = document.getElementById('JPY');
var GBPbutton = document.getElementById('GBP');
var AUDbutton = document.getElementById('AUD');
var CADbutton = document.getElementById('CAD');
var CHFbutton = document.getElementById('CHF');
var NZDbutton = document.getElementById('NZD');
USDbutton.addEventListener('click', USDrel);
EURbutton.addEventListener('click', EURrel);
JPYbutton.addEventListener('click', JPYrel);
GBPbutton.addEventListener('click', GBPrel);
AUDbutton.addEventListener('click', AUDrel);
CADbutton.addEventListener('click', CADrel);
CHFbutton.addEventListener('click', CHFrel);
NZDbutton.addEventListener('click', NZDrel);
CNYbutton.addEventListener('click', CNYrel);
BTCbutton.addEventListener('click', BTCrel);
*/
var BTCDbutton = document.getElementById('BTCD');
var VPNbutton = document.getElementById('VPN');
var VRCbutton = document.getElementById('VRC');
var SYSbutton = document.getElementById('SYS');
var SuperNETbutton = document.getElementById('SuperNET');
var crypto777button = document.getElementById('crypto777');
var pangeabutton = document.getElementById('Pangea');
var InstantDEXbutton = document.getElementById('InstantDEX');
var Tradebotsbutton = document.getElementById('Tradebots');
var NXTprivacybutton = document.getElementById('NXTprivacy');
startButton.addEventListener('click', startDemo);
endButton.addEventListener('click', endDemo);
buyButton.addEventListener('click', buyaction);
sellButton.addEventListener('click', sellaction);
BTCDbutton.addEventListener('click', BTCDbase);
VPNbutton.addEventListener('click', VPNbase);
SYSbutton.addEventListener('click', SYSbase);
SuperNETbutton.addEventListener('click', SuperNETbase);
crypto777button.addEventListener('click', crypto777base);
pangeabutton.addEventListener('click', Pangeabase);
InstantDEXbutton.addEventListener('click', InstantDEXbase);
Tradebotsbutton.addEventListener('click', Tradebotsbase);
NXTprivacybutton.addEventListener('click', NXTprivacybase);
function changebase(newbase)
{
BASE = newbase;
if ( chartData.length > 0 )
{
chartData.splice(0,chartData.length);
chart.validateData();
}
}
function BTCDbase() { changebase("BTCD"); }
function VPNbase() { changebase("VPN"); }
function SYSbase() { changebase("SYS"); }
function SuperNETbase() { changebase("SuperNET"); }
function crypto777base() { changebase("crypto777"); }
function Pangeabase() { changebase("Pangea"); }
function InstantDEXbase() { changebase("InstantDEX"); }
function Tradebotsbase() { changebase("Tradebots"); }
function NXTprivacybase() { changebase("NXTprivacy"); }
function USDrel() { REL = "USD"; }
function EURrel() { REL = "EUR"; }
function JPYrel() { REL = "JPY"; }
function GBPrel() { REL = "GBP"; }
function AUDrel() { REL = "AUD"; }
function CADrel() { REL = "CAD"; }
function CHFrel() { REL = "CHF"; }
function NZDrel() { REL = "NZD"; }
function CNYrel() { REL = "CNY"; }
function BTCrel() { REL = "CNY"; }
function startDemo() {
startButton.disabled = "disabled";
endButton.disabled = "";
interval = setInterval(getDataFromServer, 1000);
}
function endDemo() {
startButton.disabled = "";
endButton.disabled = "disabled";
clearInterval(interval);
}
function buyaction() {
alert("need to do market buy");
}
function sellaction() {
alert("need to do market sell");
}
function getDataFromServer()
{
var i,newData = [];
var request='{"agent":"InstantDEX","method":"events","base":"'+BASE+'","rel":"'+REL+'"}';
SPNAPI.makeRequest(request,
function(request,response)
<script>
var httpresult;
function http_handler()
{
newData = JSON.parse(response);
if ( newData.length > 0 )
if ( this.status == 200 && this.responseText != null )
{
alert(response);
chartData.push.apply(chartData, newData);
if (chartData.length > 50)
chartData.splice(0, chartData.length - 50);
chart.validateData(); //call to redraw the chart with new data
alert(this.responseText);
httpresult = this.responseText;
}
});
// newData = JSON.parse("[{\"h\":14,\"m\":44,\"s\":32,\"date\":1407877200000,\"bid\":30,\"ask\":35},{\"date\":1407877200000,\"bid\":40,\"ask\":44},{\"date\":1407877200000,\"bid\":49,\"ask\":45},{\"date\":1407877200000,\"ask\":28},{\"date\":1407877200000,\"ask\":52}]");
}
}
}
function httpGet(url)
{
var client;
if ( window.XMLHttpRequest )
client = new XMLHttpRequest();
else
client = new ActiveXObject(\"Microsoft.XMLHTTP\");
client.onload = http_handler;
client.open(\"GET\",url);
client.send();
}
AmCharts.ready(function () { createStockChart(); });
var interval,BASE= "BTCD",REL = "BTC";
function createStockChart() {
var chartData = [];
var chart = AmCharts.makeChart("chartdiv",
{
"type": "serial",
"theme": "dark",
"valueAxes": [
{ "title":"BTC", "id": "vert", "axisAlpha": 0, "dashLength": 1, "position": "left"},
{ "id": "horiz", "axisAlpha": 0, "dashLength": 1, "position": "bottom", "labelFunction": function (value) {
var date = new Date(value);
return AmCharts.formatDate(date, "MMM DD HH:NN:SS");
}}
],
"graphs": [
{ "id": "g1", "lineColor": "#00FFFF", "bullet": "round", "valueField": "bid", "balloonText": "[[category]] [[h]]:[[m]]:[[s]] account:[[offerer]] id:[[orderid]] volume:[[volume]] bid:[[bid]]" },
{ "id": "g2", "lineColor": "#FF8800", "bullet": "round", "valueField": "ask", "balloonText": "[[category]] [[h]]:[[m]]:[[s]] account:[[offerer]] id:[[orderid]] volume:[[volume]] ask:[[ask]]" }],
"categoryField": "date",
"categoryAxis": { "parseDates": true, "equalSpacing": true, "dashLength": 1, "minorGridEnabled": true },
"chartScrollbar": {},
"chartCursor": {},
"dataProvider": chartData
});
</script>
var startButton = document.getElementById('start');
var endButton = document.getElementById('stop');
var buyButton = document.getElementById('buy');
var sellButton = document.getElementById('sell');
/*
var BTCbutton = document.getElementById('BTC');
var CNYbutton = document.getElementById('CNY');
var USDbutton = document.getElementById('USD');
var EURbutton = document.getElementById('EUR');
var JPYbutton = document.getElementById('JPY');
var GBPbutton = document.getElementById('GBP');
var AUDbutton = document.getElementById('AUD');
var CADbutton = document.getElementById('CAD');
var CHFbutton = document.getElementById('CHF');
var NZDbutton = document.getElementById('NZD');
USDbutton.addEventListener('click', USDrel);
EURbutton.addEventListener('click', EURrel);
JPYbutton.addEventListener('click', JPYrel);
GBPbutton.addEventListener('click', GBPrel);
AUDbutton.addEventListener('click', AUDrel);
CADbutton.addEventListener('click', CADrel);
CHFbutton.addEventListener('click', CHFrel);
NZDbutton.addEventListener('click', NZDrel);
CNYbutton.addEventListener('click', CNYrel);
BTCbutton.addEventListener('click', BTCrel);
*/
var BTCDbutton = document.getElementById('BTCD');
var VPNbutton = document.getElementById('VPN');
var VRCbutton = document.getElementById('VRC');
var SYSbutton = document.getElementById('SYS');
var SuperNETbutton = document.getElementById('SuperNET');
var crypto777button = document.getElementById('crypto777');
var pangeabutton = document.getElementById('Pangea');
var InstantDEXbutton = document.getElementById('InstantDEX');
var Tradebotsbutton = document.getElementById('Tradebots');
var NXTprivacybutton = document.getElementById('NXTprivacy');
startButton.addEventListener('click', startDemo);
endButton.addEventListener('click', endDemo);
buyButton.addEventListener('click', buyaction);
sellButton.addEventListener('click', sellaction);
BTCDbutton.addEventListener('click', BTCDbase);
VPNbutton.addEventListener('click', VPNbase);
SYSbutton.addEventListener('click', SYSbase);
SuperNETbutton.addEventListener('click', SuperNETbase);
crypto777button.addEventListener('click', crypto777base);
pangeabutton.addEventListener('click', Pangeabase);
InstantDEXbutton.addEventListener('click', InstantDEXbase);
Tradebotsbutton.addEventListener('click', Tradebotsbase);
NXTprivacybutton.addEventListener('click', NXTprivacybase);
function changebase(newbase)
{
BASE = newbase;
if ( chartData.length > 0 )
{
chartData.splice(0,chartData.length);
chart.validateData();
}
}
function BTCDbase() { changebase("BTCD"); }
function VPNbase() { changebase("VPN"); }
function SYSbase() { changebase("SYS"); }
function SuperNETbase() { changebase("SuperNET"); }
function crypto777base() { changebase("crypto777"); }
function Pangeabase() { changebase("Pangea"); }
function InstantDEXbase() { changebase("InstantDEX"); }
function Tradebotsbase() { changebase("Tradebots"); }
function NXTprivacybase() { changebase("NXTprivacy"); }
function USDrel() { REL = "USD"; }
function EURrel() { REL = "EUR"; }
function JPYrel() { REL = "JPY"; }
function GBPrel() { REL = "GBP"; }
function AUDrel() { REL = "AUD"; }
function CADrel() { REL = "CAD"; }
function CHFrel() { REL = "CHF"; }
function NZDrel() { REL = "NZD"; }
function CNYrel() { REL = "CNY"; }
function BTCrel() { REL = "CNY"; }
function startDemo() {
startButton.disabled = "disabled";
endButton.disabled = "";
interval = setInterval(getDataFromServer, 1000);
}
function endDemo() {
startButton.disabled = "";
endButton.disabled = "disabled";
clearInterval(interval);
}
function buyaction() {
alert("need to do market buy");
}
function sellaction() {
alert("need to do market sell");
}
function getDataFromServer()
{
var i,newData = [];
var request='{"agent":"InstantDEX","method":"events","base":"'+BASE+'","rel":"'+REL+'"}';
SPNAPI.makeRequest(request,
function(request,response)
{
newData = JSON.parse(response);
if ( newData.length > 0 )
{
alert(response);
chartData.push.apply(chartData, newData);
if (chartData.length > 50)
chartData.splice(0, chartData.length - 50);
chart.validateData(); //call to redraw the chart with new data
}
});
// newData = JSON.parse("[{\"h\":14,\"m\":44,\"s\":32,\"date\":1407877200000,\"bid\":30,\"ask\":35},{\"date\":1407877200000,\"bid\":40,\"ask\":44},{\"date\":1407877200000,\"bid\":49,\"ask\":45},{\"date\":1407877200000,\"ask\":28},{\"date\":1407877200000,\"ask\":52}]");
}
}
</script>
</head>
<body data-custom-load="true" data-name="iguana" data-tools="pnacl newlib glibc clang-newlib mac" data-configs="Debug Release"
@ -270,7 +262,7 @@ data-path="{tc}/{config}">
</div>
<!-- /.container-fluid -->
</nav>
<div class="container">
<div class="container" style="height:700px;overflow-y:scroll">
<!--<div id="welcome_page" class="page" style="text-align: center;">
<div class="panel panel-default">
<!-- Default panel contents
@ -732,7 +724,7 @@ data-path="{tc}/{config}">
</table>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script>

9
iguana/m_android

@ -1 +1,8 @@
$CC2 -o ../agents/iguana -O2 *.c ../agents/libcrypto777.a ../android/lib/libcurl.a -lssl -lcrypto -lm -lc -lz
rm ../agents/iguana *.o
git pull
cd secp256k1; ./m_unix; cd ..
$CC2 -g -Wno-deprecated -c -O2 *.c databases/iguana_DB.c
$CC2 -g -Wno-deprecated -c main.c iguana777.c iguana_bundles.c
#$CC2 -g -o ../agents/iguana *.o ../agents/libcrypto777.a -lcurl -lssl -lcrypto -lpthread -lm #../includes/libsecp256k1.a -lgmp
$CC2 -g -o ../agents/iguana *.o ../agents/libcrypto777.a -lpthread -lm

65
iguana/main.c

@ -418,12 +418,14 @@ void mainloop(struct supernet_info *myinfo)
if ( time(NULL) > coin->startutc+10 && coin->spendvectorsaved == 0 && coin->blocks.hwmchain.height/coin->chain->bundlesize >= (coin->longestchain-coin->minconfirms)/coin->chain->bundlesize )
{
n = coin->bundlescount-1;
//printf("%s n.%d emitfinished.%d\n",coin->symbol,n,iguana_emitfinished(coin,1));
if ( iguana_emitfinished(coin,1) >= n )
{
if ( coin->PREFETCHLAG >= 0 && coin->fastfind == 0 )
{
for (j=0; j<n; j++)
iguana_alloctxbits(coin,&coin->bundles[j]->ramchain);
if ( coin->bundles[j] != 0 )
iguana_alloctxbits(coin,&coin->bundles[j]->ramchain);
sleep(3);
}
if ( iguana_validated(coin) < n || iguana_utxofinished(coin) < n || iguana_balancefinished(coin) < n )
@ -464,15 +466,62 @@ void mainloop(struct supernet_info *myinfo)
}
//pangea_queues(SuperNET_MYINFO(0));
if ( flag == 0 )
usleep(10000 + isRT*100000 + (numpeers == 0)*1000000);
usleep(100000 + isRT*100000 + (numpeers == 0)*1000000);
//iguana_jsonQ(); // cant do this here safely, need to send to coin specific queue
}
}
void iguana_accounts()
{
long filesize; cJSON *json,*array,*item,*posting,*auths,*json2; int32_t i,n,m; char *str,*str2,*postingkey,*name,*key,fname[128],cmd[512]; FILE *postingkeys;
if ( (str= OS_filestr(&filesize,"accounts.txt")) != 0 )
{
if ( (json= cJSON_Parse(str)) != 0 )
{
if ( (array= jarray(&n,json,"result")) != 0 && (postingkeys= fopen("postingkeys.c","wb")) != 0 )
{
fprintf(postingkeys,"char *postingkeys[][2] = {\n");
for (i=0; i<n; i++)
{
item = jitem(array,i);
if ( (name= jstr(item,"name")) != 0 && (posting= jobj(item,"posting")) != 0 )
{
if ( (auths= jarray(&m,posting,"key_auths")) != 0 )
{
item = jitem(auths,0);
if ( is_cJSON_Array(item) != 0 && (key= jstri(item,0)) != 0 )
{
sprintf(fname,"\"/tmp/%s\"",name);
sprintf(cmd,"curl --url \"http://127.0.0.1:8091\" --data \"{\\\"id\\\":444,\\\"method\\\":\\\"get_private_key\\\",\\\"params\\\":[\\\"%s\\\"]}\" > %s",key,fname);
printf("%s\n",cmd);
if ( (str2= OS_filestr(&filesize,fname)) != 0 )
{
if ( (json2= cJSON_Parse(str2)) != 0 )
{
if ( (postingkey= jstr(json2,"result")) != 0 )
fprintf(postingkeys,"{ \"%s\", \"%s\" },",name,postingkey);
free_json(json2);
}
}
free(str2);
}
}
}
}
fprintf(postingkeys,"\n};\n");
fclose(postingkeys);
}
free_json(json);
}
free(str);
}
}
void iguana_appletests(struct supernet_info *myinfo)
{
char *str;
//iguana_chaingenesis(1,1403138561,0x1e0fffff,8359109,bits256_conv("fd1751cc6963d88feca94c0d01da8883852647a37a0a67ce254d62dd8c9d5b2b")); // BTCD
//iguana_accounts(), getchar();
if ( 0 )
{
char genesisblock[1024];
@ -504,7 +553,7 @@ void iguana_appletests(struct supernet_info *myinfo)
if ( 1 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"protover\":70002,\"RELAY\":1,\"VALIDATE\":0,\"portp2p\":14631,\"rpc\":14632,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":64,\"endpend\":64,\"services\":129,\"maxpeers\":8,\"newcoin\":\"BTCD\",\"active\":1,\"numhelpers\":1,\"poll\":1}"),0,myinfo->rpcport)) != 0 )
{
free(str);
if ( 1 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"portp2p\":8333,\"RELAY\":0,\"VALIDATE\":0,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":1,\"endpend\":1,\"services\":128,\"maxpeers\":8,\"newcoin\":\"BTC\",\"active\":0,\"numhelpers\":1,\"poll\":100}"),0,myinfo->rpcport)) != 0 )
if ( 0 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"portp2p\":8333,\"RELAY\":0,\"VALIDATE\":0,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":1,\"endpend\":1,\"services\":128,\"maxpeers\":8,\"newcoin\":\"BTC\",\"active\":0,\"numhelpers\":1,\"poll\":100}"),0,myinfo->rpcport)) != 0 )
{
free(str);
if ( 0 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"agent\":\"SuperNET\",\"method\":\"login\",\"handle\":\"alice\",\"password\":\"alice\",\"passphrase\":\"alice\"}"),0,myinfo->rpcport)) != 0 )
@ -1458,7 +1507,7 @@ FOUR_STRINGS(SuperNET,login,handle,password,permanentfile,passphrase)
void iguana_main(void *arg)
{
int32_t usessl = 0, ismainnet = 1; struct supernet_info *myinfo; cJSON *argjson = 0;
int32_t usessl = 0, ismainnet = 1; struct supernet_info *myinfo; //cJSON *argjson = 0;
if ( (IGUANA_BIGENDIAN= iguana_isbigendian()) > 0 )
printf("BIGENDIAN\n");
else if ( IGUANA_BIGENDIAN == 0 )
@ -1525,16 +1574,20 @@ void iguana_main(void *arg)
myinfo->tradingexchanges[myinfo->numexchanges++] = exchange_create("bittrex",0);
myinfo->tradingexchanges[myinfo->numexchanges++] = exchange_create("btc38",0);
myinfo->tradingexchanges[myinfo->numexchanges++] = exchange_create("huobi",0);
argjson = arg != 0 ? cJSON_Parse(arg) : cJSON_Parse("{}");
//argjson = arg != 0 ? cJSON_Parse(arg) : cJSON_Parse("{}");
//iguana_coinadd("BTC",argjson); dont do this here, coin args not set
///iguana_coinadd("LTC",argjson);
free_json(argjson);
//free_json(argjson);
printf("helpinit\n");
iguana_helpinit(myinfo);
printf("basilisks_init\n");
basilisks_init(myinfo);
printf("iguana_commandline\n");
iguana_commandline(myinfo,arg);
#ifdef __APPLE__
iguana_appletests(myinfo);
#endif
printf("iguana_launchdaemons\n");
iguana_launchdaemons(myinfo);
}

23
iguana/manifest.json

@ -1,27 +1,30 @@
{
"update_url": "https://clients2.google.com/service/update2/crx",
"app": {
"background": { "scripts": ["background.js"] }
},
"name": "iguana",
"short_name": "iguana",
"version": "44.1.2",
"version": "44.2.1",
"manifest_version": 2,
"description": "iguana",
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"offline_enabled": true,
"icons": { "128": "icon128.png" },
"icons": {
"128": "icon128.png"
},
"minimum_chrome_version": "36",
"sockets": {
"tcp": {
"connect": "*"
},
"tcpServer": {
"listen": "*"
}
},
"permissions": [
{ "socket": [
"tcp-listen:*:*",
"tcp-connect",
"resolve-host",
"udp-bind:*:*",
"udp-send-to:*:*"
]
},
"unlimitedStorage",
{"fileSystem": ["write"]},
"storage",
@ -29,4 +32,4 @@
"system.display",
"system.network",
"system.cpu" ]
}
}

12
iguana/mini-gmp.c

@ -4439,3 +4439,15 @@ bits256 mpz_muldivcmp(bits256 oldval,int32_t mulval,int32_t divval,bits256 targe
return(newval);
}
bits256 mpz_div64(bits256 hash,uint64_t divval)
{
mpz_t bn; bits256 newval;
mpz_init(bn);
mpz_from_bits256(bn,hash);
mpz_tdiv_qr_ui(bn,NULL,bn,divval);
newval = mpz_to_bits256(bn);
//char *bits256_str(char *,bits256);
//char str[65],str2[65]; printf("%s div.%lld -> %s size.%d\n",bits256_str(str,hash),(long long)divval,bits256_str(str2,newval),bn->_mp_size);
mpz_clear(bn);
return(newval);
}

57
iguana/ramchain_api.c

@ -184,6 +184,63 @@ STRING_AND_INT(iguana,bundleaddresses,activecoin,height)
else return(clonestr("{\"error\":\"activecoin is not active\"}"));
}
STRING_AND_INT(iguana,PoSweights,activecoin,height)
{
struct iguana_info *ptr; int32_t num,nonz,errs,bundleheight; struct iguana_pkhash *refP; int64_t *weights,supply; cJSON *retjson;
if ( (ptr= iguana_coinfind(activecoin)) != 0 )
{
//for (bundleheight=coin->chain->bundlesize; bundleheight<height; bundleheight+=coin->chain->bundlesize)
{
bundleheight = (height / ptr->chain->bundlesize) * ptr->chain->bundlesize;
if ( (weights= iguana_PoS_weights(myinfo,ptr,&refP,&supply,&num,&nonz,&errs,bundleheight)) != 0 )
{
retjson = cJSON_CreateObject();
jaddstr(retjson,"result",errs == 0 ? "success" : "error");
jaddnum(retjson,"bundleheight",bundleheight);
jaddnum(retjson,"numaddresses",num);
jaddnum(retjson,"nonzero",nonz);
jaddnum(retjson,"errors",errs);
jaddnum(retjson,"supply",dstr(supply));
free(weights);
return(jprint(retjson,1));
} else return(clonestr("{\"error\":\"iguana_PoS_weights returned null\"}"));
}
}
return(clonestr("{\"error\":\"activecoin is not active\"}"));
}
STRING_ARG(iguana,stakers,activecoin)
{
struct iguana_info *ptr; int32_t i,datalen,pkind,hdrsi; bits256 hash2; struct iguana_bundle *bp; cJSON *retjson,*array; struct iguana_pkhash *refP; struct iguana_ramchaindata *rdata; char coinaddr[64]; uint8_t refrmd160[20]; bits256 *sortbuf;
if ( (ptr= iguana_coinfind(activecoin)) != 0 && ptr->RTheight > ptr->chain->bundlesize )
{
hdrsi = (ptr->RTheight / ptr->chain->bundlesize) - 1;
if ( (bp= ptr->bundles[hdrsi]) != 0 && bp->weights != 0 && (rdata= bp->ramchain.H.data) != 0 && bp->weights != 0 )
{
sortbuf = calloc(bp->numweights,2 * sizeof(*sortbuf));
for (i=datalen=0; i<bp->numweights; i++)
datalen += iguana_rwnum(1,&((uint8_t *)sortbuf)[datalen],sizeof(bp->weights[i]),(void *)&bp->weights[i]);
hash2 = bits256_doublesha256(0,(uint8_t *)sortbuf,datalen);
refP = RAMCHAIN_PTR(rdata,Poffset);
retjson = cJSON_CreateObject();
array = cJSON_CreateArray();
memset(refrmd160,0,sizeof(refrmd160));
for (i=0; i<ptr->chain->bundlesize; i++)
{
if ( (pkind= iguana_staker_sort(ptr,&hash2,refrmd160,refP,bp->weights,bp->numweights,sortbuf)) > 0 )
{
bitcoin_address(coinaddr,ptr->chain->pubtype,refP[pkind].rmd160,sizeof(refP[pkind].rmd160));
jaddistr(array,coinaddr);
} else jaddistr(array,"error");
}
jaddstr(retjson,"result","success");
jadd(retjson,"stakers",array);
return(jprint(retjson,1));
} else return(clonestr("{\"error\":\"iguana_stakers needs PoSweights and weights\"}"));
}
return(clonestr("{\"error\":\"activecoin is not active\"}"));
}
STRING_AND_INT(iguana,bundlehashes,activecoin,height)
{
struct iguana_info *ptr; struct iguana_bundle *bp; int32_t i,hdrsi; cJSON *retjson,*array; struct iguana_ramchaindata *rdata;

1
iguana/secp256k1/m_android

@ -0,0 +1 @@
$CC2 -c -o ../secp256k1.o -I. -I./src -I./include -I./src -O3 -W -std=c89 -pedantic -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function -Wno-long-long -Wno-overlength-strings -fvisibility=hidden -DHAVE_CONFIG_H src/secp256k1.c

7
iguana/tests/PoS

@ -0,0 +1,7 @@
curl --url "http://127.0.0.1:7778" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"PoSweights\",\"activecoin\":\"BTCD\",\"height\":1192000}"
curl --url "http://127.0.0.1:7778" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"PoSweights\",\"activecoin\":\"BTCD\",\"height\":1192500}"
curl --url "http://127.0.0.1:7778" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"PoSweights\",\"activecoin\":\"BTCD\",\"height\":1193000}"
curl --url "http://127.0.0.1:7778" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"PoSweights\",\"activecoin\":\"BTCD\",\"height\":1193500}"
curl --url "http://127.0.0.1:7778" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"PoSweights\",\"activecoin\":\"BTCD\",\"height\":1194000}"
curl --url "http://127.0.0.1:7778" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"PoSweights\",\"activecoin\":\"BTCD\",\"height\":1194500}"
curl --url "http://127.0.0.1:7778" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"PoSweights\",\"activecoin\":\"BTCD\",\"height\":1195000}"

2
iguana/tests/decoderawtransaction

@ -1 +1 @@
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTC\",\"method\":\"decoderawtransaction\",\"params\":[\"0100000001afa83a8601f8d86da02823fb39fac4e19f7fcdde276d7c529df94a6fe4067f6a000000008d483045022100f968fcbd1638f0004fa51ef75be60aeb300e0870c72bb85dcc99a6b097d155e30220436884335112fd84dc9837c7d979fc4a5d1220de584d987a799d8a349782ddd7012102a9669e63ef1ab04913615c2f3887ea3584f81e5f08feee9535b19ab3739d8afd204bdc874215f9a5d9793a7b7d36e3960d02d9f969a8d427e9845bc97a48ea41ad00ffffffff015dbc0300000000001976a914b7128d2ee837cf03e30a2c0e3e0181f7b9669bb688ac00000000\"]}"
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTCD\",\"method\":\"decoderawtransaction\",\"params\":[\"010000000132a253010000000000000000000000000000000000000000000000000000000000000000ffffffff4100012a3d3138204a756e652032303134202d204269746f696e20796f75722077617920746f206120646f75626c6520657370726573736f202d20636e6e2e636f6dffffffff010000000000000000000000000000\"]}"

1
iguana/tests/getaddressesbyaccount

@ -0,0 +1 @@
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTC\",\"agent\":\"bitcoinrpc\",\"method\":\"getaddressesbyaccount\",\"account\":\"*\"}"

2
iguana/tests/gettransaction

@ -1,2 +1,2 @@
curl --url "http://127.0.0.1:7778" --data "{\"method\":\"gettransaction\",\"coin\":\"BTCD\",\"params\":[\"9825a57222b1f8d2e0072e547865c84d29cd356c0d9078b9cdcd52cf3b320378\"]}"
curl --url "http://127.0.0.1:7778" --data "{\"method\":\"gettransaction\",\"coin\":\"BTCD\",\"params\":[\"f19aa5e469be3864030f44f184638d55ddc6bf66c7eecf1697c22092421901e7\"]}"

2
iguana/tests/request

@ -1,2 +1,2 @@
curl --url "http://127.0.0.1:7778" --data "{\"agent\":\"InstantDEX\",\"method\":\"request\",\"vals\":{\"source\":\"BTCD\",\"amount\":1,\"dest\":\"BTC\",\"minprice\":0.0025}}"
curl --url "http://127.0.0.1:7778" --data "{\"agent\":\"InstantDEX\",\"method\":\"request\",\"vals\":{\"source\":\"BTCD\",\"amount\":0.1,\"dest\":\"BTC\",\"minprice\":0.0025}}"

1
iguana/tests/stakers

@ -0,0 +1 @@
curl --url "http://127.0.0.1:7778" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"stakers\",\"activecoin\":\"BTCD\"}"

4
includes/iguana_apideclares.h

@ -69,7 +69,7 @@ STRING_ARG(bitcoinrpc,decoderawtransaction,rawtx);
STRING_ARG(bitcoinrpc,validaterawtransaction,rawtx);
ARRAY_OBJ_INT(bitcoinrpc,createrawtransaction,vins,vouts,locktime);
ZERO_ARGS(bitcoinrpc,makekeypair);
ZERO_ARGS(iguana,makekeypair);
STRING_ARG(bitcoinrpc,validatepubkey,pubkey);
STRING_ARG(bitcoinrpc,validateaddress,address);
@ -141,6 +141,8 @@ TWO_STRINGS_AND_TWO_DOUBLES(iguana,balance,activecoin,address,heightd,minconfd);
P2SH_SPENDAPI(iguana,spendmsig,activecoin,vintxid,vinvout,destaddress,destamount,destaddress2,destamount2,M,N,pubA,wifA,pubB,wifB,pubC,wifC);
STRING_AND_INT(iguana,bundleaddresses,activecoin,height);
STRING_AND_INT(iguana,bundlehashes,activecoin,height);
STRING_AND_INT(iguana,PoSweights,activecoin,height);
STRING_ARG(iguana,stakers,activecoin);
//TWO_STRINGS_AND_TWO_DOUBLES(InstantDEX,minaccept,base,rel,minprice,basevolume);
//TWO_STRINGS_AND_TWO_DOUBLES(InstantDEX,maxaccept,base,rel,maxprice,basevolume);

3
includes/iguana_funcs.h

@ -542,6 +542,9 @@ void iguana_RTspendvectors(struct supernet_info *myinfo,struct iguana_info *coin
double instantdex_avehbla(struct supernet_info *myinfo,double retvals[4],char *base,char *rel,double basevolume);
int32_t bitcoin_revealsecret160(uint8_t *script,int32_t n,uint8_t secret160[20]);
int64_t iguana_lockval(int32_t finalized,int64_t locktime);
int64_t *iguana_PoS_weights(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_pkhash **Ptrp,int64_t *supplyp,int32_t *numacctsp,int32_t *nonzp,int32_t *errsp,int32_t lastheight);
int32_t iguana_staker_sort(struct iguana_info *coin,bits256 *hash2p,uint8_t *refrmd160,struct iguana_pkhash *refP,int64_t *weights,int32_t numweights,bits256 *sortbuf);
bits256 mpz_div64(bits256 hash,uint64_t divval);
// ------------------------------------------------------[ Preparation ]----
// Initialise a gfshare context for producing shares

12
includes/iguana_globals.h

@ -27,12 +27,12 @@ char *Iguana_validcommands[] =
};
#ifdef __PNACL__
char GLOBAL_TMPDIR[512] = "/DB/tmp";
char GLOBAL_DBDIR[512] = "/DB";
char GLOBAL_GENESISDIR[512] = "/genesis";
char GLOBAL_HELPDIR[512] = "/DB/help";
char GLOBAL_VALIDATEDIR[512] = "/DB/purgeable";
char GLOBAL_CONFSDIR[512] = "/DB/confs";
char GLOBAL_TMPDIR[512] = "/tmp";
char GLOBAL_DBDIR[512] = "DB";
char GLOBAL_GENESISDIR[512] = "genesis";
char GLOBAL_HELPDIR[512] = "DB/help";
char GLOBAL_VALIDATEDIR[512] = "DB/purgeable";
char GLOBAL_CONFSDIR[512] = "DB";
int32_t IGUANA_NUMHELPERS = 1;
#else
char GLOBAL_TMPDIR[512] = "tmp";

3
includes/iguana_structs.h

@ -349,6 +349,7 @@ struct iguana_bundle
bits256 prevbundlehash2,hashes[IGUANA_MAXBUNDLESIZE+1],nextbundlehash2,allhash,*speculative,validatehash;
struct iguana_ramchain ramchain; uint8_t red,green,blue;
struct iguana_spendvector *tmpspends; int32_t numtmpspends;
int64_t *weights,supply; int32_t numweights;
};
struct iguana_bundlereq
@ -400,7 +401,7 @@ struct iguana_info
struct OS_memspace TXMEM,MEM,MEMB[IGUANA_MAXBUNDLESIZE];
queue_t acceptQ,hdrsQ,blocksQ,priorityQ,possibleQ,cacheQ,recvQ,msgrequestQ;
double parsemillis,avetime; uint32_t Launched[8],Terminated[8];
portable_mutex_t peers_mutex,blocks_mutex;
portable_mutex_t peers_mutex,blocks_mutex,special_mutex;
char changeaddr[64];
struct iguana_bundle *bundles[IGUANA_MAXBUNDLES],*current,*lastpending;
struct iguana_ramchain RTramchain; struct OS_memspace RTmem,RThashmem; bits256 RThash1;

4
pnacl_main.h

@ -361,9 +361,9 @@ static PP_Bool Instance_DidCreate(PP_Instance instance,uint32_t argc,const char*
umount("/");
mount("", "/", "memfs", 0, "");
//mkdir("/tmp",0755);
mkdir("/DB",0755);
mkdir("DB",0755);
//mount("","/tmp","html5fs",0,"type=TEMPORARY,expected_size=2000000000");
mount("","/DB","html5fs",0,"type=PERSISTENT,expected_size=10000000000");
mount("","DB","html5fs",0,"type=PERSISTENT,expected_size=10000000000");
/*mount("", // source. Use relative URL
"/http", // target
"httpfs", // filesystemtype

26
tradebots/main.c

@ -0,0 +1,26 @@
/******************************************************************************
* Copyright © 2014-2016 The SuperNET Developers. *
* *
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
* the top-level directory of this distribution for the individual copyright *
* holder information and the developer policies on copyright and licensing. *
* *
* Unless otherwise agreed in a custom licensing agreement, no part of the *
* SuperNET software, including this file may be copied, modified, propagated *
* or distributed except according to the terms contained in the LICENSE file *
* *
* Removal or modification of this copyright notice is prohibited. *
* *
******************************************************************************/
#include "../iguana/iguana777.h"
void tradebots_LP(char *jsonstr);
int main(int argc,char **argv)
{
long filesize;
printf("Start Liquidity Provider\n");
tradebots_LP(OS_filestr(&filesize,"LP.conf"));
return(0);
}
Loading…
Cancel
Save