Added README and removed unwanted files

This commit is contained in:
sairajzero 2018-08-26 18:58:36 +05:30
parent 62cb52cdda
commit 7197915d69
88 changed files with 19 additions and 25566 deletions

View File

@ -1,7 +0,0 @@
import json
with open('AppData.json',encoding='utf-8') as F:
json_data=json.loads(F.read())
for app in json_data["Dapps"]:
print(app["name"])

17
README.md Executable file
View File

@ -0,0 +1,17 @@
# FLO-AppStore
This app lets to download, execute and manage other FLO apps
## Requirements
1. linux operating system(working on a cross platform version).
## Usage
1. Clone/download this repository. (https://github.com/sairajzero/FLO-appStore/)
2. Run the binary file (FLO_appStore)
./FLO_appStore
## Other Infos
1. Source code of the AppStore is main.py
2. Apps are downloaded in the apps directory
3. Icons for the apps are stored in icon directory
**Do not remove the directories and/or files mannually**

View File

@ -1,4 +0,0 @@
aterna love messaging platform
run ./auto-aterna-love.sh on your server to look for new messages
aterna-love.php parses and stores messages to database to display on front-end

View File

@ -1,125 +0,0 @@
#!/usr/bin/php
<?
// metacoin 2014
// floexplorer.php
// run this file in a cron or the provided shell script (or your own method) to constantly update the database
DEFINE('SECURITY', 1);
require ('florincoin-explorer/class/florin_rpc.php');
require ('include2/db.inc.php');
$r = new florin_RPC_client('florincoin-explorer/setup/setup.php', 1);
$setup = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$block_parser_dbinfo = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$lovedbh = get_dbh($setup);
$block_parser = get_dbh($block_parser_dbinfo);
$ADDRESS = 'F7To9UR9qvnj8QDQ1EPxtSzfSogREmn7HC';
$ACCOUNT = '';
$CONFIRMS = 0;
//$florin_rpc = new florin_RPC_client('setup/setup.php', 1);
//$block_parser = new block_parser($florin_rpc, 'setup/setup.php', isset($options['debug']), $options['a']);
$startTime = microtime(true);
/* BEGIN */
check_new_email_user($lovedbh);
check_if_we_sent_email();
check_user_validation($lovedbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS);
check_block_confirms($lovedbh, $r, $block_parser);
check_transaction_age();
/* END */
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
//echo "%%%%% Execution time : $elapsed seconds %%%%%\r\n\r\n";
function check_new_email_user($dbh) {
// checks to see if there is a new email submission, in which case a mail is sent out to that user with the token
// this function also checks if any users exist with mailsent = 0, which is the flag to re-send an email
$q = $dbh->query("select id, token from love where verified = 0 and done = 0 and mailsent = 0 and confirmed = 0");
$r = $q->fetchAll(PDO::FETCH_NUM);
if (!$r) {}
else {
foreach ($r as $thing) {
echo "!! found a new user who has filled in the form: " . $thing[0] . ") " . $thing[1] . "\n";
echo "~~ update love set verified = 1 where id = " . $thing[0] . "\n";
$q = $dbh->query("update love set verified = 1 where id = " . $thing[0]);
echo "~~ insert into tx (loveid) values (" . $thing[0] . ")\n";
$q = $dbh->query("insert into tx (loveid) values (" . $thing[0] . ")");
}
}
}
function check_if_we_sent_email() {
// check our mail API to see if we actually sent an email out or not. resend if we didn't
}
function check_user_validation($dbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS) {
// find a list of userinfo for users who aren't "done" with this process (They have not been given a txid yet)
$q = $dbh->query("select tx.txid, B.id, B.email, B.remail, B.name, B.rname, B.message from tx join (select id, email, remail, name, rname, message from love where verified = 1 and done = 0) as B where B.id = tx.loveid and tx.txid is null");
$z = $q->fetchAll(PDO::FETCH_NUM);
foreach ($z as $userinfo) {
$txcomment = "t1:ALOVE>" . $userinfo[6] . "|" . $userinfo[5] . "|" . $userinfo[4];
echo "~~~~~ found a new user who has verified their email: " . $userinfo[1] . ") " . $userinfo[2] . "->" . $userinfo[3] . " " . $txcomment . "\n";
$txid = check_available_transaction($r, $ACCOUNT, $ADDRESS, $CONFIRMS);
if (!$txid) {exit("***** FATAL ERROR: No transaction available to write to blockchain.\n");}
$newtxid = write_transaction_with_message($txid, $txcomment, $r, $ADDRESS);
if (!$newtxid) {exit("***** FATAL ERROR: couldn't write transaction to blockchain. $txid.\n");}
if (!$dbh->query("update love set done = 1, txid = '$newtxid' where id = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
if (!$dbh->query("update tx set txid = '$newtxid' where loveid = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update tx txid = $txid\n");}
/*
$q2 = $dbh->prepare("update love set txcomment = ? where id = " . ((int)$userinfo[1]));
$q2->bindValue(1, $txcomment, strlen($txcomment), PDO::PARAM_STR);
if ($q2->execute()) {}
else exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
*/
}
// find all transactions where users have validated their email but haven't been given a txid yet
//$q = ("select txid from tx join (select id from love where verified = 1 and done = 0) as B where B.id = tx.loveid");
}
function check_transaction_age() {
// checks transaction age to see when the transaction request was created. if it's older than a certain age, we must create the transaction again
// *** ONLY IF IT ISN'T IN THE MEMPOOL
}
function check_block_confirms($ldbh, $r, $dbh) {
//
$q = $ldbh->query("select txid, id from love where confirmed = 0 and verified = 1");
if ($q) { $z = $q->fetchAll(PDO::FETCH_NUM); }
foreach ($z as $userinfo) {
$confirmed = check_tx_confirms_rpc($dbh, $r, $userinfo[0]);
if ($confirmed) {
$ldbh->query("update love set confirmed = 1 where id = " . (int)$userinfo[1]);
echo "~~ " . $userinfo[0] . " is now confirmed with 5 confirms.\n";
}
}
$q2 = $ldbh->query("select id, email, txid, email, remail, name, rname, message from love where confirmed = 1 and verified = 1 and done = 1");
if ($q2) {
$z2 = $q2->fetchAll(PDO::FETCH_ASSOC);
foreach ($z2 as $userinfo2) {
//echo $userinfo2[0] . " (" . $userinfo2[2] . ") confirmed and email is ready to be sent\n";
send_final_email($userinfo2);
}
}
}
?>

View File

@ -1,7 +0,0 @@
#!/bin/sh
echo "_____ Aterna Love v1.0 - metacoin 2014\r\n - Aterna, Inc."
while [ true ]
do
php aterna-love.php 2>&1 | tee -a outfile
sleep 5
done

View File

@ -1,25 +0,0 @@
0.24 {
added create table statements to README
TODO: add a transaction vout/vin table
}
0.25 {
moved $rpc_setup to setup.php
added block_exporer api
added filter to block explorer
}
0.255 {
added transaction vout, transaction vin, and vout_address tables to database
raw transaction data is now displayed in a huamn readable manner in the block explorer web page
reorganization lookback call added to blockchain_cron
TODO: make vout_address.vout_id unique (currently there are duplicate entries created during reorg detection/handling)
TODO: add check for tx_db_id, n value to be unique (duplicate entry created during reorg detection/handling)
}
0.27 {
added txmp
added fees to tx page
optimized table datatypes (still needs work)
TODO: optimize table datatypes more!
}

View File

@ -1,7 +0,0 @@
Aterna, Inc. block explorer with txmp [transaction message protocol] 0.28
by metacoin 2013-12-29
Originally designed for Florincoin blockchain
http://florincoin.org
http://florincoin.info

View File

@ -1,249 +0,0 @@
<?
// this file is used to display the block explorer info to the web
// TODO: organize these functions into DB/RPC buckets
// make an include file for interface stuff ... prettyprint etc
class block_explorer {
function __construct($setup_file, $r) {
require($setup_file);
$this->rpc = $r;
$this->dbh = $dbh;
}
public function d_print($msg) {
if ($_SERVER['REMOTE_ADDR'] == 'myip') { var_dump($msg); }
}
public function getTXFromRPC($hash) {
$raw_tx= trim($this->rpc->call('getrawtransaction', $hash, 0, 0));
return $this->rpc->call('decoderawtransaction', $raw_tx, 0, 0);
}
public function getBlockFromRPC($hash, $id) {
if ($hash) {return $this->rpc->call('getblock', $hash, 0, 0);}
return $this->getBlockFromRPC(trim($this->rpc->call('getblockhash', $id, 0, 0)), 0, 0, 0);
}
public function getVinFromRPC($txid) {
$rtx = $this->rpc->call('getrawtransaction', $txid, 0, 0);
$dtx = $this->rpc->call('decoderawtransaction', $rtx, 0, 0);
return $dtx['vin'];
}
public function getAddressFromTxidAndVout($txid, $vout) {
$rtx = $this->rpc->call('getrawtransaction', $txid, 0, 0);
$dtx = $this->rpc->call('decoderawtransaction', $rtx, 0, 0);
return $dtx['vout'][$vout]['scriptPubKey']['addresses'][0];
}
public function getTotalOutputsFromTxByAddress($txid, $address) {
$rtx = $this->rpc->call('getrawtransaction', $txid, 0, 0);
$dtx = $this->rpc->call('decoderawtransaction', $rtx, 0, 0);
$total = 0;
foreach ($dtx['vout'] as $vout) {
if (in_array($address, $vout['scriptPubKey']['addresses'])) {$total += $vout['value'];}
}
return $total;
}
public function getBlockByID($block_id) {
$r = $this->dbh->prepare("select * from block where id = :block_id and inactive != 1");
$r->bindValue(':block_id', $block_id);
$r->execute();
return $r->fetch();
}
public function getBlockByHash($block_hash) {
$r = $this->dbh->prepare('select * from block where hash = ?');
$r->bindParam(1, $block_hash, PDO::PARAM_STR, strlen($block_hash));
$r->execute();
return $r->fetch();
}
public function getTXById($tx_id) {
$r = $this->dbh->prepare("select * from tx where id = :tx_id and inactive != 1");
$r->bindValue(':tx_id', $tx_id);
$r->execute();
return $r->fetch();
}
public function getTxByHash($tx_hash) {
$r = $this->dbh->prepare('select * from tx where hash = ? and inactive != 1');
$r->bindValue(1, $tx_hash, PDO::PARAM_STR);
$r->execute();
return($r->fetch());
}
public function getRecentBlocks($num_blocks) {
$r = $this->dbh->query("select value from control where name = 'lastblock'");
$v = $r->fetch();
for ($i = 0; $i < $num_blocks; $i++) {
$blocks[] = $this->getBlockById($v[0] - $i);
}
return $blocks;
}
public function getTxsInBlock($block_id) {
$r = $this->dbh->prepare("select hash from tx where block = :block_id and inactive != 1");
$r->bindValue(':block_id', $block_id);
$r->execute();
return $r->fetchAll(PDO::FETCH_ASSOC);
}
public function getTotalCoinsMinted() {
$r = $this->dbh->query("select sum(outputs) from tx where coinbase = 1 and inactive != 1");
return $r->fetch(PDO::FETCH_NUM);
}
public function getOutputFromTx($tx_hash) {
$r = $this->dbh->prepare("select outputs from tx where tx = :tx_hash and inactive != 1");
$r->bindValue(':tx_hash', $tx_hash);
return $r->fetch(PDO::FETCH_NUM);
}
public function getOutputFromHashAndVout($tx_hash, $vout) {
$r = $this->dbh->prepare("select value from vout where inactive != 1 as a join (select id from tx where hash = :tx_hash and inactive != 1) as b where n = :vout and tx_db_id = b.id limit 1;");
$r->bindValue(':tx_hash', $tx_hash);
$r->bindValue(':vout', $vout);
return $r->fetch(PDO::FETCH_NUM);
}
public function getTxHashFromDBID($tx_db_id) {
$r = $this->dbh->query("select hash from tx where id = $tx_db_id and inactive != 1 LIMIT 1");
$v = $r->fetch(PDO::FETCH_NUM);
return $v[0];
}
public function getTxsFromAddress($addr) {
/* $r = $this->dbh->prepare("select distinct value, tx_db_id from vout as A join (select vout_id from vout_address where address = ?) as B where A.id = B.vout_id"); */
try {
$r = $this->dbh->prepare("select distinct time, F.value, F.hash from block as G join (select D.value, hash, block from tx as C join (select value, tx_db_id from vout as A join (select vout_id from vout_address where address = ? and vout_address.inactive != 1) as B where A.id = B.vout_id and A.inactive != 1) as D where D.tx_db_id = C.id and C.inactive != 1) as F where F.block = G.id and G.inactive != 1 order by time desc");
$r->bindValue(1, $addr, PDO::PARAM_STR);
$r->execute();
}
catch (PDOException $exception) {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
var_dump($exception->getMessage());
}
return $r->fetchAll(PDO::FETCH_ASSOC);
}
// search transaction address block index
public function searchTABI($string) {
if (!ctype_alnum($string)) return;
// check for address
if (strlen($string) == 34) {
try {
$r = $this->dbh->prepare("select address from vout_address where address = :address and inactive != 1");
$r->bindValue(':address', $string);
$r->execute();
}
catch (PDOException $exception) { }
$v = $r->fetch(PDO::FETCH_NUM);
$address = $v[0];
if ($v && ctype_alnum($address)) { return("Location: address/?address=" . $v[0]); }
}
// check for block id
if (is_numeric($string)) {
try {
$r = $this->dbh->prepare("select id from block where id = :string and inactive != 1");
$r->bindValue(':string', $string);
$r->execute();
}
catch (PDOException $exception) { }
$v = $r->fetch(PDO::FETCH_NUM);
$blockid = $v[0];
if ($v && is_numeric($blockid)) { return("Location: block/?id=" . $v[0]); }
}
// check for block hash
try {
$r = $this->dbh->prepare("select hash from block where hash = :string and inactive != 1");
$r->bindValue(':string', $string);
$r->execute();
}
catch (PDOException $exception) {
//$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//var_dump($exception->getMessage());
//echo "testing";
}
$v = $r->fetch(PDO::FETCH_NUM);
$blockhash = $v[0];
if ($v && ctype_alnum($blockhash)) { return("Location: block/?hash=" . $v[0]); }
else {
// check for tx hash
try {
$r = $this->dbh->prepare("select hash from tx where hash = :string and inactive != 1");
$r->bindValue(':string', $string);
$r->execute();
}
catch (PDOException $exception) { }
$v = $r->fetch(PDO::FETCH_NUM);
$txhash = $v[0];
if ($v && ctype_alnum($txhash)) { return("Location: tx/?txid=" . $v[0]); }
}
}
}
function satoshi($num) { return number_format((float)($num/100000000), 8, '.', ''); }
// thanks Kendall Hopkins http://stackoverflow.com/a/9776726/2576956
function prettyPrint( $json )
{
$result = '';
$level = 0;
$prev_char = '';
$in_quotes = false;
$ends_line_level = NULL;
$json_length = strlen( $json );
for( $i = 0; $i < $json_length; $i++ ) {
$char = $json[$i];
$new_line_level = NULL;
$post = "";
if( $ends_line_level !== NULL ) {
$new_line_level = $ends_line_level;
$ends_line_level = NULL;
}
if( $char === '"' && $prev_char != '\\' ) {
$in_quotes = !$in_quotes;
} else if( ! $in_quotes ) {
switch( $char ) {
case '}': case ']':
$level--;
$ends_line_level = NULL;
$new_line_level = $level;
break;
case '{': case '[':
$level++;
case ',':
$ends_line_level = $level;
break;
case ':':
$post = " ";
break;
case " ": case " ": case "\n": case "\r":
$char = "";
$ends_line_level = $new_line_level;
$new_line_level = NULL;
break;
}
}
if( $new_line_level !== NULL ) {
$result .= "\n".str_repeat( " ", $new_line_level );
}
$result .= $char.$post;
$prev_char = $char;
}
return $result;
}
?>

View File

@ -1,22 +0,0 @@
#!/usr/bin/php
<?
// TODO: organize these fucking functions into DB/RPC buckets
// make an include file for interface shit... prettyprint etc
include(__DIR__ . '/../setup/setup.php');
include(__DIR__ . '/../class/florin_rpc.php');
$r = new florin_RPC_client($setup["FLORIND"], 5, $rpc_setup);
$t = new txmp($r, $dbh);
class txmp {
function __construct($r, $dbh) {
$this->rpc = $r;
$this->dbh = $dbh;
}
public function getFullTXMPList() {
$r = $this->dbh->query("select * from txmp");
return $r->fetchAll();
}
}
?>

View File

@ -1,10 +0,0 @@
#!/bin/sh
trap '{
php floexplorer.php -a unlock --debug
exit 0
}' INT
while [ true ]
do
php floexplorer.php -a rescan -b 120 --debug 2>&1 | tee -a outfile
sleep 25
done

View File

@ -1,752 +0,0 @@
<?
/*
TODO: abstract DB functions to enable new DB types
TODO: use daux.io for comments and documentation
*/
/* block parser class
VARIABLES:
$dbh - PDO database object
$control_count - currently, the script updates the control database field every 100 blocks
$rpc - a florin RPC object for making calls to florincoind
$debug - if debug is set, important info will be output to the log
$action - the action specified from the -a flag when running the program
FUNCTIONS:
decho($m) - output the message passed through $m and output it if the $debug flag is set
get_lockdb() - returns 0 if the DB is locked, 1 if it is locked
set_lockdb($value) - sets lockdb to $value, outputs any warnings regarding the lockstatus
testSimple() - test function that is run via the "test" action
database_write_block($data) - $data is the block being worked on currently
this function first uses verifyRawTX() to store transaction data, then stores block data
verifyRawTX($hash, $block) - the $hash here refers to the transaction hash found in the block $block (which is the index of the block - not its hash or object)
verifyRawTX goes through and stores the transaction into the tx table
it also calls the TXMP process for filtering transaction comments
verifyRawTX then goes through the inputs and outputs of the transaction and stores them into their respective tables
fillVin($vin, $db_id) - $vin is the object containing vin data in an array, $db_id is the index of the transaction within the tx table
fillVin stores the reference to the previous transaction referenced by this one
fillVout($vout, $db_id, $txid) - $vout is the output object, $db_id is the current transaction id within the tx table, $txid is the hash of the transaction we're currently focusing on
fillVout will store both the vout table values to associate each vout with a txid
fillVout also stores the address in each vout in a separate table for faster indexing
getHeight() - returns an array with all relevant info on block height
[0] = how many blocks missing
[1] = current height of blockchain from RPC call
[2] = index of latest block in database
testScanComments($from) - display all comments from block $from and higher
rescan($start, $back) - $start is the block to start at, unless $back is set, in which case the program starts at block height - $back
this function looks for reorganizations within the blockchain using fillInBlanks
fillInBlanks($delete, $delete_all, $start) - if $delete isn't set, the function will not delete anything. $delete_all will delete everything from tables (shouldn't use this, it's better to drop tables). $start is where program should start (which block height)
fillInBlanks first handles deleting all data from the database if it doesn't match the current block structure. it then goes through the missing blocks and calls database_write_block for each block that is missing. the rest is history ...
initial_setup() - temporary function for creating tables for the first time when running aterna with the "setup" command. this will populate MySQL database tables
*/
class block_parser {
public $dbh;
public $control_count;
public function __construct($rpc, $setup_file, $debug, $action) {
require($setup_file);
$this->rpc = $rpc;
$this->dbh = $dbh;
$this->debug = $debug;
$this->action = $action;
$this->control_count= 0;
}
function decho($m) { if ($this->debug) echo $m . "\r\n"; return $this->debug; }
function get_lockdb() {
$q = $this->dbh->query("select value from control where name = 'lockdb'");
$v = $q->fetch();
return (int)$v[0];
}
function set_lockdb($value) {
// if we're trying to lock the database, and it's already locked, just exit
if ($value == 1 && $this->get_lockdb() == 1 && $this->action != "unlock") {
if ($this->action == "lock") echo "&& DB already locked. EXITING PROGRAM\r\n";
// if set_lockdb is called outside of the lock/unlock action
else echo "&& DB locked ... process is currently running.\r\n&& if it isn't, execute \"./floexplorer -a unlock\" to force the DB to unlock itself.\r\n&& only do this if you are certain there is no other process modifying this database now. \r\n&& EXITING PROGRAM\r\n";
exit();
}
// otherwise, just update to $value
$this->dbh->query("update control set value = '$value', entry = unix_timestamp(now()) where name = 'lockdb'");
echo "&& lockdb set to $value\r\n";
}
function testSimple() {
$count = 0;
foreach ($this->dbh->query("select address, ((sum(value)*100)-sum(value))/100000000 as v from vout_address as a join (select a.id, a.value from vout as a join (select tx.id from tx where outputs = 100000000 and coinbase = 1) as b where a.tx_db_id = b.id) as b where a.vout_id = b.id group by address order by v") as $txid) {
echo $txid[0] . "\t" . $txid[1] . "\r\n";
$count++;
}
echo "Total: $count";
}
function database_write_block($data) {
$hash = $data['hash'];
$total_coins = 0;
// if we're not in the genesis block
if ($hash != "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea") {
$this->decho("block " . $data["height"] . " hash $hash time " . $data["time"] . " nonce " . $data["nonce"] . " size " . $data["size"]);
// go through transactions in the block
foreach ($data['tx'] as $txhash) {
if ($coins = $this->verifyRawTX($txhash, $data["height"])) {$total_coins += $coins;}
else { echo "* * * WARNING: could not fully parse block " . $data['height'] . "(failure to read tx $txhash) * * *\r\n"; }
}
// if we've parsed 100 blocks, update the control table
$this->control_count++;
if (!$data["nextblockhash"] || $this->control_count % 100 == 0) {
$this->dbh->query($q = "update control set value = '" . $data["height"] . "', entry = unix_timestamp(now()) where name = 'lastblock'");
$this->decho("block " . $data["height"] . " UPDATE CONTROL SET VALUE = '" . $data["height"] . "' WHERE NAME = 'lastblock'");
// echo "No next block, updating control for next time\r\n". $q . "\r\n";
}
}
// write block
if ($hash == "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea") {
echo "||||| GENESIS BLOCK\r\n";
echo $q = 'insert into block (id, hash, prev, next, time, diff, txs, total_coins, size, merk, nonce, version, inactive) values (' . $data["height"] . ', "' . $data["hash"] . '", "", "' . $data["nextblockhash"] . '", ' . $data["time"] . ', ' . $data["difficulty"] . ', ' . count($data["tx"]) . ', ' . $total_coins . ', ' . $data["size"] . ', "' . $data["merkleroot"] . '", ' . $data["nonce"] . ', ' . $data["version"] . ', 0)';
echo "\r\n";
} else {
$q = 'insert into block (id, hash, prev, next, time, diff, txs, total_coins, size, merk, nonce, version, inactive) values (' . $data["height"] . ', "' . $data["hash"] . '", "' . $data["previousblockhash"] . '", "' . $data["nextblockhash"] . '", ' . $data["time"] . ', ' . $data["difficulty"] . ', ' . count($data["tx"]) . ', ' . $total_coins . ', ' . $data["size"] . ', "' . $data["merkleroot"] . '", ' . $data["nonce"] . ', ' . $data["version"] . ', 0)';
}
if (!$this->dbh->query($q)) {
echo "***** FATAL ERROR: couldn't write block " . $data['height'] . " into database.\r\n";
echo $q . "\r\n";
$this->set_lockdb(0);
exit();
}
}
function verifyRawTX($hash, $block) {
if ($hash == "730f0c8ddc5a592d5512566890e2a73e45feaa6748b24b849d1c29a7ab2b2300") {
$this->decho("||||| genesis block tx found\r\n");
} else {
// decode and get json from this tx hex
$raw_tx= trim($this->rpc->call('getrawtransaction', $hash));
$decoded_tx = $this->rpc->call('decoderawtransaction', $raw_tx);
// add up all inputs/outputs
$satoshi = 100000000;
$coinbase = 0;
foreach ($decoded_tx["vout"] as $out) $outputs += round($out["value"] * $satoshi);
foreach ($decoded_tx['vin'] as $in) if (isset($in['coinbase'])) $coinbase = 1;
//foreach ($raw_tx["vin"] as $in) $inputs += $in["value"] * $satoshi;
$size = (strlen($raw_tx))/2;
$this->decho("block $block txid $hash inputs $inputs size $size outputs $outputs");
// sometimes the tx-comment is null, false, or empty string, let's store it in the DB as just NULL for any of these cases
$txc_fix = $decoded_tx['tx-comment'];
if ($txc_fix === "" || $txc_fix === FALSE) { $txc_fix = NULL; }
$rtime = (int)(microtime(1) * 10000);
$stmt = $this->dbh->prepare('insert into tx (hash, block, message, outputs, inputs, size, version, coinbase, inactive, rtime) values (?, ?, ?, ?, ?, ?, ?, ?, 0, ' . $rtime . ')');
$stmt->bindParam(1, $hash, PDO::PARAM_STR, strlen($hash));
$stmt->bindParam(2, $block, PDO::PARAM_INT);
$stmt->bindParam(3, $txc_fix, PDO::PARAM_STR, strlen($txc_fix));
$stmt->bindParam(4, $outputs, PDO::PARAM_INT);
$stmt->bindParam(5, $inputs, PDO::PARAM_INT);
$stmt->bindParam(6, $size, PDO::PARAM_INT);
$stmt->bindParam(7, $decoded_tx["version"], PDO::PARAM_INT);
$stmt->bindParam(8, $coinbase, PDO::PARAM_INT);
$stmt->execute();
$r = $this->dbh->query("select id from tx where hash = '$hash' and rtime = $rtime");
$db_id = $r->fetchAll();
$db_id = $db_id[0];
if (!$db_id) {
$this->decho("***** FATAL ERROR: database returned no index for tx - txid = $hash *****");
$this->set_lockdb(0);
exit();
}
// store vout and vin data
foreach ($decoded_tx['vout'] as $vout) { $this->fillVout($vout, $db_id[0], $hash); }
foreach ($decoded_tx['vin'] as $vin) { $this->fillVin($vin, $db_id[0], $coinbase); }
// return coins
return $outputs;
}
return; // return null if error
}
function fillVin($vin, $db_id, $coinbase) {
$db_id = (int)($db_id);
$txid = $vin['txid'];
// find the db_id referenced by txid
$q = $this->dbh->query("select id from tx where hash = '$txid'");
$r = $q->fetchAll();
$prev_tx_db_id = $r[0][0];
// find the address associated with this vin
if (isset($prev_tx_db_id) && isset($db_id) && isset($vin['txid']) && isset($vin['vout']) && !$coinbase) {
$addr = $this->dbh->query($q = 'select address from vout_address as A join (select id from vout where n = ' . (int)$vin['vout'] . ' and tx_db_id = ' . $prev_tx_db_id . ') as B where A.vout_id = B.id');
$address = $addr->fetchAll();
$address = $address[0][0];
}
$stmt = $this->dbh->prepare('insert into vin (vout, tx_db_id, txid, address, coinbase) values (?, ?, ?, ?, ?)');
$stmt->bindParam(1, $vin['vout'], PDO::PARAM_INT);
$stmt->bindParam(2, $db_id, PDO::PARAM_INT);
$stmt->bindParam(3, $txid, PDO::PARAM_STR, strlen($txid));
$stmt->bindParam(4, $address, PDO::PARAM_STR, strlen($address));
$stmt->bindParam(5, $coinbase, PDO::PARAM_INT);
if (!$stmt->execute()) {
$this->decho("***** FATAL ERROR: could not write vin into DB (txid: $txid, vout: " . $vin['vout'] . ")\r\n");
$this->set_lockdb(0);
exit();
}
}
function fillVout($vout, $db_id, $txid) {
$satoshi = 100000000;
// write each vout into vout table
$stmt = $this->dbh->prepare('insert into vout (tx_db_id, value, n) values (?, ?, ?)');
$val = round($vout['value']*$satoshi);
$stmt->bindParam(1, $db_id, PDO::PARAM_INT);
$stmt->bindParam(2, $val, PDO::PARAM_INT);
$stmt->bindParam(3, $vout['n'], PDO::PARAM_INT);
if (!$stmt->execute()) {
$this->decho("***** FATAL ERROR: could not write vout into DB (tx_db_id: $db_id, n: " . $vout['n'] . ")\r\n");
$this->set_lockdb(0);
exit();
}
$db_id = (int)$this->dbh->lastInsertId();
if (!isset($vout['scriptPubKey']['addresses'])) return;
// write each address into vout_address table
foreach ($vout['scriptPubKey']['addresses'] as $address) {
$stmt = $this->dbh->prepare('insert into vout_address (vout_id, address) values (?, ?)');
$stmt->bindParam(1, $db_id, PDO::PARAM_INT);
$stmt->bindParam(2, $address, PDO::PARAM_STR, strlen($address));
if (!$stmt->execute()) {
$this->decho("***** FATAL ERROR: could not write vout_address into DB (vout_id: $db_id)\r\n");
$this->set_lockdb(0);
exit();
}
}
}
function getHeight() {
$r = $this->dbh->query("select MAX(id) from block where inactive = 0");
$v = $r->fetch();
$max_id = $v[0]; // max block in DB
$height = $this->rpc->call('getblockcount'); // max block in local blockchain
$r2 = $this->dbh->query("select value from control where name = 'lastblock'");
$v2 = $r2->fetch();
$controlMax = $v2[0]; // max block in control table under value "lastblock"
if ($controlMax <= $max_id) {
$max_id = $controlMax;
}
else echo "-- Database is up to date [$max_id/$height]\r\n";
return array($height - $max_id, $height, $max_id, $controlMax);
}
function testScanComments($from) {
if (!$from) $from = 0;
else $from = (int)$from;
$height = $this->getHeight();
for ($i = $from; $i <= $height[1]; $i++) {
$block_hash = $this->rpc->call('getblockhash', $i);
$block = $this->rpc->call('getblock', $block_hash);
$this->decho("looking through block $i which has " . count($block['tx']) . "tx...");
foreach ($block['tx'] as $txnum=>$txhash) {
if ($txc = $this->get_tx_comment($txhash)) {
$txcs[$block["height"]] = $txc;
echo "$i/" . $height[1] . ": $txnum: $txc\r\n";
}
}
}
}
function rescan_tx($hash, $block) {
$this->decho("=- rescanning tx $hash in block $block");
$rawtx = $this->rpc->call('getrawtransaction', $hash);
$dectx = $this->rpc->call('decoderawtransaction', $rawtx);
$blockid = $block['height'];
$message = $dectx['tx-comment'];
// find tx data and check if it's the same as database data
$q = $this->dbh->query($dbq = "select id, hash, block, message from tx where hash = '$hash' and inactive = 0");
$r = $q->fetchAll(PDO::FETCH_NUM);
// if any transactions should be inactive, find them and add them to list
// current criteria: transaction not found within this block any more, transaction message is different (somehow)
$inactive_tx = null;
foreach ($r as $result_row) {
//echo "txid: $hash ? blocks match[" . ($result_row[2] == $blockid) . "] && tx-comments match[" . ($result_row[3] == $message) . "]\r\n";
if ($result_row[2] != $blockid || $result_row[3] != $message) {
$inactive_tx[] = $result_row[0];
}
}
// if there are some inactive tx, make them inactive
if (count($inactive_tx) > 0) {
echo "\r\n=-=-=-=-=-= FOUND INACTIVE TRANSACTIONS!\r\n";
foreach ($inactive_tx as $tx_db_id) {
// make inactive each transaction
$this->decho("=- update tx set inactive = 1 where id = $tx_db_id");
if (!$this->dbh->query("update tx set inactive = 1 where id = $tx_db_id")) {
$this->decho("***** FATAL ERROR: cannot update tx $tx_db_id to inactive");
$this->set_lockdb(0);
exit();
}
// make inactive each vin
$this->decho("=- update vin set inactive = 1 where tx_db_id = $tx_db_id");
if (!$this->dbh->query("update vin set inactive = 1 where tx_db_id = $tx_db_id")) {
$this->decho("***** FATAL ERROR: cannot update vin table to set all vin where tx_db_id = $tx_db_id to inactive");
$this->set_lockdb(0);
exit();
}
// get a list of all vout, make them all inactive
$r3 = $this->dbh->query("select id from vout where tx_db_id = $tx_db_id");
$v3 = $r3->fetchAll(PDO::FETCH_NUM);
foreach ($v3 as $vout_db_id) {
$vout_db_id = (int)$vout_db_id[0];
$this->decho("=- update vout_address set inactive = 1 where vout_id = $vout_db_id");
if (!$this->dbh->query("update vout_address set inactive = 1 where vout_id = $vout_db_id")) {
$this->decho("***** FATAL ERROR: cannot update vout_address table to set all vout_address where vout_id = $vout_db_id inactive");
$this->set_lockdb(0);
exit();
}
}
// make the vouts inactive
$this->decho("=- update vout set inactive = 1 where tx_db_id = $tx_db_id");
if (!$this->dbh->query("update vout set inactive = 1 where tx_db_id = $tx_db_id")) {
$this->decho("***** FATAL ERROR: cannot update vout table to set all vout where tx_db_id = $tx_db_id to inactive");
$this->set_lockdb(0);
exit();
}
}
return true;
}
}
function rescan($start, $back) {
$height = $this->getHeight();
if ($height[1] > $height[2]) echo "\r\n-- Found incomplete data in database [$height[2]/$height[1]] (control last recorded: $height[3])\r\n";
$rpc_height = $height[1];
// get the highest block in our database according to control field
$r = $this->dbh->query("select value from control where name = 'lastblock'");
$v = $r->fetch();
$db_lastblock = (int)$v[0];
// check the highest block in our database according to max(ID) vs control field
if ($height[2] < $db_lastblock) {
$this->decho("* * * WARNING: inconsistent data in control table - lastblock = $db_lastblock, max(id) from block = " . $height[2]);
$db_lastblock = $height[2];
}
// start looking through blocks starting at the minimum block minus our preset value
if ($back) { $start = $db_lastblock - $back; }
if ($start < 0) $start = 0;
$this->decho("-- scanning last $back blocks (from height $start to $rpc_height)...");
for ($i = $start; $i <= $rpc_height; $i++) {
// retrieve block data from DB
$r = $this->dbh->query("select hash, next, prev from block where id = $i and inactive = 0");
$v = $r->fetch();
// retrieve block data from RPC
$rpc_block_hash = $this->rpc->call('getblockhash', $i);
$rpc_block_full = $this->rpc->call('getblock', $rpc_block_hash);
$rpc_block_next = $rpc_block_full['nextblockhash'];
$rpc_block_prev = $rpc_block_full['previousblockhash'];
// check next and previous blocks
if ($v[1] != $rpc_block_next) {
echo ("@@ found inconsistent data at block $i: db says next block is " . $v[1] . ", RPC says $rpc_block_next\r\n");
if (!$this->dbh->query("update block set next = '$rpc_block_next' where id = $i and inactive != 1")) {
echo ("***** FATAL ERROR: could not update block $i with new next value $rpc_block_next, exiting *****\r\n");
$this->set_lockdb(0);
exit();
}
$this->decho("~~ update block set next = '$rpc_block_next' where id = $i and inactive != 1");
}
if ($v[2] != $rpc_block_prev) {
echo ("@@ found inconsistent data at block $i: db says previous block is " . $v[2] . ", RPC says $rpc_block_prev\r\n");
if (!$q = $this->dbh->query("update block set prev = '$rpc_block_prev' where id = $i and inactive != 1")) {
echo ("***** FATAL ERROR: could not update block $i with new prev value $rpc_block_prev, exiting *****\r\n");
$this->set_lockdb(0);
exit();
}
$this->decho("~~ update block set prev = '$rpc_block_prev' where id = $i and inactive != 1");
}
if ($break_after_checking_header == 1) break;
// check block hash - this is the big one
if ($v[0] != $rpc_block_hash) {
echo ("@@ found reorg or inconsistent data: db says block $i is hash " . $v[0] . ", RPC says $rpc_block_hash\r\n");
// find all transactions in the database in this block, and make sure they are all valid
$q = $this->dbh->query($dbq = "select hash from tx as A join (select id from block where hash = '$rpc_block_hash') as B where B.id = A.block and A.inactive = 0");
$r = $q->fetchAll(PDO::FETCH_NUM);
if (count($r) > 0) {
echo("$i ");
$break_after_checking_header = 0;
foreach ($r as $tx) {
if ($this->rescan_tx($tx[0], $rpc_block_full)) {
$this->fillInBlanks(1, 0, $i);
$break_after_checking_header = 1;
break;
}
}
}
// make inactive all following blocks, start at the current position (reorg handling)
$this->fillInBlanks(1, 0, $i);
break;
}
}
}
// TODO: separate delete from the rest of the function
function fillInBlanks($delete, $delete_all, $start) {
$height = $this->getHeight();
/* BEGIN DELETE METHOD */
if ($delete) {
if ($start) $delete_start = $start;
else $delete_start = $height[2];
$this->dbh->beginTransaction();
$start = $delete_start;
echo "@@ making everything inactive from $delete_start to highest block found\r\n";
$r = $this->dbh->query("select id from block where id >= " . $delete_start . " and inactive != 1");
$this->decho("@@ select id from block where id >= " . $delete_start . " and inactive != 1");
$v = $r->fetchAll(PDO::FETCH_NUM);
if (count($v) < 1) $this->decho("@@ no data in database on this block yet, skipping reorg handling procedure");
// reorg handling procedure (make the block, all its transactions, and all related data inactive)
foreach ($v as $block_db_id) {
$block_db_id = (int)$block_db_id[0];
$r2 = $this->dbh->query("select id from tx where block = $block_db_id");
$v2 = $r2->fetchAll(PDO::FETCH_NUM);
foreach($v2 as $tx_db_id) {
$tx_db_id = (int)$tx_db_id[0];
$r3 = $this->dbh->query("select id from vout where tx_db_id = $tx_db_id");
$v3 = $r3->fetchAll(PDO::FETCH_NUM);
foreach ($v3 as $vout_db_id) {
$vout_db_id = (int)$vout_db_id[0];
$this->decho("@@ update vout_address set inactive = 1 where vout_id = $vout_db_id");
$this->dbh->query("update vout_address set inactive = 1 where vout_id = $vout_db_id");
}
$this->decho("@@ update vout set inactive = 1 where tx_db_id = $tx_db_id");
$this->dbh->query("update vout set inactive = 1 where tx_db_id = $tx_db_id");
$this->dbh->query("update vin set inactive = 1 where tx_db_id = $tx_db_id");
$this->decho("@@ update vin set inactive = 1 where tx_db_id = $tx_db_id");
}
$this->decho("@@ update tx set inactive = 1 where block = $block_db_id");
$this->dbh->query(" update tx set inactive = 1 where block = $block_db_id");
$this->decho("@@ update block set inactive = 1 where id = $block_db_id");
$this->dbh->query(" update block set inactive = 1 where id = $block_db_id");
}
$this->dbh->commit();
}
else if (!$start) { $start = $height[2]+1; }
/* END DELETE METHOD */
// begin reading blockchain
echo "===== Filling in the last " . ($height[1]-$start+1) . " block" . ((($height[1]-$start+1)>1)?('s'):('')) . ": height $start to " . $height[1] . "\r\n";
for ($i = $start; $i <= $height[1]; $i++) {
$block_hash = $this->rpc->call('getblockhash', $i);
$block = $this->rpc->call('getblock', $block_hash);
$this->database_write_block($block);
}
return $height[0] . ' ' . $height[1];
}
function initial_setup() {
$this->decho("Creating block table...");
/* block table...
recorded in this table is all block info possible
id = database index
hash = this block's hash
prev = previous block hash
next = next block hash
time = unixtime of this block as reported by miner
diff = difficulty at the time of this block
txs = transactions within this block
total_coins = total coins sent through this block
size = size of this block in bytes
merk = merkle root
nonce = the nonce found by the miner who solved this block
version = version no
*/
$this->dbh->query("
CREATE TABLE `block` (
`id` bigint(20) NOT NULL,
`hash` char(64) DEFAULT NULL,
`prev` char(64) DEFAULT NULL,
`next` char(64) DEFAULT NULL,
`time` bigint(20) DEFAULT NULL,
`diff` float DEFAULT NULL,
`txs` int(11) DEFAULT NULL,
`total_coins` decimal(20,0) DEFAULT NULL,
`size` bigint(20) DEFAULT NULL,
`merk` char(64) DEFAULT NULL,
`nonce` bigint(20) DEFAULT NULL,
`version` float DEFAULT NULL,
`inactive` tinyint(1) DEFAULT 0,
INDEX `id_index` (`id`),
INDEX `hash_index` (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1");
$this->dbh->query("truncate table block");
/* color_coin_tx table...
this table tracks all color coin transactions
id = database index
tx_db_id = database index of the florin transaction referenced in this row
cc_db_id = database index of the color coin transaction referenced in this row
from_address = the address this color coin transaction was sent from
to_address = the address this color coin was sent to
amount = the amount of color coins sent in this transaction (satoshis)
genesis = is this a genesis transaction? (was the color coin created in this tx?)
valid = **IMPORTANT** valid or invalid transaction (checked from previous chain data)
*/
$this->decho("Creating color_coin_tx table...");
$this->dbh->query("
CREATE TABLE `color_coin_tx` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tx_db_id` bigint(20) DEFAULT NULL,
`cc_db_id` bigint(20) DEFAULT NULL,
`from_address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`to_address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`amount` bigint(20) DEFAULT NULL,
`genesis` bit(1) DEFAULT NULL,
`valid` bit(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tx_db_id` (`tx_db_id`),
KEY `cc_db_id` (`cc_db_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
");
$this->dbh->query("truncate table color_coin_tx");
/* color_coins table...
this table contains a list of all color coins, NOT color coin transactions
id = database index
tx_db_id = database index of florin transaction referenced in this row
total_amount = number of total coins in this color coin set (satoshis)
name = name of this coin
address = originator's address
valid = is a valid coin (maybe this column shouldn't exist)
avatar = url for this avatar
*/
$this->decho("Creating color_coins table...");
$this->dbh->query("
CREATE TABLE `color_coins` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tx_db_id` bigint(20) DEFAULT NULL,
`total_amount` bigint(20) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`valid` bit(1) NOT NULL,
`avatar` varchar(140) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `address` (`address`),
KEY `tx_db_id` (`tx_db_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
");
$this->dbh->query("truncate table color_coins");
/* control table...
**this is not a usual table. each row is a key value pair essentially.**
id = database index
name = name of this row (key)
value = value of this row
entry = timestamp of the last time this row was modified
*/
$this->decho("Creating control table...");
$this->dbh->query("
CREATE TABLE `control` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`value` varchar(200) DEFAULT NULL,
`entry` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
");
$this->dbh->query("truncate table control");
/* filter table...
** this goes against everything i believe in **
txid = transaction id to omit the tx-comment from...
user = address to omit the tx-comments from....
thank god i haven't had to use this yet.
*/
$this->decho("Creating filter table...");
$this->dbh->query("
CREATE TABLE `filter` (
`txid` char(64) DEFAULT NULL,
`user` char(34) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
");
$this->dbh->query("truncate table filter");
/* tx table...
this table contains data on all transactions within the FLO blockchain
id = database index
hash = the hash of this transaction, otherwise known as "txid"
block = the numerical block this transaction is found in
message = the tx-comment in this tx
outputs = total coins output from this tx (satoshis)
inputs = total coins input in to this tx (not implemented yet...)
size = size in bytes
version = version no
coinbase = boolean whether or not this transaction is a coinbase tx
*/
$this->decho("Creating tx table...");
$this->dbh->query("
CREATE TABLE `tx` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`hash` char(64) DEFAULT NULL,
`block` bigint(14) DEFAULT NULL,
`message` varchar(528) DEFAULT NULL,
`outputs` bigint(20) DEFAULT NULL,
`inputs` bigint(20) DEFAULT NULL,
`size` bigint(20) DEFAULT NULL,
`version` int(2) DEFAULT NULL,
`coinbase` tinyint(1) DEFAULT NULL,
`inactive` tinyint(1) DEFAULT 0,
`rtime` bigint(14) DEFAULT 0,
INDEX `id_index` (`id`),
INDEX `hash_index` (`hash`),
INDEX `message_index` (`message`)
) ENGINE=InnoDB CHARSET=latin1
");
$this->dbh->query("truncate table tx");
/* txmp table...
this table simply lists all transactions that are part of txmp (the transaction message protocol)
id = database index
tx_db_id = database index of the FLO transaction in question
*/
$this->decho("Creating txmp table...");
$this->dbh->query("
CREATE TABLE `txmp` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tx_db_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tx_db_id` (`tx_db_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
");
$this->dbh->query("truncate table txmp");
/* vin table...
the vin table holds all values from the input of a transaction
id = database index
vout = the vout number this input is assigned within the transaction
tx_db_id = the database index of the transaction this vin is contained within
*/
$this->decho("Creating vin table...");
$this->dbh->query("
CREATE TABLE `vin` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`vout` int(11) DEFAULT NULL,
`tx_db_id` bigint(20) DEFAULT NULL,
`txid` char(64) DEFAULT NULL,
`coinbase` tinyint(1) DEFAULT NULL,
`address` char(34) CHARACTER SET latin1 COLLATE latin1_bin,
`multiaddr` tinyint(1),
`inactive` tinyint(1) DEFAULT 0,
INDEX `id_index` (`id`),
INDEX `tx_db_id_index` (`tx_db_id`),
INDEX `txid_index` (`txid`),
INDEX `address_index` (`address`),
INDEX `vout_index` (`vout`)
) ENGINE=InnoDB CHARSET=latin1
");
$this->dbh->query("truncate table vin");
/* vout table...
the vout table holds the data from the outputs of each transaction
id = database index
value = coins out (satoshis)
n = output number (listed sequentially from zero. used to specify an input when this output is spent)
tx_db_id = database index this output's containing transaction is found in
*/
$this->decho("Creating vout table...");
$this->dbh->query("
CREATE TABLE `vout` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`value` decimal(20,0) DEFAULT NULL,
`n` int(11) DEFAULT NULL,
`tx_db_id` bigint(20) DEFAULT NULL,
`inactive` tinyint(1) DEFAULT 0,
INDEX `id_index` (`id`),
INDEX `tx_db_id_index` (`tx_db_id`)
) ENGINE=InnoDB CHARSET=latin1
");
$this->dbh->query("truncate table vout");
/* vout_address table
the vout_address table holds all address data for each vout
id = database index
address = the address found in this vout
vout_id = database index of the referenced vout (maybe this should be called vout_db_id...)
*/
$this->decho("Creating vout_address table...");
$this->dbh->query("
CREATE TABLE `vout_address` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`vout_id` bigint(20) DEFAULT NULL,
`inactive` tinyint(1) DEFAULT 0,
INDEX `id_index` (`id`),
INDEX `vout_id_index` (`vout_id`),
INDEX `address_index` (`address`)
) ENGINE=InnoDB CHARSET=latin1
");
$this->dbh->query("truncate table vout_address");
/* control table... as described above. setting up the key/value rows */
// lastblock = the last block parsed and recorded into DB (use this to check against florincoind blockheight)
// lockdb = control for whether or not the database is in use... **important** to prevent DB being read/written while in use
$this->decho("building initial control table...");
$this->dbh->query("delete from control");
$this->dbh->query("insert into control (name, value, entry) values ('lastblock', 0, 0)");
$this->dbh->query("insert into control (name, value, entry) values ('lockdb', 0, 0)");
$this->decho("done.");
}
}
?>

View File

@ -1,628 +0,0 @@
<?
/*
TODO: abstract DB functions to enable new DB types
TODO: use daux.io for comments and documentation
*/
/* block parser class
VARIABLES:
$dbh - PDO database object
$control_count - currently, the script updates the control database field every 100 blocks
$rpc - a florin RPC object for making calls to florincoind
$debug - if debug is set, important info will be output to the log
$action - the action specified from the -a flag when running the program
FUNCTIONS:
decho($m) - output the message passed through $m and output it if the $debug flag is set
get_lockdb() - returns 0 if the DB is locked, 1 if it is locked
set_lockdb($value) - sets lockdb to $value, outputs any warnings regarding the lockstatus
testSimple() - test function that is run via the "test" action
database_write_block($data) - $data is the block being worked on currently
this function first uses verifyRawTX() to store transaction data, then stores block data
verifyRawTX($hash, $block) - the $hash here refers to the transaction hash found in the block $block (which is the index of the block - not its hash or object)
verifyRawTX goes through and stores the transaction into the tx table
it also calls the TXMP process for filtering transaction comments
verifyRawTX then goes through the inputs and outputs of the transaction and stores them into their respective tables
fillVin($vin, $db_id) - $vin is the object containing vin data in an array, $db_id is the index of the transaction within the tx table
fillVin stores the reference to the previous transaction referenced by this one
fillVout($vout, $db_id, $txid) - $vout is the output object, $db_id is the current transaction id within the tx table, $txid is the hash of the transaction we're currently focusing on
fillVout will store both the vout table values to associate each vout with a txid
fillVout also stores the address in each vout in a separate table for faster indexing
getHeight() - returns an array with all relevant info on block height
[0] = how many blocks missing
[1] = current height of blockchain from RPC call
[2] = index of latest block in database
testScanComments($from) - display all comments from block $from and higher
rescan($start, $back) - $start is the block to start at, unless $back is set, in which case the program starts at block height - $back
this function looks for reorganizations within the blockchain using fillInBlanks
fillInBlanks($delete, $delete_all, $start) - if $delete isn't set, the function will not delete anything. $delete_all will delete everything from tables (shouldn't use this, it's better to drop tables). $start is where program should start (which block height)
fillInBlanks first handles deleting all data from the database if it doesn't match the current block structure. it then goes through the missing blocks and calls database_write_block for each block that is missing. the rest is history ...
initial_setup() - temporary function for creating tables for the first time when running aterna with the "setup" command. this will populate MySQL database tables
*/
class block_parser {
public $dbh;
public $control_count;
public function __construct($rpc, $dbh, $debug, $action) {
$this->rpc = $rpc;
$this->dbh = $dbh;
$this->debug = $debug;
$this->action = $action;
if ($this->debug) $this->decho("DEBUG MODE: ON!");
$this->control_count= 0;
}
function decho($m) { if ($this->debug) echo $m . "\r\n"; return $this->debug; }
function get_lockdb() {
$q = $this->dbh->query("select value from control where name = 'lockdb'");
$v = $q->fetch();
return (int)$v[0];
}
function set_lockdb($value) {
// if we're trying to lock the database, and it's already locked, just exit
if ($value == 1 && $this->get_lockdb() == 1 && $this->action != "unlock") {
if ($this->action == "lock") echo "DB already locked. EXITING PROGRAM\r\n";
// if set_lockdb is called outside of the lock/unlock action
else echo "DB locked ... process is currently running. if it isn't, execute ./blockchain_cron -a unlock to force the DB to unlock itself. please only do this if you are certain there is no other running process modifying the database at this time. \r\nEXITING PROGRAM\r\n";
exit();
}
// otherwise, just update to $value
$this->dbh->query("update control set value = '$value', entry = unix_timestamp(now()) where name = 'lockdb'");
echo "lockdb set to $value\r\n";
}
function testSimple() {
$count = 0;
foreach ($this->dbh->query("select address, ((sum(value)*100)-sum(value))/100000000 as v from vout_address as a join (select a.id, a.value from vout as a join (select tx.id from tx where inactive != 1 and outputs = 100000000 and coinbase = 1) as b where a.inactive != 1 and b.inactive != 1 and a.tx_db_id = b.id) as b where a.inactive != 1 and b.inactive != 1 and a.vout_id = b.id group by address order by v") as $txid) {
echo $txid[0] . "\t" . $txid[1] . "\r\n";
$count++;
}
echo "Total: $count";
}
function database_write_block($data) {
$hash = $data['hash'];
// if we're not in the genesis block
if ($hash != "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea") {
// go through transactions in the block
$total_coins = 0;
foreach ($data['tx'] as $txhash) {
if ($coins = $this->verifyRawTX($txhash, $data["height"])) {$total_coins += $coins;}
else { echo "Fatal error: could not fully parse block (failure to read tx $txhash)\n"; }
}
// if we've parsed 100 blocks, update the control table
$this->control_count++;
if (!$data["nextblockhash"] || $this->control_count % 10 == 0) {
$this->dbh->query($q = "update control set value = '" . $data["height"] . "', entry = unix_timestamp(now()) where name = 'lastblock'");
$this->decho("block " . $data['height'] . " update on CONTROL table lastblock = " . $data['height']);
// echo "No next block, updating control for next time\r\n". $q . "\r\n";
}
}
// genesis block -- special case
if ($hash == "09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea") {
$total_coins = 0;
echo $q = 'insert into block (id, hash, prev, next, time, diff, txs, total_coins, size, merk, nonce, version) values (' . $data["height"] . ', "' . $data["hash"] . '", "", "' . $data["nextblockhash"] . '", ' . $data["time"] . ', ' . $data["difficulty"] . ', ' . count($data["tx"]) . ', ' . $total_coins . ', ' . $data["size"] . ', "' . $data["merkleroot"] . '", ' . $data["nonce"] . ', ' . $data["version"] . ', ' . ')';
} else {
$q = 'insert into block (id, hash, prev, next, time, diff, txs, total_coins, size, merk, nonce, version) values (' . $data["height"] . ', "' . $data["hash"] . '", "' . $data["previousblockhash"] . '", "' . $data["nextblockhash"] . '", ' . $data["time"] . ', ' . $data["difficulty"] . ', ' . count($data["tx"]) . ', ' . $total_coins . ', ' . $data["size"] . ', "' . $data["merkleroot"] . '", ' . $data["nonce"] . ', ' . $data["version"] . ')';
}
$this->dbh->query($q);
}
function verifyRawTX($hash, $block) {
if ($hash == "730f0c8ddc5a592d5512566890e2a73e45feaa6748b24b849d1c29a7ab2b2300") {
$this->decho("genesis block tx found");
} else {
// decode and get json from this tx hex
$raw_tx= trim($this->rpc->call('getrawtransaction', $hash, null, null));
$decoded_tx = $this->rpc->call('decoderawtransaction', $raw_tx, null, null);
// add up all inputs/outputs
$satoshi = 100000000;
$coinbase = 0;
$outputs = 0;
$inputs = 0;
foreach ($decoded_tx["vout"] as $out) $outputs += round($out["value"] * $satoshi);
foreach ($decoded_tx['vin'] as $in) if (isset($in['coinbase'])) $coinbase = 1;
//foreach ($raw_tx["vin"] as $in) $inputs += $in["value"] * $satoshi;
$size = (strlen($raw_tx))/2;
$this->decho("block $block hash $hash inputs $inputs size $size outputs $outputs");
// sometimes the tx-comment is null, false, or empty string, let's store it in the DB as just NULL for any of these cases
if (isset($decoded_tx['tx-comment'])) $txc_fix = $decoded_tx['tx-comment'];
if (isset($txc_fix)) { if ($txc_fix === "" || $txc_fix === FALSE) { $txc_fix = NULL; } }
$txc_fix = "3";
$stmt = $this->dbh->prepare($dbq = 'insert into tx (hash, block, message, outputs, inputs, size, version, coinbase, inactive) values (?, ?, ?, ?, ?, ?, ?, ?, null)');
$stmt->bindParam(1, $hash, PDO::PARAM_STR, strlen($hash));
$stmt->bindParam(2, $block, PDO::PARAM_INT);
$stmt->bindParam(3, $txc_fix, PDO::PARAM_STR, strlen($txc_fix));
$stmt->bindParam(4, $outputs, PDO::PARAM_INT);
$stmt->bindParam(5, $inputs, PDO::PARAM_INT);
$stmt->bindParam(6, $size, PDO::PARAM_INT);
$stmt->bindParam(7, $decoded_tx["version"], PDO::PARAM_INT);
$stmt->bindParam(8, $coinbase, PDO::PARAM_INT);
$stmt->execute();
$r = $this->dbh->query("select id from tx where hash = '$hash' and inactive is null");
$db_id = $r->fetch();
/* // TXMP
if (isset($this->txmp)) {
if (strpos($decoded_tx["tx-comment"], "1>1>") === 0) {
$r = $this->dbh->prepare("insert into txmp (tx_db_id) values (" . $db_id[0] . ")");
$r->execute();
$this->beginTXMP();
}
}
*/
if (!$db_id) {$this->decho("FATAL ERROR: database returned no index for tx - txid = $hash query = $dbq, hash = $hash, block = $block, txc_fix = $txc_fix, outputs = $outputs, inputs = $inputs, size = $size, version = " . $decoded_tx["version"] . ", coinbase = $coinbase"); $this->set_lockdb(0); exit();}
// store vout and vin data
foreach ($decoded_tx['vin'] as $vin) { $this->fillVin($vin, $db_id[0]); }
foreach ($decoded_tx['vout'] as $vout) { $this->fillVout($vout, $db_id[0], $hash); }
// return coins
return $outputs;
}
return; // return null if error
}
function fillVin($vin, $db_id) {
$db_id = (int)($db_id);
if (isset($vin['txid'])) $txid = $vin['txid'];
else return; //coinbase
$stmt = $this->dbh->prepare('insert into vin (vout, tx_db_id, txid) values (?, ?, ?)');
$stmt->bindParam(1, $vin['vout'], PDO::PARAM_INT);
$stmt->bindParam(2, $db_id, PDO::PARAM_INT);
$stmt->bindParam(3, $txid, PDO::PARAM_STR, strlen($txid));
if (!$stmt->execute()) { print_r($stmt->errorInfo()); }
}
function fillVout($vout, $db_id, $txid) {
$satoshi = 100000000;
// write each vout into vout table
$stmt = $this->dbh->prepare('insert into vout (tx_db_id, value, n) values (?, ?, ?)');
$val = round($vout['value']*$satoshi);
$stmt->bindParam(1, $db_id, PDO::PARAM_INT);
$stmt->bindParam(2, $val, PDO::PARAM_INT);
$stmt->bindParam(3, $vout['n'], PDO::PARAM_INT);
if (!$stmt->execute()) { print_r($stmt->errorInfo()); }
$db_id = (int)$this->dbh->lastInsertId();
if (!isset($vout['scriptPubKey']['addresses'])) return;
// write each address into vout_address table
foreach ($vout['scriptPubKey']['addresses'] as $address) {
$stmt = $this->dbh->prepare('insert into vout_address (vout_id, address) values (?, ?)');
$stmt->bindParam(1, $db_id, PDO::PARAM_INT);
$stmt->bindParam(2, $address, PDO::PARAM_STR, strlen($address));
$stmt->execute();
}
}
function getHeight() {
$r = $this->dbh->query("select MAX(id) from block where inactive != 1");
$v = $r->fetch();
$max_id = $v[0]; // max block in DB
$height = $this->rpc->call('getblockcount', 0, null, null); // max block in local blockchain
$r2 = $this->dbh->query("select value from control where name = 'lastblock'");
$v2 = $r2->fetch();
$controlMax = $v2[0]; // max block in control table under value "lastblock"
if ($controlMax <= $height) {
$max_id = $controlMax-1;
echo "Found incomplete data in database [$controlMax/$height]\r\n";
}
return array($height - $max_id, $height, $max_id);
}
function testScanComments($from) {
if (!$from) $from = 0;
else $from = (int)$from;
$height = $this->getHeight();
for ($i = $from; $i <= $height[1]; $i++) {
$block_hash = $this->rpc->call('getblockhash', $i, null, null);
$block = $this->rpc->call('getblock', $block_hash, null, null);
$this->decho("looking through block $i which has " . count($block['tx']) . "tx...");
foreach ($block['tx'] as $txnum=>$txhash) {
if ($txc = $this->get_tx_comment($txhash)) {
$txcs[$block["height"]] = $txc;
echo "$i/" . $height[1] . ": $txnum: $txc\r\n";
}
}
}
}
function rescanTest($start, $back) {
$height = $this->getHeight();
$height = $height[1];
// get the highest block in our database according to control field
$r = $this->dbh->query("select value from control where name = 'lastblock'");
$v = $r->fetch();
$db_lastblock = (int)$v[0];
if ($back) { $start = $db_lastblock - $back; }
if ($start < 0) $start = 0;
$this->decho("scanning from block $start to $height...");
for ($i = $start; $i <= $height; $i++) {
$r = $this->dbh->query("select hash, prev, next from block where id = $i and inactive is null");
$v = $r->fetch();
$rpc_block_hash = $this->rpc->call('getblockhash', $i, null, null);
// $this->decho("Block $i hash in db=" . $v[0] . ", florincoind hash = $rpc_block_hash");
$rpc_block = $this->rpc->call('getblock', $rpc_block_hash, null, null);
// $q = $this->dbh->query('select next from block where id = '
$rpc_nextblock = $rpc_block['nextblockhash'];
$q = $this->dbh->query("select next from block where id = $i and inactive is null");
$r = $q->fetch();
$dbh_nextblock = $r[0];
echo "block $i nextblock RPC: $rpc_nextblock -- DBH: $dbh_nextblock\r\n";
if ($dbh_nextblock != $rpc_nextblock) {
echo "block $i there is inconsistent data: db says nextblock is $dbh_nextblock, rpc says nextblock is $rpc_nextblock\r\n";
// if we're just missing the next block, let's fill it in and continue looking
if (count($dbh_nextblock < 1)) {
$this->dbh->query("update block set next = '$rpc_nextblock' where id = $i and inactive is null");
$this->decho("update block set next = '$rpc_nextblock' where id = $i and inactive is null");
}
}
if ($v[0] != $rpc_block_hash) {
echo ("found reorg or inconsistent data: db says block $i is hash " . $v[0] . ", RPC says $rpc_block_hash\r\n");
$this->fillInBlanks(1, 0, $i);
break;
}
}
}
function rescan($start, $back) {
$height = $this->getHeight();
$height = $height[1];
// get the highest block in our database according to control field
$r = $this->dbh->query("select value from control where name = 'lastblock'");
$v = $r->fetch();
$db_lastblock = (int)$v[0];
if ($back) { $start = $db_lastblock - $back; }
if ($start < 0) $start = 0;
$this->decho("scanning from block $start to $height...");
for ($i = $start; $i <= $height; $i++) {
$r = $this->dbh->query("select hash, prev, next from block where id = $i");
$v = $r->fetch();
$rpc_block_hash = $this->rpc->call('getblockhash', $i, null, null);
// $this->decho("Block $i hash in db=" . $v[0] . ", florincoind hash = $rpc_block_hash");
if ($v[0] != $rpc_block_hash) {
echo ("found reorg or inconsistent data: db says block $i is hash " . $v[0] . ", RPC says $rpc_block_hash\r\n");
// delete all invalid blocks, start at the current position (reorg detection and fill)
$this->fillInBlanks(1, 0, $i);
break;
$this->decho("fin");
}
}
}
// TODO: separate delete from the rest of the function
function fillInBlanks($delete, $delete_all, $start) {
$height = $this->getHeight();
/* BEGIN DELETE METHOD */
if ($delete) {
if ($start) $delete_start = $start;
else $delete_start = $height[2];
$this->dbh->beginTransaction();
$start = $delete_start;
echo "Making everything inactive from $delete_start to highest block found\r\n";
$r = $this->dbh->query("select id from block where id >= " . $delete_start . " and inactive is null");
$this->decho("select id from block where id > " . $delete_start);
$v = $r->fetchAll(PDO::FETCH_NUM);
foreach ($v as $block_db_id) {
$block_db_id = (int)$block_db_id[0];
$r2 = $this->dbh->query("select id from tx where block = $block_db_id");
$v2 = $r2->fetchAll(PDO::FETCH_NUM);
foreach($v2 as $tx_db_id) {
$tx_db_id = (int)$tx_db_id[0];
$r3 = $this->dbh->query("select id from vout where tx_db_id = $tx_db_id");
$v3 = $r3->fetchAll(PDO::FETCH_NUM);
foreach ($v3 as $vout_db_id) {
$vout_db_id = (int)$vout_db_id[0];
$this->decho(" update vout_address set inactive = 1 where vout_id = $vout_db_id");
$this->dbh->query("update vout_address set inactive = 1 where vout_id = $vout_db_id");
}
$this->decho(" update vout set inactive = 1 where tx_db_id = $tx_db_id");
$this->dbh->query("update vout set inactive = 1 where tx_db_id = $tx_db_id");
$this->dbh->query("update vin set inactive = 1 where tx_db_id = $tx_db_id");
$this->decho(" update vin set inactive = 1 where tx_db_id = $tx_db_id");
}
$this->decho(" update tx set inactive = 1 where block = $block_db_id");
$this->dbh->query(" update tx set inactive = 1 where block = $block_db_id");
$this->decho(" update block set inactive = 1 where id = $block_db_id");
$this->dbh->query(" update block set inactive = 1 where id = $block_db_id");
}
$this->dbh->commit();
}
else if (!$start) { $start = $height[2]+1; }
/* END DELETE METHOD */
// begin reading blockchain
echo "Filling in the last " . ($height[1]-$start) . " blocks from $start to " . $height[1] . "...\r\n";
for ($i = $start; $i <= $height[1]; $i++) {
$block_hash = $this->rpc->call('getblockhash', $i, null, null);
$block = $this->rpc->call('getblock', $block_hash, null, null);
$this->database_write_block($block);
}
return $height[0] . ' ' . $height[1];
}
function initial_setup() {
$this->decho("Creating block table...");
/* block table...
recorded in this table is all block info possible
id = database index
hash = this block's hash
prev = previous block hash
next = next block hash
time = unixtime of this block as reported by miner
diff = difficulty at the time of this block
txs = transactions within this block
total_coins = total coins sent through this block
size = size of this block in bytes
merk = merkle root
nonce = the nonce found by the miner who solved this block
version = version no
*/
$this->dbh->query("
CREATE TABLE `block` (
`id` bigint(20) NOT NULL,
`hash` char(64) DEFAULT NULL,
`prev` char(64) DEFAULT NULL,
`next` char(64) DEFAULT NULL,
`time` bigint(20) DEFAULT NULL,
`diff` float DEFAULT NULL,
`txs` int(11) DEFAULT NULL,
`total_coins` decimal(20,0) DEFAULT NULL,
`size` bigint(20) DEFAULT NULL,
`merk` char(64) DEFAULT NULL,
`nonce` bigint(20) DEFAULT NULL,
`version` float DEFAULT NULL,
UNIQUE KEY `hash` (`hash`),
KEY `block_hash_index` (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1");
/* color_coin_tx table...
this table tracks all color coin transactions
id = database index
tx_db_id = database index of the florin transaction referenced in this row
cc_db_id = database index of the color coin transaction referenced in this row
from_address = the address this color coin transaction was sent from
to_address = the address this color coin was sent to
amount = the amount of color coins sent in this transaction (satoshis)
genesis = is this a genesis transaction? (was the color coin created in this tx?)
valid = **IMPORTANT** valid or invalid transaction (checked from previous chain data)
*/
$this->decho("Creating color_coin_tx table...");
$this->dbh->query("
CREATE TABLE `color_coin_tx` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tx_db_id` bigint(20) DEFAULT NULL,
`cc_db_id` bigint(20) DEFAULT NULL,
`from_address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`to_address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`amount` bigint(20) DEFAULT NULL,
`genesis` bit(1) DEFAULT NULL,
`valid` bit(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tx_db_id` (`tx_db_id`),
KEY `cc_db_id` (`cc_db_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
");
/* color_coins table...
this table contains a list of all color coins, NOT color coin transactions
id = database index
tx_db_id = database index of florin transaction referenced in this row
total_amount = number of total coins in this color coin set (satoshis)
name = name of this coin
address = originator's address
valid = is a valid coin (maybe this column shouldn't exist)
avatar = url for this avatar
*/
$this->decho("Creating color_coins table...");
$this->dbh->query("
CREATE TABLE `color_coins` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tx_db_id` bigint(20) DEFAULT NULL,
`total_amount` bigint(20) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`valid` bit(1) NOT NULL,
`avatar` varchar(140) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `address` (`address`),
KEY `tx_db_id` (`tx_db_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
");
/* control table...
**this is not a usual table. each row is a key value pair essentially.**
id = database index
name = name of this row (key)
value = value of this row
entry = timestamp of the last time this row was modified
*/
$this->decho("Creating control table...");
$this->dbh->query("
CREATE TABLE `control` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`value` varchar(200) DEFAULT NULL,
`entry` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
");
/* filter table...
** this goes against everything i believe in **
txid = transaction id to omit the tx-comment from...
user = address to omit the tx-comments from....
thank god i haven't had to use this yet.
*/
$this->decho("Creating filter table...");
$this->dbh->query("
CREATE TABLE `filter` (
`txid` char(64) DEFAULT NULL,
`user` char(34) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
");
/* tx table...
this table contains data on all transactions within the FLO blockchain
id = database index
hash = the hash of this transaction, otherwise known as "txid"
block = the numerical block this transaction is found in
message = the tx-comment in this tx
outputs = total coins output from this tx (satoshis)
inputs = total coins input in to this tx (not implemented yet...)
size = size in bytes
version = version no
coinbase = boolean whether or not this transaction is a coinbase tx
*/
$this->decho("Creating tx table...");
$this->dbh->query("
CREATE TABLE `tx` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`hash` char(64) DEFAULT NULL,
`block` bigint(14) DEFAULT NULL,
`message` varchar(528) DEFAULT NULL,
`outputs` bigint(20) DEFAULT NULL,
`inputs` bigint(20) DEFAULT NULL,
`size` bigint(20) DEFAULT NULL,
`version` int(2) DEFAULT NULL,
`coinbase` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `hash` (`hash`),
KEY `tx_hash_index` (`hash`)
) ENGINE=InnoDB AUTO_INCREMENT=382056 DEFAULT CHARSET=latin1
");
/* txmp table...
this table simply lists all transactions that are part of txmp (the transaction message protocol)
id = database index
tx_db_id = database index of the FLO transaction in question
*/
$this->decho("Creating txmp table...");
$this->dbh->query("
CREATE TABLE `txmp` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tx_db_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tx_db_id` (`tx_db_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
");
/* vin table...
the vin table holds all values from the input of a transaction
id = database index
vout = the vout number this input is assigned within the transaction
tx_db_id = the database index of the transaction this vin is contained within
*/
$this->decho("Creating vin table...");
$this->dbh->query("
CREATE TABLE `vin` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`vout` int(11) DEFAULT NULL,
`tx_db_id` bigint(20) DEFAULT NULL,
`txid` char(64) DEFAULT NULL,
`address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`multiaddr` tinyint(1),
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=688672 DEFAULT CHARSET=latin1
");
/* vout table...
the vout table holds the data from the outputs of each transaction
id = database index
value = coins out (satoshis)
n = output number (listed sequentially from zero. used to specify an input when this output is spent)
tx_db_id = database index this output's containing transaction is found in
*/
$this->decho("Creating vout table...");
$this->dbh->query("
CREATE TABLE `vout` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`value` decimal(20,0) DEFAULT NULL,
`n` int(11) DEFAULT NULL,
`tx_db_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `id_2` (`id`),
UNIQUE KEY `id_3` (`id`),
KEY `fk_tx_db_id` (`tx_db_id`)
) ENGINE=InnoDB AUTO_INCREMENT=601697 DEFAULT CHARSET=latin1
");
/* vout_address table
the vout_address table holds all address data for each vout
id = database index
address = the address found in this vout
vout_id = database index of the referenced vout (maybe this should be called vout_db_id...)
*/
$this->decho("Creating vout_address table...");
$this->dbh->query("
CREATE TABLE `vout_address` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`address` char(34) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`vout_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `id_2` (`id`),
UNIQUE KEY `id_3` (`id`),
UNIQUE KEY `vout_id` (`vout_id`)
) ENGINE=InnoDB AUTO_INCREMENT=574599 DEFAULT CHARSET=latin1
");
/* control table... as described above. setting up the key/value rows */
// lastblock = the last block parsed and recorded into DB (use this to check against florincoind blockheight)
// lockdb = control for whether or not the database is in use... **important** to prevent DB being read/written while in use
$this->decho("building initial control table...");
$this->dbh->query("delete from control");
$this->dbh->query("insert into control (name, value, entry) values ('lastblock', 0, 0)");
$this->dbh->query("insert into control (name, value, entry) values ('lockdb', 0, 0)");
$this->decho("done.");
}
}
?>

View File

@ -1,96 +0,0 @@
<?
// TODO: response should be array or JSON depending on setup configuration
include (__DIR__ . '/../lib/jsonrpcphp/includes/jsonRPCClient.php');
class florin_RPC_client {
public $CLI;
function __construct($setup_file, $CLI) {
$DB_TYPE = 'none';
require($setup_file);
$this->spawnDaemon($rpc_setup);
$this->CLI = $CLI;
if ($CLI || $setup['CLI']) {
echo "----- RPC setup ----- testing RPC: ";
// check if connected
if ($hashps = $this->call("getnetworkhashps")) {
echo "Network Hashrate: " . number_format($hashps, 0, '', ',') . "\r\n";
}
}
}
// pass in rpc setup from setup.php / setup.conf - spawn jasonRPCClient
function spawnDaemon($rpc_setup) {
extract($rpc_setup);
try {
$this->florind = new jsonRPCClient("http://$RPC_USER:$RPC_PASS@$RPC_HOST:$RPC_PORT/");
} catch (Exception $e) {
if ($this->$CLI) echo "***** FATAL ERROR: could not connect to florincoind *****\r\n";
}
if (isset($this->florind)) {}
else {
if ($this->CLI) echo "***** FATAL ERROR: cannot connect to daemon *****\r\n";
exit();
}
}
// warning: $arg is type sensitive
// more info on calls can be found here: https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)
// also find info on what each call does: https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_Calls_list
function call($command, $args = null) {
try {
switch ($command) {
case "listaddressesbyaccount":
$rv = $this->florind->listaddressesbyaccount($args);
break;
case "listunspent":
$rv = $this->florind->listunspent($args);
break;
case "listtransactions":
$rv = $this->florind->listtransactions($args);
break;
case "getnetworkhashps":
$rv = $this->florind->getnetworkhashps();
break;
case "getrawmempool":
$rv = $this->florind->getrawmempool();
break;
case "getblockcount":
$rv = $this->florind->getblockcount();
break;
case "getblockhash":
$rv = $this->florind->getblockhash($args);
break;
case "getblock":
$rv = $this->florind->getblock($args);
break;
case "getrawtransaction":
$rv = $this->florind->getrawtransaction($args);
break;
case "decoderawtransaction":
$rv = $this->florind->decoderawtransaction($args);
break;
case "signrawtransaction":
$rv = $this->florind->signrawtransaction($args);
break;
case "sendrawtransaction":
$rv = $this->florind->sendrawtransaction($args);
break;
case "createrawtransaction":
$rv = $this->florind->createrawtransaction($args[0], $args[1], $args[2]);
break;
default:
if ($this->CLI) echo "* * * WARNING: RPC client given incorrect input parameters * * *\r\n";
return false;
break;
}
}
catch (Exception $e) {
if ($this->CLI) echo "* * * WARNING: could not successfully call " . $command . " with given arguments * * *\r\n";
}
return $rv;
}
}
?>

View File

@ -1,46 +0,0 @@
<?
print <<<END
blockchain_cron.php
This file contains the controlling mechanism for the blockchain parsing and caching processes.
It should be run with the fill command from a crontab or similar service every 1 minute or less.
Additional functions are accessable through this interface, but can also be called through the RPC client.
NOTE: Permissions for this file may need to be changed to allow execute on the cron/automated service user.
For this reason it is sometimes necessary to apply 755 or similar permissions to this file.
Running this executable with the following arguments will have the following effects:
The first argument is always the command you wish to execute.
"fill": The fill command will delete all entries of blocks in the database from the last found block
and attempt to rebuild the database from there. In general, it should never have to delete
previous blocks. An additional cron using the bchk command should be run to check the
authenticity and accuracy of the locally cached blockchain.
\$argv[3] will set the number of the block to start at.
"redo": The redo command will do the same as fill but will automatically delete every block and start
from zero. This may take a long time.
"test": This command executes a test function from the data_store class.
"msgs": Output all messges from \$argv[3] to the height of the blockchain.
"height": Gets the height from the blockchain.
-debug:
When debug mode is on, additional messages will be echoed to the screen.
When debug mode is off, only important messages will be displayed periodically.
This file should always be in the root directory.
-s
Specifies which block to start the process from.
Example: fill -s 10000 starts from block 10000.
END;
exit();
?>

View File

@ -1,71 +0,0 @@
#!/usr/bin/php
<?
// metacoin 2014
// floexplorer.php
// run this file in a cron or the provided shell script (or your own method) to constantly update the database
require ('class/florin_rpc.php');
require ('class/block_parser.php');
echo "##### FLORIN BLOCK EXPLORER v0.31 - metacoin 2014\r\n";
if ($argv[1] == "help" || $argv[1] == "-h" || $argv[1] == "-help") { include ('doc/help.php'); }
$options = getopt("a:s:b:", array("debug", "delete"));
$florin_rpc = new florin_RPC_client('setup/setup.php', 1);
$block_parser = new block_parser($florin_rpc, 'setup/setup.php', isset($options['debug']), $options['a']);
$startTime = microtime(true);
/* BEGIN */
switch ($options['a']) {
case "fill":
$block_parser->set_lockdb(1);
$block_parser->fillInBlanks(isset($options['delete']), isset($options['deleteall']), (int)($options['s']));
$block_parser->set_lockdb(0);
break;
case "redo":
$block_parser->set_lockdb(1);
$block_parser->fillInBlanks(1, 1);
$block_parser->set_lockdb(0);
break;
case "rescan":
$block_parser->set_lockdb(1);
$block_parser->rescan((int)($options['s']), (int)($options['b']));
$block_parser->set_lockdb(0);
break;
case "test":
$block_parser->testSimple();
break;
case "msgs":
$block_parser->testScanComments((int)($options['s']));
break;
case "unlock":
$block_parser->set_lockdb(0);
break;
case "lock":
$block_parser->set_lockdb(1);
break;
case "height":
$h = $block_parser->getHeight();
echo "Current block: " . $h[1] . "\r\n";
echo "Max block in DB: " .$h[2] . "\r\n";
break;
case "setup":
$block_parser->initial_setup();
break;
default:
echo "No command selected. Try passing a command as the first argument (argv[1]).\r\n";
break;
}
/* END */
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
echo "%%%%% Execution time : $elapsed seconds %%%%%\r\n\r\n";
?>

View File

@ -1,11 +0,0 @@
<?
function api_exit($data) {
ob_start();
echo $data;
$size = ob_get_length();
header('Content-type: application/json');
header("Content-Length: $size");
ob_end_flush();
exit();
}
?>

View File

@ -1,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@ -1,3 +0,0 @@
Copyright 2007 Sergio Vaccaro <sergio@inservibile.org>
See http://jsonrpcphp.org/ for license, docs, sources and info.

View File

@ -1,23 +0,0 @@
<?php
require_once 'jsonRPCClient.php';
$myExample = new jsonRPCClient('http://jsonrpcphp.org/server.php');
// performs some basic operation
echo '<b>Attempt to perform basic operations</b><br />'."\n";
try {
echo 'Your name is <i>'.$myExample->giveMeSomeData('name').'</i><br />'."\n";
$myExample->changeYourState('I am using this function from the network');
echo 'Your status request has been accepted<br />'."\n";
} catch (Exception $e) {
echo nl2br($e->getMessage()).'<br />'."\n";
}
// performs some strategic operation, locally allowed
echo '<br /><b>Attempt to store strategic data</b><br />'."\n";
try {
$myExample->writeSomething('Strategic string!');
echo 'Strategic data succefully stored';
} catch (Exception $e) {
echo nl2br($e->getMessage());
}
?>

View File

@ -1,23 +0,0 @@
<?php
require_once 'example.php';
$myExample = new example();
// performs some basic operation
echo '<b>Attempt to perform basic operations</b><br />'."\n";
try {
echo 'Your name is <i>'.$myExample->giveMeSomeData('name').'</i><br />'."\n";
$myExample->changeYourState('I am using this function from the local environement');
echo 'Your status request has been accepted<br />'."\n";
} catch (Exception $e) {
echo nl2br($e->getMessage()).'<br />'."\n";
}
// performs some strategic operation, locally allowed
echo '<br /><b>Attempt to store strategic data</b><br />'."\n";
try {
$myExample->writeSomething('Strategic string!');
echo 'Strategic data succefully stored';
} catch (Exception $e) {
echo nl2br($e->getMessage());
}
?>

View File

@ -1,9 +0,0 @@
<?php
require_once 'jsonRPCServer.php';
require 'example.php';
require 'restrictedExample.php';
$myExample = new restrictedExample();
jsonRPCServer::handle($myExample)
or print 'no request';
?>

View File

@ -1,103 +0,0 @@
<?php
/**
* An immaginative class. You can immagine a DB interface instead or what you want
*
* @author sergio <jsonrpcphp@inservibile.org>
*/
class example {
/**
* An immaginative array of data
*
* @var array
*/
private $someData = array (
'name' => 'Some Proper Name',
'attr' => 'Some Personal Attribute'
);
/**
* An immaginative private method.
* Since it is a private method, it WILL NOT be served as RPC.
*
* @param integer $min
* @param integer $max
* @return integer
*/
private function reserved($min,$max) {
return rand($min,$max);
}
/**
* An immaginative public method.
* Since it is a public method, it WILL be served as RPC.
* If you want to plug out this method, extend this class with a dummy method.
*
* This method returns a significative value and must be implemented as a RPC request.
*
* @param string $param
* @return mixed
*/
public function giveMeSomeData($param) {
/*
You can have a very complex code here
*/
if (array_key_exists($param,$this->someData)) {
return $this->someData[$param];
} else {
throw new Exception('Invalid parameter '.$param);
}
}
/**
* An immaginative public method.
* Since it is a public method, it WILL be served as RPC.
* If you want to plug out this method, extend this class with a dummy method.
*
* This method return a trivial value and can be implemented as a RPC notification.
*
* @param string $state
* @return boolean
*/
public function changeYourState($state) {
/*
You can have a very complex code here
*/
// happy folks are not allowed to overcharge the host
$state = substr($state,0,32);
if ($tmpFile = fopen ('/tmp/state.txt','a')) {
fwrite($tmpFile,date('r').' - '.$state."\n");
fclose($tmpFile);
return true;
} else {
throw new Exception('Unable to change the internal state');
}
}
/**
* An immaginative public method.
* Since it is a public method, it WILL be served as RPC.
* If you want to plug out this method, extend this class with a dummy method.
*
* We suppose that this method alter strategic data and that we don't want to serve it as RPC.
*
* @param string $something
* @return boolean
*/
public function writeSomething($something) {
/*
You can have a very complex code here
*/
if ($tmpFile = fopen ('/tmp/storeData.txt','a')) {
fwrite($tmpFile,date('r').' - '.$something."\n");
fclose($tmpFile);
return true;
} else {
throw new Exception('Unable to change the internal state');
}
}
}
?>

View File

@ -1,165 +0,0 @@
<?php
/*
COPYRIGHT
Copyright 2007 Sergio Vaccaro <sergio@inservibile.org>
This file is part of JSON-RPC PHP.
JSON-RPC PHP is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
JSON-RPC PHP is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JSON-RPC PHP; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* The object of this class are generic jsonRPC 1.0 clients
* http://json-rpc.org/wiki/specification
*
* @author sergio <jsonrpcphp@inservibile.org>
*/
class jsonRPCClient {
/**
* Debug state
*
* @var boolean
*/
private $debug;
/**
* The server URL
*
* @var string
*/
private $url;
/**
* The request id
*
* @var integer
*/
private $id;
/**
* If true, notifications are performed instead of requests
*
* @var boolean
*/
private $notification = false;
/**
* Takes the connection parameters
*
* @param string $url
* @param boolean $debug
*/
public function __construct($url,$debug = false) {
// server URL
$this->url = $url;
// proxy
empty($proxy) ? $this->proxy = '' : $this->proxy = $proxy;
// debug state
empty($debug) ? $this->debug = false : $this->debug = true;
// message id
$this->id = 1;
}
/**
* Sets the notification state of the object. In this state, notifications are performed, instead of requests.
*
* @param boolean $notification
*/
public function setRPCNotification($notification) {
empty($notification) ?
$this->notification = false
:
$this->notification = true;
}
/**
* Performs a jsonRCP request and gets the results as an array
*
* @param string $method
* @param array $params
* @return array
*/
public function __call($method,$params) {
// check
if (!is_scalar($method)) {
throw new Exception('Method name has no scalar value');
}
// check
if (is_array($params)) {
// no keys
$params = array_values($params);
} else {
throw new Exception('Params must be given as array');
}
// sets notification or request task
if ($this->notification) {
$currentId = NULL;
} else {
$currentId = $this->id;
}
// prepares the request
$request = array(
'method' => $method,
'params' => $params,
'id' => $currentId
);
$request = json_encode($request);
$this->debug && $this->debug.='***** Request *****'."\n".$request."\n".'***** End Of request *****'."\n\n";
// performs the HTTP POST
$opts = array ('http' => array (
'method' => 'POST',
'header' => 'Content-type: application/json',
'content' => $request
));
$context = stream_context_create($opts);
if ($fp = fopen($this->url, 'r', false, $context)) {
$response = '';
while($row = fgets($fp)) {
$response.= trim($row)."\n";
}
$this->debug && $this->debug.='***** Server response *****'."\n".$response.'***** End of server response *****'."\n";
$response = json_decode($response,true);
} else {
throw new Exception('Unable to connect to '.$this->url);
}
// debug output
if ($this->debug) {
echo nl2br($debug);
}
// final checks and return
if (!$this->notification) {
// check
if ($response['id'] != $currentId) {
throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')');
}
if (!is_null($response['error'])) {
throw new Exception('Request error: '.$response['error']);
}
return $response['result'];
} else {
return true;
}
}
}
?>

View File

@ -1,85 +0,0 @@
<?php
/*
COPYRIGHT
Copyright 2007 Sergio Vaccaro <sergio@inservibile.org>
This file is part of JSON-RPC PHP.
JSON-RPC PHP is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
JSON-RPC PHP is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JSON-RPC PHP; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* This class build a json-RPC Server 1.0
* http://json-rpc.org/wiki/specification
*
* @author sergio <jsonrpcphp@inservibile.org>
*/
class jsonRPCServer {
/**
* This function handle a request binding it to a given object
*
* @param object $object
* @return boolean
*/
public static function handle($object) {
// checks if a JSON-RCP request has been received
if (
$_SERVER['REQUEST_METHOD'] != 'POST' ||
empty($_SERVER['CONTENT_TYPE']) ||
$_SERVER['CONTENT_TYPE'] != 'application/json'
) {
// This is not a JSON-RPC request
return false;
}
// reads the input data
$request = json_decode(file_get_contents('php://input'),true);
// executes the task on local object
try {
if ($result = @call_user_func_array(array($object,$request['method']),$request['params'])) {
$response = array (
'id' => $request['id'],
'result' => $result,
'error' => NULL
);
} else {
$response = array (
'id' => $request['id'],
'result' => NULL,
'error' => 'unknown method or incorrect parameters'
);
}
} catch (Exception $e) {
$response = array (
'id' => $request['id'],
'result' => NULL,
'error' => $e->getMessage()
);
}
// output the response
if (!empty($request['id'])) { // notifications don't want response
header('content-type: text/javascript');
echo json_encode($response);
}
// finish
return true;
}
}
?>

View File

@ -1,18 +0,0 @@
<?php
/**
* This class extends the example class with the purpose to plug out unwanted method from the RPC mechanism.
* Unwanted metod are simply overraided with dummy methods.
*
* @author sergio <jsonrpcphp@inservibile.org>
*/
class restrictedExample extends example {
/**
* This is a dummy method to plug out the parent unwanted method.
*
* @param string $something
*/
public function writeSomething($something) {
throw new Exception('writeSomething method is not available for RPC');
}
}
?>

View File

@ -1,17 +0,0 @@
<?
function cron_log($script, $message, $cron_log_d) {
$script_len = 20;
if (strlen($script) > $script_len-2) $script = substr($script, 0, $script_len-2) . '..';
else {
$max = ($script_len - strlen($script));
for ($i = 0; $i < $max; $i++) {
$script .= '.';
}
}
$h = fopen($cron_log_d, 'a+');
$out = "[" . date("d/m/y : H:i:s", time()) . "] " . $script . ": " . $message;
fwrite($h, $out);
fclose($h);
}
?>

View File

@ -1,55 +0,0 @@
## SETUP CONFIGURATION ###
#
# FLORIND command to start the florincoind application
#
# RPC_USER RPC user found in florincoin.conf
# RPC_PASS password found in florincoin.conf
# RPC_HOST host name for florincoin daemon
# RPC_PORT port number for florincoin daemon
#
# DB_HOST myql database host
# DBNAME name of the database to use
# DBUSER database user name
# DBPASS database password
#
## OPTIONAL PARAMETERS:
#
# RECORD_BLOCKCHAIN if you want to record the entire blockchain
# (not just messages) set this option to 1
# set this option to 0 to only record messages
# note: transaction IDs must be stored as well
# LOG_DIR_CRON if you want to log the cron job, please
# specify where this log lives
# set this option to 0 to disable logging
#
# CLI command line interface (set this if you're sure
# you're not on the web and you can recieve echo
# debug outputs in the command-line)
#
## IMPORTANT NOTICE:
#
# this file is still not yet optimized and user-friendly !!
# please don't have any white space between words and equals signs
#
FLORIND=/home/ubuntu/florin_528/florincoin/src/./florincoind
RPC_USER=
RPC_PASS=
RPC_HOST=127.0.0.1
RPC_PORT=18322
DB_HOST=
DB_PORT=
DB_NAME=
DB_USER=
DB_PASS=
RECORD_BLOCKCHAIN=1
PROTOCOLS=
CLI=0
# optional crondir (leave blank if you want no log, otherwise
# write the directory you want blockchain_cron_log.txt to go into)
LOG_DIR=

View File

@ -1,94 +0,0 @@
<?
// metacoin 2014
// setup.php
// this file should be included in every class constructor which takes advantage of the database or RPC
// for now, only MYSQL support...
// set $DB_TYPE to something bogus to skip database connect
if (!isset($DB_TYPE)) $DB_TYPE = 'MYSQL';
// configuration variables which are parsed from setup.conf
// these are the required fields, all others are optional
$conf = array(
'RPC_USER', // the rpc user
'RPC_PASS', // rpc password
'RPC_HOST', // rpc hostname
'RPC_PORT', // rpc port number
'DB_HOST', // database host (localhost or remote)
'DB_PORT', // database port number
'DB_USER', // database username
'DB_PASS' // database password
);
// optional configuration variables
$optional_conf = array(
'FLORIND', // florincoin command to start florincoind
'RECORD_BLOCKCHAIN', // record entire blockchain? (if disabled, only records tx-comment)
'LOG_DIR', // directory for log
'CLI' // command line interface (specify for debug output in setup)
);
// parse and validate setup.conf
$setup_conf= file(__DIR__ . '/setup.conf', FILE_IGNORE_NEW_LINES);
if (!$setup_conf) die("***** FATAL ERROR: CANNOT READ setup.conf *****\r\n");
// parse each line of setup.conf
$setup = null;
foreach ($setup_conf as $key=>$val) {
if (!$val) unset($setup_conf[$key]);
else if ($val[0] == "#") unset($setup_conf[$key]);
else {
$vals = explode("=", $val);
$setup[$vals[0]] = $vals[1];
}
}
// check if required modules are loaded
$extensions = array(/*'bcmath', */'pdo');
foreach ($extensions as $extension) {
if (extension_loaded("$extension")) {
//if (isset($setup['CLI'])) echo "$extension is loaded";
} else {
die("***** FATAL ERROR: $extension was not found - please install before continuing *****\r\n");
}
}
// check if all required configuration variables are set
$setup_check = $setup;
foreach($optional_conf as $opt) unset($setup_check[$opt]);
if ($conf == array_intersect($conf, array_keys($setup_check))) {}
else {
echo "***** FATAL ERROR: setup.conf has the following errors:\r\n";
$problems = array_diff($conf, (array_keys($setup_check)));
if ($problems == $conf) {
echo "***** You haven't set any values in setup.conf or you don't have permission to read it from this user. Please check that the settings for setup.conf are valid and your user has permission to read that file.\r\n";
}
else {
foreach ($problems as $prob) echo "***** $prob not set in setup.conf *****\r\n";
}
}
// setup database
if ($setup["LOG_DIR"]) $setup["LOG_DIR"] .= "floexplorer_log";
if ($DB_TYPE == 'MYSQL') {
if ($setup['CLI']) echo "setup attempting to connect to database... \r\n";
try {
$dbh = new PDO("mysql:host=" . $setup['DB_HOST'] . ";dbport=" . $setup['DB_PORT'] . ";dbname=" . $setup['DB_NAME'], $setup['DB_USER'], $setup['DB_PASS'], array(
PDO::ATTR_PERSISTENT => true
));
}
catch (PDOException $e) {
die("Error connecting to database.");
}
}
// create rpc_setup variables to pass into this class
$rpc_setup = array(
"RPC_USER" => $setup["RPC_USER"],
"RPC_PASS" => $setup["RPC_PASS"],
"RPC_HOST" => $setup["RPC_HOST"],
"RPC_PORT" => $setup["RPC_PORT"]
);
?>

View File

@ -1,259 +0,0 @@
<?
/*
TODO: add error codes
*/
if (!defined('SECURITY')) exit('404');
// return a database handle given user credentials
function get_dbh($setup) {
// setup database using user credentials stored in $setup
try {
$dbh = new PDO("mysql:host=" . $setup['DB_HOST'] . ";dbport=" . $setup['DB_PORT'] . ";dbname=" . $setup['DB_NAME'], $setup['DB_USER'], $setup['DB_PASS'], array(
PDO::ATTR_PERSISTENT => true
));
}
catch (PDOException $e) {
api_exit(JSON_ENCODE(array('error'=>"Error connecting to database.", 'success'=>0)));
}
return $dbh;
}
function check_user_info(&$array) {
$accepted_length = array(
'email' => 100,
'remail' => 100,
'name' => 20,
'rname' => 20,
'message' => 380
);
$missing = null;
$too_long = null;
// check if values are missing or too long
foreach ($array as $key=>$val) { if (!$val || $val == '') $missing[] = $key; }
foreach ($array as $key=>$val) { if (strlen($val) > $accepted_length[$key]) $too_long[] = $key; }
if ($missing || $too_long) api_exit(JSON_ENCODE(array('error'=>array(array('missing'=>$missing), array('too_long'=>$too_long)), 'success'=>0)));
// check for special chars
$string_to_check = array($array['name'], $array['email'], $array['message'], $array['rname'], $array['remail']);
check_chars($string_to_check);
// rebuild array and set values
$array['name'] = $string_to_check[0];
$array['email'] = $string_to_check[1];
$array['message'] = $string_to_check[2];
$array['rname'] = $string_to_check[3];
$array['remail'] = $string_to_check[4];
}
// check array of strings for invalid chars, replace with another char
function check_chars(&$array) {
$string_to_check = array($name, $rname, $message);
$strcheck = array('|', '>');
$strinto = ' ';
foreach ($strcheck as $check) {
foreach ($array as $key=>$val) { $array[$key] = str_replace($strcheck, $strinto, $val); }
}
}
// handle user first creating a message from the preliminary form
function write_love_row($dbh, $userinfo) {
// check userinfo for weird characters, empty strings, etc
check_user_info($userinfo);
extract($userinfo);
// replace special chars with harmless chars
// create unique token
$uniq = $email . $remail . $name . $rname . $message . microtime(true) . 'jklasjf((9@jkL@@2lllLLlLK@KJopPE))]]nnenenenq29@(928(@*@##89';
$secret= hash_hmac('sha256', $uniq, 0, 0);
try {
// check if user already began a love note
$q = $dbh->prepare("select count(*) from love where email = ? and (verified = 0 or done = 0 or confirmed = 0)");
$q->bindParam(1, $email, strlen($email), PDO::PARAM_STR);
if (!$q->execute()) { api_exit(JSON_ENCODE(array('error'=>"Sorry, we're experiencing technical difficulties. Please contact support@aterna.org (code# AL101-$secret)", 'success'=>0))); }
$resp = $q->fetchAll(PDO::FETCH_COLUMN, 0);
if ($resp[0] > 0) {api_exit(JSON_ENCODE(array('error'=>"Sorry $name, you've already begun a love note.", 'success'=>0)));}
// insert new user into database
$q = $dbh->prepare("insert into love (email, remail, name, rname, message, token) values (?, ?, ?, ?, ?, ?)");
$q->bindParam(1, $email, strlen($email), PDO::PARAM_STR);
$q->bindParam(2, $remail, strlen($remail), PDO::PARAM_STR);
$q->bindParam(3, $name, strlen($name), PDO::PARAM_STR);
$q->bindParam(4, $rname, strlen($rname), PDO::PARAM_STR);
$q->bindParam(5, $message, strlen($message), PDO::PARAM_STR);
$q->bindParam(6, $secret, strlen($secret), PDO::PARAM_STR);
if (!$q->execute()) { api_exit(JSON_ENCODE(array('error'=>"Sorry, we're experiencing technical difficulties. Please contact support@aterna.org (code# AL102-$secret)", 'success'=>0))); }
}
catch (PDOException $e) {
api_exit(JSON_ENCODE(array('error'=>"Sorry, we're experiencing technical difficulties. Please contact support@aterna.org (error code #AL103-$secret)", 'success'=>0)));
}
// success!
api_exit(JSON_ENCODE(array('error'=>0, 'success'=>1)));
}
// user has verified his email, set database into next state
function email_verify($dbh, $secret) {
$q = $dbh->prepare("update love set verified = 1 where token = ?");
$q->bindParam(1, $secret, strlen($secret), PDO::PARAM_STR);
if ($q->execute()) {
api_exit(JSON_ENCODE(array('error'=>0, 'success'=>1)));
}
else {
api_exit(JSON_ENCODE(array('error'=>"Sorry, we're experiencing technical difficulties. Please contact support@aterna.org (error code #AL200-$secret)", 'success'=>0)));
}
}
// check for an available transaction given account, address, and confirms
function check_available_transaction($r, $ACCOUNT, $ADDRESS, $confirms) {
// get unspent transactions
$unspent = $r->call('listunspent', $confirms);
$unspent_tx = null;
foreach ($unspent as $u) { $unspent_tx[] = $u['txid']; }
// list transactions under this account
$listtx = $r->call('listtransactions', $ACCOUNT);
$listtx_tx = null;
foreach ($listtx as $l) { $listtx_tx[] = $l['txid']; }
// find a transaction we can use that's unspent
$unspent_final = array_intersect($unspent_tx, $listtx_tx);
if (count($unspent_final) == 0) {
// check mempool for transactions
$mempool = $r->call('getrawmempool');
$unspent_final_mempool = array_intersect($mempool, $listtx_tx);
if (count($unspent_final_mempool) > 0) exit("* * * WARNING: our last transaction is still in the mempool\n");
else{exit("***** FATAL ERROR: We have NO UNSPENT TRANSACTIONS. HUGE PROBLEM\n");}
}
$txid = null;
foreach ($unspent_final as $key=>$tx) { if (strlen($tx) == 64) $txid = $tx; }
return $txid;
}
// write transaction
function write_transaction_with_message($txid, $message, $r, $ADDRESS) {
$rawtx_encoded = $r->call('getrawtransaction', $txid);
$rawtx = $r->call('decoderawtransaction', $rawtx_encoded);
// make sure the last transaction id has an output to this user
$vouts = $rawtx['vout'];
foreach ($vouts as $vout) {
if ($vout['scriptPubKey']['addresses'][0] === $ADDRESS) {
$coins = $vout['value'];
$n = $vout['n'];
}
}
//echo "^^ found coins: $coins\n";
//echo "^^ found vout: $n\n";
// TODO: ADD A CONDITION THAT ENSURES THIS IS THE *ONLY* OUTPUT (FOR PROTOCOL)
if (!isset($coins) || !isset($n)) {
exit("***** FATAL ERROR: couldn't find the coins or vout of previous transaction $txid\n");
}
/* at this point, there are few relevant vars:
$tx = transaction ID of the transaction we will use
$ADDRESS = address to send to
$TXCOMMENT = tx-comment */
// build json for createrawtransaction
$json1 = array(array( "txid"=>$txid, "vout"=>$n));
$json2 = array($ADDRESS=>$coins);
$args = array($json1, $json2, $message);
// send to rpc
$myrawtx = ($r->call('createrawtransaction', $args));
$signedtx = $r->call('signrawtransaction', $myrawtx);
$signedtx_hex = $signedtx['hex'];
$decodetx = $r->call('decoderawtransaction', $signedtx_hex);
$newtx = $r->call('sendrawtransaction', $signedtx_hex);
if (!$myrawtx || !$signedtx || !$signedtx_hex /*|| !$newtx*/) {
exit("***** FATAL ERROR: couldn't write transaction $txid to network\n");
}
echo "!! $newtx\n\n";
return($newtx);
}
function check_tx_confirms_rpc($dbh, $r, $txid) {
$q = $dbh->query("select block from tx where hash = '$txid' and inactive != 1");
$block = null;
if ($q) {
$z = $q->fetchAll(PDO::FETCH_COLUMN, 0);
if ($z[0]) {
$block= (int)$z[0];
}
}
$confirms = 0;
if ($block) {
$hash = $r->call('getblockhash', $block);
$block_array = $r->call('getblock', $hash);
$confirms = $block_array['confirmations'];
}
if ($confirms > 5) {
return true;
}
}
function email($to, $subject, $from, $body, $name = null, $rname = null, $message = null, $txid = null, $id = null) {
require_once("postmark.php");
$postmark = new Postmark("key",'support@aterna.org');
$result = $postmark->to($to)
->subject($subject)
->plain_message($body)
->send();
if($result === true) {
echo "## sent a message to $to from $from\n";
return true;
} //else echo "* * * WARNING: message to $to from $from failed (id# $id)\n";
}
function send_final_email($data) {
return email($data['remail'], "A love message from " . $data['name'] . " to " . $data['rname'], $data['email'], $body, $data['name'], $data['rname'], $data['message'], $data['txid'], $data['id']);
}
?>

View File

@ -1,46 +0,0 @@
<?
define("SECURITY", 1);
if (!include_once('../include/setup.inc.php')) exit('ERROR: configuration file not found.');
include("$PATH_ATERNA/lib/api.php");
if ($_GET) {
$requests = $_GET['requests'];
$requests2 = $_GET['requests2'];
$prefix = $_GET['prefix'];
if (is_numeric($requests) && is_numeric($requests2)) {
$requests = (int)$requests;
$requests2 = (int)$requests2;
if ($prefix) {
$prefix_len = strlen($prefix);
try {
$q = $f->dbh->prepare("select hash, block, message from tx where block > 394494 and message != '' and message is not null and inactive != 1 and substring(message, 1, $prefix_len) = ? order by block desc limit ?, ?");
$q->bindParam(1, $prefix, $prefix_len, PDO::PARAM_STR);
$q->bindParam(2, $requests, PDO::PARAM_INT);
$q->bindParam(3, $requests2, PDO::PARAM_INT);
if ($q->execute()) {
$resp = ($q->fetchAll(PDO::FETCH_NUM));
foreach ($resp as $key=>$val) {
$string = $resp[$key][2];
$string = str_replace($prefix, '', $string);
$data = explode('|', $string);
$resp[$key]['to'] = $data[1];
$resp[$key]['from'] = $data[2];
$resp[$key]['lovemsg'] = $data[0];
}
$JSON = array('error' => 0, 'success' => array('URL' => 'http://aterna.org/love/tx/?', 'data' => $resp));
} else {
$JSON = array('error' => 'sql query failed', 'success' => 0);
}
} catch (PDOException $exception) {
//var_dump($exception->getMessage());
}
}
}
} else {
// no $_GET
$JSON = array('error' => 'no GET', 'success' => 0);
}
api_exit(JSON_ENCODE($JSON));
?>

View File

@ -1,108 +0,0 @@
<?php
/**
* This is a simple library for sending emails with Postmark.
* Created by Matthew Loberg (http://mloberg.com), extended and modified by Drew Johnston (http://drewjoh.com).
*/
class Postmark {
private $api_key;
private $attachment_count = 0;
private $data = array();
function __construct($key, $from, $reply = '')
{
$this->api_key = $key;
$this->data['From'] = $from;
$this->data['ReplyTo'] = $reply;
}
function send()
{
$headers = array(
'Accept: application/json',
'Content-Type: application/json',
'X-Postmark-Server-Token: '.$this->api_key
);
$ch = curl_init('http://api.postmarkapp.com/email');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$return = curl_exec($ch);
$curl_error = curl_error($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// do some checking to make sure it sent
if($http_code !== 200)
return false;
else
return true;
}
function to($to)
{
$this->data['To'] = $to;
return $this;
}
function cc($cc)
{
$this->data["Cc"] = $cc;
return $this;
}
function bcc($bcc)
{
$this->data["Bcc"] = $bcc;
return $this;
}
function subject($subject)
{
$this->data['Subject'] = $subject;
return $this;
}
function html_message($html)
{
$this->data['HtmlBody'] = $html;
return $this;
}
function plain_message($msg)
{
$this->data['TextBody'] = $msg;
return $this;
}
function tag($tag)
{
$this->data['Tag'] = $tag;
return $this;
}
function attachment($name, $content, $content_type)
{
$this->data['Attachments'][$this->attachment_count]['Name'] = $name;
$this->data['Attachments'][$this->attachment_count]['ContentType'] = $content_type;
// Check if our content is already base64 encoded or not
if( ! base64_decode($content, true))
$this->data['Attachments'][$this->attachment_count]['Content'] = base64_encode($content);
else
$this->data['Attachments'][$this->attachment_count]['Content'] = $content;
// Up our attachment counter
$this->attachment_count++;
return $this;
}
}

View File

@ -1,29 +0,0 @@
<?
// make sure this is loaded from teh web
if (!defined('SECURITY')) exit('404');
// provide the path to Aterna's block_explorer.php here
$PATH_ATERNA = '/home/ubuntu/cron/release/florincoin_block_explorer031/';
// include stuff
require ($PATH_ATERNA . 'class/florin_rpc.php');
require ($PATH_ATERNA . 'api/block_explorer.php');
$setup_php = ($PATH_ATERNA . 'setup/setup.php');
// create objects
$r = new florin_RPC_client($setup_php, 0);
$f = new block_explorer($setup_php, $r);
// substring length for addresses
DEFINE('ADDRESS_SUBSTR_LENGTH', 10);
// substring length for transaction ID
$web_config['txid_substr_length'] = 12;
// substring length for blocks
$web_config['block_substr_length'] = 12;
// substring length for inout table
DEFINE('INOUT_SUBSTR_LENGTH', 64);
?>

View File

@ -1,504 +0,0 @@
<?
// metacoin 2014
// floexplorer.php
// run this file in a cron or the provided shell script (or your own method) to constantly update the database
DEFINE('SECURITY', 1);
require ('florincoin-explorer/class/florin_rpc.php');
require ('include2/db.inc.php');
$r = new florin_RPC_client('florincoin-explorer/setup/setup.php', 1);
$setup = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$block_parser_dbinfo = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$lovedbh = get_dbh($setup);
$block_parser = get_dbh($block_parser_dbinfo);
$ADDRESS = 'F7To9UR9qvnj8QDQ1EPxtSzfSogREmn7HC';
$ACCOUNT = '';
$CONFIRMS = 0;
//$florin_rpc = new florin_RPC_client('setup/setup.php', 1);
//$block_parser = new block_parser($florin_rpc, 'setup/setup.php', isset($options['debug']), $options['a']);
$startTime = microtime(true);
/* BEGIN */
check_new_email_user($lovedbh);
check_if_we_sent_email();
check_user_validation($lovedbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS);
check_block_confirms($lovedbh, $r, $block_parser);
check_transaction_age();
/* END */
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
//echo "%%%%% Execution time : $elapsed seconds %%%%%\r\n\r\n";
function check_new_email_user($dbh) {
// checks to see if there is a new email submission, in which case a mail is sent out to that user with the token
// this function also checks if any users exist with mailsent = 0, which is the flag to re-send an email
$q = $dbh->query("select id, token from love where verified = 0 and done = 0 and mailsent = 0 and confirmed = 0");
$r = $q->fetchAll(PDO::FETCH_NUM);
if (!$r) {}
else {
foreach ($r as $thing) {
echo "!! found a new user who has filled in the form: " . $thing[0] . ") " . $thing[1] . "\n";
echo "~~ update love set verified = 1 where id = " . $thing[0] . "\n";
$q = $dbh->query("update love set verified = 1 where id = " . $thing[0]);
echo "~~ insert into tx (loveid) values (" . $thing[0] . ")\n";
$q = $dbh->query("insert into tx (loveid) values (" . $thing[0] . ")");
}
}
}
function check_if_we_sent_email() {
// check our mail API to see if we actually sent an email out or not. resend if we didn't
}
function check_user_validation($dbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS) {
// find a list of userinfo for users who aren't "done" with this process (They have not been given a txid yet)
$q = $dbh->query("select tx.txid, B.id, B.email, B.remail, B.name, B.rname, B.message from tx join (select id, email, remail, name, rname, message from love where verified = 1 and done = 0) as B where B.id = tx.loveid and tx.txid is null");
$z = $q->fetchAll(PDO::FETCH_NUM);
foreach ($z as $userinfo) {
$txcomment = "t1:ALOVE>" . $userinfo[6] . "|" . $userinfo[5] . "|" . $userinfo[4];
echo "~~~~~ found a new user who has verified their email: " . $userinfo[1] . ") " . $userinfo[2] . "->" . $userinfo[3] . " " . $txcomment . "\n";
$txid = check_available_transaction($r, $ACCOUNT, $ADDRESS, $CONFIRMS);
if (!$txid) {exit("***** FATAL ERROR: No transaction available to write to blockchain.\n");}
$newtxid = write_transaction_with_message($txid, $txcomment, $r, $ADDRESS);
if (!$newtxid) {exit("***** FATAL ERROR: couldn't write transaction to blockchain. $txid.\n");}
if (!$dbh->query("update love set done = 1, txid = '$newtxid' where id = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
if (!$dbh->query("update tx set txid = '$newtxid' where loveid = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update tx txid = $txid\n");}
/*
$q2 = $dbh->prepare("update love set txcomment = ? where id = " . ((int)$userinfo[1]));
$q2->bindValue(1, $txcomment, strlen($txcomment), PDO::PARAM_STR);
if ($q2->execute()) {}
else exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
*/
}
// find all transactions where users have validated their email but haven't been given a txid yet
//$q = ("select txid from tx join (select id from love where verified = 1 and done = 0) as B where B.id = tx.loveid");
}
function check_transaction_age() {
// checks transaction age to see when the transaction request was created. if it's older than a certain age, we must create the transaction again
// *** ONLY IF IT ISN'T IN THE MEMPOOL
}
function check_block_confirms($ldbh, $r, $dbh) {
//
$q = $ldbh->query("select txid, id from love where confirmed = 0 and verified = 1");
if ($q) { $z = $q->fetchAll(PDO::FETCH_NUM); }
foreach ($z as $userinfo) {
$confirmed = check_tx_confirms_rpc($dbh, $r, $userinfo[0]);
if ($confirmed) {
$ldbh->query("update love set confirmed = 1 where id = " . (int)$userinfo[1]);
echo "~~ " . $userinfo[0] . " is now confirmed with 5 confirms.\n";
}
}
$q2 = $ldbh->query("select id, email, txid, email, remail, name, rname, message from love where confirmed = 1 and verified = 1 and done = 1");
if ($q2) {
$z2 = $q2->fetchAll(PDO::FETCH_ASSOC);
foreach ($z2 as $userinfo2) {
//echo $userinfo2[0] . " (" . $userinfo2[2] . ") confirmed and email is ready to be sent\n";
send_final_email($userinfo2);
}
}
}
?>
<?
// metacoin 2014
// floexplorer.php
// run this file in a cron or the provided shell script (or your own method) to constantly update the database
DEFINE('SECURITY', 1);
require ('florincoin-explorer/class/florin_rpc.php');
require ('include2/db.inc.php');
$r = new florin_RPC_client('florincoin-explorer/setup/setup.php', 1);
$setup = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$block_parser_dbinfo = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$lovedbh = get_dbh($setup);
$block_parser = get_dbh($block_parser_dbinfo);
$ADDRESS = 'F7To9UR9qvnj8QDQ1EPxtSzfSogREmn7HC';
$ACCOUNT = '';
$CONFIRMS = 0;
//$florin_rpc = new florin_RPC_client('setup/setup.php', 1);
//$block_parser = new block_parser($florin_rpc, 'setup/setup.php', isset($options['debug']), $options['a']);
$startTime = microtime(true);
/* BEGIN */
check_new_email_user($lovedbh);
check_if_we_sent_email();
check_user_validation($lovedbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS);
check_block_confirms($lovedbh, $r, $block_parser);
check_transaction_age();
/* END */
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
//echo "%%%%% Execution time : $elapsed seconds %%%%%\r\n\r\n";
function check_new_email_user($dbh) {
// checks to see if there is a new email submission, in which case a mail is sent out to that user with the token
// this function also checks if any users exist with mailsent = 0, which is the flag to re-send an email
$q = $dbh->query("select id, token from love where verified = 0 and done = 0 and mailsent = 0 and confirmed = 0");
$r = $q->fetchAll(PDO::FETCH_NUM);
if (!$r) {}
else {
foreach ($r as $thing) {
echo "!! found a new user who has filled in the form: " . $thing[0] . ") " . $thing[1] . "\n";
echo "~~ update love set verified = 1 where id = " . $thing[0] . "\n";
$q = $dbh->query("update love set verified = 1 where id = " . $thing[0]);
echo "~~ insert into tx (loveid) values (" . $thing[0] . ")\n";
$q = $dbh->query("insert into tx (loveid) values (" . $thing[0] . ")");
}
}
}
function check_if_we_sent_email() {
// check our mail API to see if we actually sent an email out or not. resend if we didn't
}
function check_user_validation($dbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS) {
// find a list of userinfo for users who aren't "done" with this process (They have not been given a txid yet)
$q = $dbh->query("select tx.txid, B.id, B.email, B.remail, B.name, B.rname, B.message from tx join (select id, email, remail, name, rname, message from love where verified = 1 and done = 0) as B where B.id = tx.loveid and tx.txid is null");
$z = $q->fetchAll(PDO::FETCH_NUM);
foreach ($z as $userinfo) {
$txcomment = "t1:ALOVE>" . $userinfo[6] . "|" . $userinfo[5] . "|" . $userinfo[4];
echo "~~~~~ found a new user who has verified their email: " . $userinfo[1] . ") " . $userinfo[2] . "->" . $userinfo[3] . " " . $txcomment . "\n";
$txid = check_available_transaction($r, $ACCOUNT, $ADDRESS, $CONFIRMS);
if (!$txid) {exit("***** FATAL ERROR: No transaction available to write to blockchain.\n");}
$newtxid = write_transaction_with_message($txid, $txcomment, $r, $ADDRESS);
if (!$newtxid) {exit("***** FATAL ERROR: couldn't write transaction to blockchain. $txid.\n");}
if (!$dbh->query("update love set done = 1, txid = '$newtxid' where id = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
if (!$dbh->query("update tx set txid = '$newtxid' where loveid = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update tx txid = $txid\n");}
/*
$q2 = $dbh->prepare("update love set txcomment = ? where id = " . ((int)$userinfo[1]));
$q2->bindValue(1, $txcomment, strlen($txcomment), PDO::PARAM_STR);
if ($q2->execute()) {}
else exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
*/
}
// find all transactions where users have validated their email but haven't been given a txid yet
//$q = ("select txid from tx join (select id from love where verified = 1 and done = 0) as B where B.id = tx.loveid");
}
function check_transaction_age() {
// checks transaction age to see when the transaction request was created. if it's older than a certain age, we must create the transaction again
// *** ONLY IF IT ISN'T IN THE MEMPOOL
}
function check_block_confirms($ldbh, $r, $dbh) {
//
$q = $ldbh->query("select txid, id from love where confirmed = 0 and verified = 1");
if ($q) { $z = $q->fetchAll(PDO::FETCH_NUM); }
foreach ($z as $userinfo) {
$confirmed = check_tx_confirms_rpc($dbh, $r, $userinfo[0]);
if ($confirmed) {
$ldbh->query("update love set confirmed = 1 where id = " . (int)$userinfo[1]);
echo "~~ " . $userinfo[0] . " is now confirmed with 5 confirms.\n";
}
}
$q2 = $ldbh->query("select id, email, txid, email, remail, name, rname, message from love where confirmed = 1 and verified = 1 and done = 1");
if ($q2) {
$z2 = $q2->fetchAll(PDO::FETCH_ASSOC);
foreach ($z2 as $userinfo2) {
//echo $userinfo2[0] . " (" . $userinfo2[2] . ") confirmed and email is ready to be sent\n";
send_final_email($userinfo2);
}
}
}
?>
<?
// metacoin 2014
// floexplorer.php
// run this file in a cron or the provided shell script (or your own method) to constantly update the database
DEFINE('SECURITY', 1);
require ('florincoin-explorer/class/florin_rpc.php');
require ('include2/db.inc.php');
$r = new florin_RPC_client('florincoin-explorer/setup/setup.php', 1);
$setup = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$block_parser_dbinfo = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$lovedbh = get_dbh($setup);
$block_parser = get_dbh($block_parser_dbinfo);
$ADDRESS = 'F7To9UR9qvnj8QDQ1EPxtSzfSogREmn7HC';
$ACCOUNT = '';
$CONFIRMS = 0;
//$florin_rpc = new florin_RPC_client('setup/setup.php', 1);
//$block_parser = new block_parser($florin_rpc, 'setup/setup.php', isset($options['debug']), $options['a']);
$startTime = microtime(true);
/* BEGIN */
check_new_email_user($lovedbh);
check_if_we_sent_email();
check_user_validation($lovedbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS);
check_block_confirms($lovedbh, $r, $block_parser);
check_transaction_age();
/* END */
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
//echo "%%%%% Execution time : $elapsed seconds %%%%%\r\n\r\n";
function check_new_email_user($dbh) {
// checks to see if there is a new email submission, in which case a mail is sent out to that user with the token
// this function also checks if any users exist with mailsent = 0, which is the flag to re-send an email
$q = $dbh->query("select id, token from love where verified = 0 and done = 0 and mailsent = 0 and confirmed = 0");
$r = $q->fetchAll(PDO::FETCH_NUM);
if (!$r) {}
else {
foreach ($r as $thing) {
echo "!! found a new user who has filled in the form: " . $thing[0] . ") " . $thing[1] . "\n";
echo "~~ update love set verified = 1 where id = " . $thing[0] . "\n";
$q = $dbh->query("update love set verified = 1 where id = " . $thing[0]);
echo "~~ insert into tx (loveid) values (" . $thing[0] . ")\n";
$q = $dbh->query("insert into tx (loveid) values (" . $thing[0] . ")");
}
}
}
function check_if_we_sent_email() {
// check our mail API to see if we actually sent an email out or not. resend if we didn't
}
function check_user_validation($dbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS) {
// find a list of userinfo for users who aren't "done" with this process (They have not been given a txid yet)
$q = $dbh->query("select tx.txid, B.id, B.email, B.remail, B.name, B.rname, B.message from tx join (select id, email, remail, name, rname, message from love where verified = 1 and done = 0) as B where B.id = tx.loveid and tx.txid is null");
$z = $q->fetchAll(PDO::FETCH_NUM);
foreach ($z as $userinfo) {
$txcomment = "t1:ALOVE>" . $userinfo[6] . "|" . $userinfo[5] . "|" . $userinfo[4];
echo "~~~~~ found a new user who has verified their email: " . $userinfo[1] . ") " . $userinfo[2] . "->" . $userinfo[3] . " " . $txcomment . "\n";
$txid = check_available_transaction($r, $ACCOUNT, $ADDRESS, $CONFIRMS);
if (!$txid) {exit("***** FATAL ERROR: No transaction available to write to blockchain.\n");}
$newtxid = write_transaction_with_message($txid, $txcomment, $r, $ADDRESS);
if (!$newtxid) {exit("***** FATAL ERROR: couldn't write transaction to blockchain. $txid.\n");}
if (!$dbh->query("update love set done = 1, txid = '$newtxid' where id = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
if (!$dbh->query("update tx set txid = '$newtxid' where loveid = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update tx txid = $txid\n");}
/*
$q2 = $dbh->prepare("update love set txcomment = ? where id = " . ((int)$userinfo[1]));
$q2->bindValue(1, $txcomment, strlen($txcomment), PDO::PARAM_STR);
if ($q2->execute()) {}
else exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
*/
}
// find all transactions where users have validated their email but haven't been given a txid yet
//$q = ("select txid from tx join (select id from love where verified = 1 and done = 0) as B where B.id = tx.loveid");
}
function check_transaction_age() {
// checks transaction age to see when the transaction request was created. if it's older than a certain age, we must create the transaction again
// *** ONLY IF IT ISN'T IN THE MEMPOOL
}
function check_block_confirms($ldbh, $r, $dbh) {
//
$q = $ldbh->query("select txid, id from love where confirmed = 0 and verified = 1");
if ($q) { $z = $q->fetchAll(PDO::FETCH_NUM); }
foreach ($z as $userinfo) {
$confirmed = check_tx_confirms_rpc($dbh, $r, $userinfo[0]);
if ($confirmed) {
$ldbh->query("update love set confirmed = 1 where id = " . (int)$userinfo[1]);
echo "~~ " . $userinfo[0] . " is now confirmed with 5 confirms.\n";
}
}
$q2 = $ldbh->query("select id, email, txid, email, remail, name, rname, message from love where confirmed = 1 and verified = 1 and done = 1");
if ($q2) {
$z2 = $q2->fetchAll(PDO::FETCH_ASSOC);
foreach ($z2 as $userinfo2) {
//echo $userinfo2[0] . " (" . $userinfo2[2] . ") confirmed and email is ready to be sent\n";
send_final_email($userinfo2);
}
}
}
?>
<?
// metacoin 2014
// floexplorer.php
// run this file in a cron or the provided shell script (or your own method) to constantly update the database
DEFINE('SECURITY', 1);
require ('florincoin-explorer/class/florin_rpc.php');
require ('include2/db.inc.php');
$r = new florin_RPC_client('florincoin-explorer/setup/setup.php', 1);
$setup = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$block_parser_dbinfo = array('DB_HOST'=>'', 'DB_PORT'=>'', 'DB_NAME'=>'', 'DB_USER'=>'', 'DB_PASS'=>'');
$lovedbh = get_dbh($setup);
$block_parser = get_dbh($block_parser_dbinfo);
$ADDRESS = 'F7To9UR9qvnj8QDQ1EPxtSzfSogREmn7HC';
$ACCOUNT = '';
$CONFIRMS = 0;
//$florin_rpc = new florin_RPC_client('setup/setup.php', 1);
//$block_parser = new block_parser($florin_rpc, 'setup/setup.php', isset($options['debug']), $options['a']);
$startTime = microtime(true);
/* BEGIN */
check_new_email_user($lovedbh);
check_if_we_sent_email();
check_user_validation($lovedbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS);
check_block_confirms($lovedbh, $r, $block_parser);
check_transaction_age();
/* END */
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
//echo "%%%%% Execution time : $elapsed seconds %%%%%\r\n\r\n";
function check_new_email_user($dbh) {
// checks to see if there is a new email submission, in which case a mail is sent out to that user with the token
// this function also checks if any users exist with mailsent = 0, which is the flag to re-send an email
$q = $dbh->query("select id, token from love where verified = 0 and done = 0 and mailsent = 0 and confirmed = 0");
$r = $q->fetchAll(PDO::FETCH_NUM);
if (!$r) {}
else {
foreach ($r as $thing) {
echo "!! found a new user who has filled in the form: " . $thing[0] . ") " . $thing[1] . "\n";
echo "~~ update love set verified = 1 where id = " . $thing[0] . "\n";
$q = $dbh->query("update love set verified = 1 where id = " . $thing[0]);
echo "~~ insert into tx (loveid) values (" . $thing[0] . ")\n";
$q = $dbh->query("insert into tx (loveid) values (" . $thing[0] . ")");
}
}
}
function check_if_we_sent_email() {
// check our mail API to see if we actually sent an email out or not. resend if we didn't
}
function check_user_validation($dbh, $r, $ADDRESS, $ACCOUNT, $CONFIRMS) {
// find a list of userinfo for users who aren't "done" with this process (They have not been given a txid yet)
$q = $dbh->query("select tx.txid, B.id, B.email, B.remail, B.name, B.rname, B.message from tx join (select id, email, remail, name, rname, message from love where verified = 1 and done = 0) as B where B.id = tx.loveid and tx.txid is null");
$z = $q->fetchAll(PDO::FETCH_NUM);
foreach ($z as $userinfo) {
$txcomment = "t1:ALOVE>" . $userinfo[6] . "|" . $userinfo[5] . "|" . $userinfo[4];
echo "~~~~~ found a new user who has verified their email: " . $userinfo[1] . ") " . $userinfo[2] . "->" . $userinfo[3] . " " . $txcomment . "\n";
$txid = check_available_transaction($r, $ACCOUNT, $ADDRESS, $CONFIRMS);
if (!$txid) {exit("***** FATAL ERROR: No transaction available to write to blockchain.\n");}
$newtxid = write_transaction_with_message($txid, $txcomment, $r, $ADDRESS);
if (!$newtxid) {exit("***** FATAL ERROR: couldn't write transaction to blockchain. $txid.\n");}
if (!$dbh->query("update love set done = 1, txid = '$newtxid' where id = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
if (!$dbh->query("update tx set txid = '$newtxid' where loveid = " . ((int)$userinfo[1]))) {exit("***** FATAL ERROR: couldn't update tx txid = $txid\n");}
/*
$q2 = $dbh->prepare("update love set txcomment = ? where id = " . ((int)$userinfo[1]));
$q2->bindValue(1, $txcomment, strlen($txcomment), PDO::PARAM_STR);
if ($q2->execute()) {}
else exit("***** FATAL ERROR: couldn't update love done = 1 on $txid\n");}
*/
}
// find all transactions where users have validated their email but haven't been given a txid yet
//$q = ("select txid from tx join (select id from love where verified = 1 and done = 0) as B where B.id = tx.loveid");
}
function check_transaction_age() {
// checks transaction age to see when the transaction request was created. if it's older than a certain age, we must create the transaction again
// *** ONLY IF IT ISN'T IN THE MEMPOOL
}
function check_block_confirms($ldbh, $r, $dbh) {
//
$q = $ldbh->query("select txid, id from love where confirmed = 0 and verified = 1");
if ($q) { $z = $q->fetchAll(PDO::FETCH_NUM); }
foreach ($z as $userinfo) {
$confirmed = check_tx_confirms_rpc($dbh, $r, $userinfo[0]);
if ($confirmed) {
$ldbh->query("update love set confirmed = 1 where id = " . (int)$userinfo[1]);
echo "~~ " . $userinfo[0] . " is now confirmed with 5 confirms.\n";
}
}
$q2 = $ldbh->query("select id, email, txid, email, remail, name, rname, message from love where confirmed = 1 and verified = 1 and done = 1");
if ($q2) {
$z2 = $q2->fetchAll(PDO::FETCH_ASSOC);
foreach ($z2 as $userinfo2) {
//echo $userinfo2[0] . " (" . $userinfo2[2] . ") confirmed and email is ready to be sent\n";
send_final_email($userinfo2);
}
}
}
?>
./auto-aterna-love.sh: 5: ./auto-aterna-love.sh: php: not found
./auto-aterna-love.sh: 5: ./auto-aterna-love.sh: php: not found
./auto-aterna-love.sh: 5: ./auto-aterna-love.sh: php: not found
./auto-aterna-love.sh: 5: ./auto-aterna-love.sh: php: not found
./auto-aterna-love.sh: 5: ./auto-aterna-love.sh: php: not found
./auto-aterna-love.sh: 5: ./auto-aterna-love.sh: php: not found
./auto-aterna-love.sh: 5: ./auto-aterna-love.sh: php: not found
./auto-aterna-love.sh: 5: ./auto-aterna-love.sh: php: not found

Binary file not shown.

Before

Width:  |  Height:  |  Size: 568 B

View File

@ -1,65 +0,0 @@
import base64
import os
from Crypto.Cipher import AES
"""
This Module is not used by default it is included if we wish to encrypt/decrpyt the data
while transferring over block chain.
Encryption Technique Used: Advanced Encryption Standard (AES)
Key Length: 32
Usage:
cipher_text = CryptTools.encrypt(plain_text,key)
plain_text = CryptTools.decrypt(ciper_text,key)
For random key generation use: CryptTools.keyGen()
"""
def pad(data):
"""
Function Name: pad
Function use: pad the data for encryption
"""
padding = 16 - len(data) % 16
return data + padding * chr(padding+97)
def unpad(data):
"""
Function Name: unpad
Function use: unpad the data for decryption
"""
data = str(data)
padding = ord(data[-2]) - 96
return data[2:-padding]
def keyGen():
# Generating random key of 32 bytes
key = os.urandom(32)
return key
def encryptMsg(plaintext, key):
# Genarating Initialization vector for AES (16 bytes)
IV = os.urandom(16)
# Encrypting The plaintext
cipher = AES.new(key, AES.MODE_CBC, IV)
plaintext=base64.b64encode(plaintext.encode('utf-8')).decode('utf-8')
ciphertext = cipher.encrypt(pad(plaintext).encode('utf-8'))
# Append IV and Ciphertext
ciphertext = base64.b64encode(IV).decode('utf-8') + base64.b64encode(ciphertext).decode('utf-8')
return ciphertext
def decryptMsg(ciphertext, key):
# Initialization vector in AES should be 16 bytes
IV = base64.b64decode(ciphertext[:24])
ciphertext=base64.b64decode(ciphertext[24:])
# Creation of encryptor and decryptor object using above details
cipher = AES.new(key, AES.MODE_CBC, IV)
plaintext=unpad(cipher.decrypt(ciphertext))
plaintext = (base64.b64decode(plaintext)).decode('utf-8')
return plaintext

View File

@ -1 +0,0 @@
from .CryptTools import *

View File

@ -1,117 +0,0 @@
""" The DataCenter module uses sqlite3 for storage of Data By default."""
import sqlite3
conn = sqlite3.connect("Intern.db")
def checkState():
"""
Function Name: checkState.
Function Use: Rectify Integerity of the DataBase.
"""
try:
c = conn.cursor()
c.execute("SELECT * from INTER_TAB")
except:
c = conn.cursor()
c.execute("CREATE TABLE INTER_TAB(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,user_name TEXT)")
try:
c = conn.cursor()
c.execute("SELECT * FROM RATING_TAB")
except:
c = conn.cursor()
c.execute("CREATE TABLE RATING_TAB(user_name TEXT,rating INTEGER, FOREIGN KEY(user_name) REFERENCES INTER_TAB(user_name))")
def readAll():
"""
Function Name: readAll.
Function use: To Retrieve all the relavant Interns details.
"""
c = conn.cursor()
data = c.execute("SELECT name,user_name FROM INTER_TAB").fetchall()
conn.commit()
return data
def write(intern_name,intern_user_name):
"""
Function Name: write.
Function Use: writes the Intern's Data to the DataBase.
"""
c = conn.cursor()
c.execute("INSERT INTO INTER_TAB(name,user_name) VALUES(?,?)",(intern_name,intern_user_name))
conn.commit()
def delete(intern_name):
"""
Function Name: delete.
Function Use: Removes Intern data from the DataBase.
"""
c = conn.cursor()
c.execute("DELETE FROM INTER_TAB WHERE user_name=?",(intern_name,))
conn.commit()
def update(intern_name,intern_user_name):
#Updates Existing - Intern Details - Not Used Currently
c = conn.cursor()
c.execute("UPDATE INTER_TAB SET user_name = ? WHERE intern_name = ?",(intern_name,intern_user_name))
conn.commit()
def insertRating(user_name,rating):
"""
Function name:insert Rating.
Function use: Adds/Updates ratings of the Intern's in the DB.
"""
c = conn.cursor()
try:
k = c.execute("SELECT * FROM RATING_TAB WHERE user_name = ? ",(user_name,)).fetchone()
if not k:
raise sqlite3.OperationalError
c.execute("UPDATE RATING_TAB SET rating = ? WHERE user_name = ?",(rating,user_name))
conn.commit()
except sqlite3.OperationalError:
c.execute("INSERT INTO RATING_TAB(user_name,rating) VALUES(?,?)",(user_name,rating))
conn.commit()
def clearRatings():
"""
Function Name:clearRatings.
Function Use:Delete Unwanted Ratings from the DataBase.
"""
c = conn.cursor()
c.execute("DELETE FROM RATING_TAB")
def retrieveRating():
"""
Function Name: retrieveRating
Function use: Get the Rating from Rating DataBase.
"""
c = conn.cursor()
data = c.execute("SELECT * FROM RATING_TAB").fetchall()
return data
def removeRating(user_name):
"""
Function Name: removeRating
Function use: Delete a specific user rating Data.
"""
c = conn.cursor()
c.execute("DELETE FROM RATING_TAB where user_name = ?",(user_name,))
conn.commit()

View File

@ -1 +0,0 @@
from .DataCenter import *

Binary file not shown.

View File

View File

@ -1,28 +0,0 @@
# FloRate-Dapp
This D-App is based on Flo Block Chain and is used to communicate the progress of Interns in the form of Rating.<br />
<b>Usage</b><br />
To use the application we use the command python3 rating-client.py<br />
After Starting GUI choose the role:<br />
<ul>
<li>
If role is Employee We need to create Ratings so that they are in desired writting format.<br />
The Intern Create Ratings window contains 2 parts<br />
<ul>
<li>
Intern Data: Here we choose the required Interns to be rated and press the right arrow Button<br />We then
Enter the Ratings and submit
</li>
<li>
Rating Data: Here we find all the assigned Ratings displayed and when we find they are good we finalize them by pressing on finalize button
</li>
</ul>
Once The Ratings are Written we enter the Transaction Id and click post rating button to Post the ratings.
After this the trasnaction id to be shared with interns is displayed on CLI as well as saved onto RatingData.txt
</li>
<li>
If the role in Intern we just Enter the Transaction id provided by Employeer and retrieve the Ratings by clicking Fetch Rating Button
</li>
</ul>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 B

View File

@ -1,51 +0,0 @@
from tkinter import * # from x import * is bad practice
from tkinter import ttk
# http://tkinter.unpythonic.net/wiki/VerticalScrolledFrame
class VerticalScrolledFrame(Frame):
"""A pure Tkinter scrollable frame that actually works!
* Use the 'interior' attribute to place widgets inside the scrollable frame
* Construct and pack/place/grid normally
* This frame only allows vertical scrolling
"""
def __init__(self, parent, *args, **kw):
Frame.__init__(self, parent, *args, **kw)
# create a canvas object and a vertical scrollbar for scrolling it
vscrollbar = Scrollbar(self, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
canvas = Canvas(self, bd=0, highlightthickness=0,
yscrollcommand=vscrollbar.set)
canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
vscrollbar.config(command=canvas.yview)
# reset the view
canvas.xview_moveto(0)
canvas.yview_moveto(0)
# create a frame inside the canvas which will be scrolled with it
self.interior = interior = Frame(canvas)
interior_id = canvas.create_window(0, 0, window=interior,
anchor=NW)
def _on_mousewheel(event):
canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")
self.interior.bind_all("<MouseWheel>", _on_mousewheel)
# track changes to the canvas and frame width and sync them,
# also updating the scrollbar
def _configure_interior(event):
# update the scrollbars to match the size of the inner frame
size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
canvas.config(scrollregion="0 0 %s %s" % size)
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the canvas's width to fit the inner frame
canvas.config(width=interior.winfo_reqwidth())
interior.bind('<Configure>', _configure_interior)
def _configure_canvas(event):
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the inner frame's width to fill the canvas
canvas.itemconfigure(interior_id, width=canvas.winfo_width())
canvas.bind('<Configure>', _configure_canvas)

View File

@ -1,39 +0,0 @@
import subprocess
import json
def writeDatatoBlockchain(text,receiver,amt):
"""
Function Name: writeDatatoBlockChain
Function use: write the recieved Data to the Block-Chain with a specified amount amt charge
"""
txid = subprocess.check_output(["flo-cli","--testnet", "sendtoaddress",receiver,str(amt),'""','""',"true","false","10",'UNSET',str(text)])
txid = str(txid)
txid = txid[2:-3]
return txid
def readUnitFromBlockchain(txid):
#Reads Unit Data from Block Chain
rawtx = subprocess.check_output(["flo-cli","--testnet", "getrawtransaction", str(txid)])
rawtx = str(rawtx)
rawtx = rawtx[2:-3]
tx = subprocess.check_output(["flo-cli","--testnet", "decoderawtransaction", str(rawtx)])
content = json.loads(tx)
text = content['floData']
return text
def readDatafromBlockchain(cursor):
#Read a Block of data from Blockchain
text = []
cursor_data = readUnitFromBlockchain(cursor)
while(cursor_data[:5]=='next:'):
cursor = cursor_data[5:69]
#print("fetching this transaction->>"+cursor)
text.append(cursor_data[70:])
cursor_data = readUnitFromBlockchain(cursor)
text.append(cursor_data)
#print(text)
text=('').join(text)
return text

View File

@ -1 +0,0 @@
from .TM import *

View File

@ -1,797 +0,0 @@
(['/root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py'],
['/root/Downloads/FLO-appStore-master/apps/FloRate',
'/root/Downloads/FLO-appStore-master/apps/FloRate'],
['codecs'],
[],
[],
[],
False,
False,
'3.6.6 (default, Jun 27 2018, 14:44:17) \n[GCC 8.1.0]',
[('pyi_rth__tkinter',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/rthooks/pyi_rth__tkinter.py',
'PYSOURCE'),
('rating-client',
'/root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py',
'PYSOURCE')],
[('posixpath', '/usr/lib/python3.6/posixpath.py', 'PYMODULE'),
('_strptime', '/usr/lib/python3.6/_strptime.py', 'PYMODULE'),
('datetime', '/usr/lib/python3.6/datetime.py', 'PYMODULE'),
('stringprep', '/usr/lib/python3.6/stringprep.py', 'PYMODULE'),
('fnmatch', '/usr/lib/python3.6/fnmatch.py', 'PYMODULE'),
('struct', '/usr/lib/python3.6/struct.py', 'PYMODULE'),
('_compat_pickle', '/usr/lib/python3.6/_compat_pickle.py', 'PYMODULE'),
('__future__', '/usr/lib/python3.6/__future__.py', 'PYMODULE'),
('difflib', '/usr/lib/python3.6/difflib.py', 'PYMODULE'),
('ast', '/usr/lib/python3.6/ast.py', 'PYMODULE'),
('inspect', '/usr/lib/python3.6/inspect.py', 'PYMODULE'),
('cmd', '/usr/lib/python3.6/cmd.py', 'PYMODULE'),
('bdb', '/usr/lib/python3.6/bdb.py', 'PYMODULE'),
('opcode', '/usr/lib/python3.6/opcode.py', 'PYMODULE'),
('dis', '/usr/lib/python3.6/dis.py', 'PYMODULE'),
('codeop', '/usr/lib/python3.6/codeop.py', 'PYMODULE'),
('code', '/usr/lib/python3.6/code.py', 'PYMODULE'),
('glob', '/usr/lib/python3.6/glob.py', 'PYMODULE'),
('shlex', '/usr/lib/python3.6/shlex.py', 'PYMODULE'),
('importlib._bootstrap',
'/usr/lib/python3.6/importlib/_bootstrap.py',
'PYMODULE'),
('importlib._bootstrap_external',
'/usr/lib/python3.6/importlib/_bootstrap_external.py',
'PYMODULE'),
('importlib.machinery',
'/usr/lib/python3.6/importlib/machinery.py',
'PYMODULE'),
('importlib.util', '/usr/lib/python3.6/importlib/util.py', 'PYMODULE'),
('importlib.abc', '/usr/lib/python3.6/importlib/abc.py', 'PYMODULE'),
('importlib', '/usr/lib/python3.6/importlib/__init__.py', 'PYMODULE'),
('pkgutil', '/usr/lib/python3.6/pkgutil.py', 'PYMODULE'),
('xml', '/usr/lib/python3.6/xml/__init__.py', 'PYMODULE'),
('xml.sax.expatreader',
'/usr/lib/python3.6/xml/sax/expatreader.py',
'PYMODULE'),
('xml.sax.saxutils', '/usr/lib/python3.6/xml/sax/saxutils.py', 'PYMODULE'),
('urllib.request', '/usr/lib/python3.6/urllib/request.py', 'PYMODULE'),
('getpass', '/usr/lib/python3.6/getpass.py', 'PYMODULE'),
('nturl2path', '/usr/lib/python3.6/nturl2path.py', 'PYMODULE'),
('ftplib', '/usr/lib/python3.6/ftplib.py', 'PYMODULE'),
('netrc', '/usr/lib/python3.6/netrc.py', 'PYMODULE'),
('http.cookiejar', '/usr/lib/python3.6/http/cookiejar.py', 'PYMODULE'),
('urllib.response', '/usr/lib/python3.6/urllib/response.py', 'PYMODULE'),
('urllib.error', '/usr/lib/python3.6/urllib/error.py', 'PYMODULE'),
('xml.sax', '/usr/lib/python3.6/xml/sax/__init__.py', 'PYMODULE'),
('xml.sax.handler', '/usr/lib/python3.6/xml/sax/handler.py', 'PYMODULE'),
('xml.sax._exceptions',
'/usr/lib/python3.6/xml/sax/_exceptions.py',
'PYMODULE'),
('xml.sax.xmlreader', '/usr/lib/python3.6/xml/sax/xmlreader.py', 'PYMODULE'),
('xml.parsers', '/usr/lib/python3.6/xml/parsers/__init__.py', 'PYMODULE'),
('xml.parsers.expat', '/usr/lib/python3.6/xml/parsers/expat.py', 'PYMODULE'),
('plistlib', '/usr/lib/python3.6/plistlib.py', 'PYMODULE'),
('platform', '/usr/lib/python3.6/platform.py', 'PYMODULE'),
('token', '/usr/lib/python3.6/token.py', 'PYMODULE'),
('tokenize', '/usr/lib/python3.6/tokenize.py', 'PYMODULE'),
('urllib.parse', '/usr/lib/python3.6/urllib/parse.py', 'PYMODULE'),
('tempfile', '/usr/lib/python3.6/tempfile.py', 'PYMODULE'),
('tty', '/usr/lib/python3.6/tty.py', 'PYMODULE'),
('pydoc_data', '/usr/lib/python3.6/pydoc_data/__init__.py', 'PYMODULE'),
('pydoc_data.topics', '/usr/lib/python3.6/pydoc_data/topics.py', 'PYMODULE'),
('html.entities', '/usr/lib/python3.6/html/entities.py', 'PYMODULE'),
('html', '/usr/lib/python3.6/html/__init__.py', 'PYMODULE'),
('ipaddress', '/usr/lib/python3.6/ipaddress.py', 'PYMODULE'),
('ssl', '/usr/lib/python3.6/ssl.py', 'PYMODULE'),
('http.client', '/usr/lib/python3.6/http/client.py', 'PYMODULE'),
('mimetypes', '/usr/lib/python3.6/mimetypes.py', 'PYMODULE'),
('socketserver', '/usr/lib/python3.6/socketserver.py', 'PYMODULE'),
('http', '/usr/lib/python3.6/http/__init__.py', 'PYMODULE'),
('http.server', '/usr/lib/python3.6/http/server.py', 'PYMODULE'),
('optparse', '/usr/lib/python3.6/optparse.py', 'PYMODULE'),
('uu', '/usr/lib/python3.6/uu.py', 'PYMODULE'),
('quopri', '/usr/lib/python3.6/quopri.py', 'PYMODULE'),
('email.feedparser', '/usr/lib/python3.6/email/feedparser.py', 'PYMODULE'),
('email.parser', '/usr/lib/python3.6/email/parser.py', 'PYMODULE'),
('email', '/usr/lib/python3.6/email/__init__.py', 'PYMODULE'),
('calendar', '/usr/lib/python3.6/calendar.py', 'PYMODULE'),
('email._parseaddr', '/usr/lib/python3.6/email/_parseaddr.py', 'PYMODULE'),
('email.utils', '/usr/lib/python3.6/email/utils.py', 'PYMODULE'),
('email.errors', '/usr/lib/python3.6/email/errors.py', 'PYMODULE'),
('email.header', '/usr/lib/python3.6/email/header.py', 'PYMODULE'),
('email._policybase', '/usr/lib/python3.6/email/_policybase.py', 'PYMODULE'),
('email.base64mime', '/usr/lib/python3.6/email/base64mime.py', 'PYMODULE'),
('email.encoders', '/usr/lib/python3.6/email/encoders.py', 'PYMODULE'),
('email.charset', '/usr/lib/python3.6/email/charset.py', 'PYMODULE'),
('base64', '/usr/lib/python3.6/base64.py', 'PYMODULE'),
('email._encoded_words',
'/usr/lib/python3.6/email/_encoded_words.py',
'PYMODULE'),
('hashlib', '/usr/lib/python3.6/hashlib.py', 'PYMODULE'),
('bisect', '/usr/lib/python3.6/bisect.py', 'PYMODULE'),
('random', '/usr/lib/python3.6/random.py', 'PYMODULE'),
('email.generator', '/usr/lib/python3.6/email/generator.py', 'PYMODULE'),
('email.iterators', '/usr/lib/python3.6/email/iterators.py', 'PYMODULE'),
('urllib', '/usr/lib/python3.6/urllib/__init__.py', 'PYMODULE'),
('email._header_value_parser',
'/usr/lib/python3.6/email/_header_value_parser.py',
'PYMODULE'),
('email.headerregistry',
'/usr/lib/python3.6/email/headerregistry.py',
'PYMODULE'),
('email.quoprimime', '/usr/lib/python3.6/email/quoprimime.py', 'PYMODULE'),
('email.contentmanager',
'/usr/lib/python3.6/email/contentmanager.py',
'PYMODULE'),
('email.policy', '/usr/lib/python3.6/email/policy.py', 'PYMODULE'),
('email.message', '/usr/lib/python3.6/email/message.py', 'PYMODULE'),
('bz2', '/usr/lib/python3.6/bz2.py', 'PYMODULE'),
('lzma', '/usr/lib/python3.6/lzma.py', 'PYMODULE'),
('_compression', '/usr/lib/python3.6/_compression.py', 'PYMODULE'),
('gzip', '/usr/lib/python3.6/gzip.py', 'PYMODULE'),
('tarfile', '/usr/lib/python3.6/tarfile.py', 'PYMODULE'),
('py_compile', '/usr/lib/python3.6/py_compile.py', 'PYMODULE'),
('zipfile', '/usr/lib/python3.6/zipfile.py', 'PYMODULE'),
('shutil', '/usr/lib/python3.6/shutil.py', 'PYMODULE'),
('socket', '/usr/lib/python3.6/socket.py', 'PYMODULE'),
('webbrowser', '/usr/lib/python3.6/webbrowser.py', 'PYMODULE'),
('pydoc', '/usr/lib/python3.6/pydoc.py', 'PYMODULE'),
('getopt', '/usr/lib/python3.6/getopt.py', 'PYMODULE'),
('pdb', '/usr/lib/python3.6/pdb.py', 'PYMODULE'),
('unittest.util', '/usr/lib/python3.6/unittest/util.py', 'PYMODULE'),
('unittest.result', '/usr/lib/python3.6/unittest/result.py', 'PYMODULE'),
('logging', '/usr/lib/python3.6/logging/__init__.py', 'PYMODULE'),
('unittest.case', '/usr/lib/python3.6/unittest/case.py', 'PYMODULE'),
('unittest.suite', '/usr/lib/python3.6/unittest/suite.py', 'PYMODULE'),
('unittest.loader', '/usr/lib/python3.6/unittest/loader.py', 'PYMODULE'),
('unittest.runner', '/usr/lib/python3.6/unittest/runner.py', 'PYMODULE'),
('unittest.main', '/usr/lib/python3.6/unittest/main.py', 'PYMODULE'),
('unittest.signals', '/usr/lib/python3.6/unittest/signals.py', 'PYMODULE'),
('unittest', '/usr/lib/python3.6/unittest/__init__.py', 'PYMODULE'),
('doctest', '/usr/lib/python3.6/doctest.py', 'PYMODULE'),
('stat', '/usr/lib/python3.6/stat.py', 'PYMODULE'),
('genericpath', '/usr/lib/python3.6/genericpath.py', 'PYMODULE'),
('string', '/usr/lib/python3.6/string.py', 'PYMODULE'),
('ntpath', '/usr/lib/python3.6/ntpath.py', 'PYMODULE'),
('enum', '/usr/lib/python3.6/enum.py', 'PYMODULE'),
('signal', '/usr/lib/python3.6/signal.py', 'PYMODULE'),
('contextlib', '/usr/lib/python3.6/contextlib.py', 'PYMODULE'),
('_threading_local', '/usr/lib/python3.6/_threading_local.py', 'PYMODULE'),
('threading', '/usr/lib/python3.6/threading.py', 'PYMODULE'),
('selectors', '/usr/lib/python3.6/selectors.py', 'PYMODULE'),
('dummy_threading', '/usr/lib/python3.6/dummy_threading.py', 'PYMODULE'),
('subprocess', '/usr/lib/python3.6/subprocess.py', 'PYMODULE'),
('os', '/usr/lib/python3.6/os.py', 'PYMODULE'),
('textwrap', '/usr/lib/python3.6/textwrap.py', 'PYMODULE'),
('gettext', '/usr/lib/python3.6/gettext.py', 'PYMODULE'),
('argparse', '/usr/lib/python3.6/argparse.py', 'PYMODULE'),
('pprint', '/usr/lib/python3.6/pprint.py', 'PYMODULE'),
('pickle', '/usr/lib/python3.6/pickle.py', 'PYMODULE'),
('tracemalloc', '/usr/lib/python3.6/tracemalloc.py', 'PYMODULE'),
('warnings', '/usr/lib/python3.6/warnings.py', 'PYMODULE'),
('copy', '/usr/lib/python3.6/copy.py', 'PYMODULE'),
('_dummy_thread', '/usr/lib/python3.6/_dummy_thread.py', 'PYMODULE'),
('SF', '/root/Downloads/FLO-appStore-master/apps/FloRate/SF.py', 'PYMODULE'),
('tkinter.ttk', '/usr/lib/python3.6/tkinter/ttk.py', 'PYMODULE'),
('DataCenter',
'/root/Downloads/FLO-appStore-master/apps/FloRate/DataCenter/__init__.py',
'PYMODULE'),
('DataCenter.DataCenter',
'/root/Downloads/FLO-appStore-master/apps/FloRate/DataCenter/DataCenter.py',
'PYMODULE'),
('sqlite3', '/usr/lib/python3.6/sqlite3/__init__.py', 'PYMODULE'),
('sqlite3.dump', '/usr/lib/python3.6/sqlite3/dump.py', 'PYMODULE'),
('sqlite3.dbapi2', '/usr/lib/python3.6/sqlite3/dbapi2.py', 'PYMODULE'),
('Transaction',
'/root/Downloads/FLO-appStore-master/apps/FloRate/Transaction/__init__.py',
'PYMODULE'),
('Transaction.TM',
'/root/Downloads/FLO-appStore-master/apps/FloRate/Transaction/TM.py',
'PYMODULE'),
('json', '/usr/lib/python3.6/json/__init__.py', 'PYMODULE'),
('json.encoder', '/usr/lib/python3.6/json/encoder.py', 'PYMODULE'),
('json.decoder', '/usr/lib/python3.6/json/decoder.py', 'PYMODULE'),
('json.scanner', '/usr/lib/python3.6/json/scanner.py', 'PYMODULE'),
('tkinter.messagebox',
'/usr/lib/python3.6/tkinter/messagebox.py',
'PYMODULE'),
('tkinter.commondialog',
'/usr/lib/python3.6/tkinter/commondialog.py',
'PYMODULE'),
('tkinter', '/usr/lib/python3.6/tkinter/__init__.py', 'PYMODULE'),
('tkinter.constants', '/usr/lib/python3.6/tkinter/constants.py', 'PYMODULE')],
[('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('resource',
'/usr/lib/python3.6/lib-dynload/resource.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_ssl',
'/usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_hk',
'/usr/lib/python3.6/lib-dynload/_codecs_hk.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_kr',
'/usr/lib/python3.6/lib-dynload/_codecs_kr.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_tw',
'/usr/lib/python3.6/lib-dynload/_codecs_tw.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_cn',
'/usr/lib/python3.6/lib-dynload/_codecs_cn.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_jp',
'/usr/lib/python3.6/lib-dynload/_codecs_jp.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_iso2022',
'/usr/lib/python3.6/lib-dynload/_codecs_iso2022.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_multibytecodec',
'/usr/lib/python3.6/lib-dynload/_multibytecodec.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_opcode',
'/usr/lib/python3.6/lib-dynload/_opcode.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('readline',
'/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('termios',
'/usr/lib/python3.6/lib-dynload/termios.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_hashlib',
'/usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_bz2',
'/usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_lzma',
'/usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_sqlite3',
'/usr/lib/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_json',
'/usr/lib/python3.6/lib-dynload/_json.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_tkinter',
'/usr/lib/python3.6/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('libssl.so.1.1', '/usr/lib/x86_64-linux-gnu/libssl.so.1.1', 'BINARY'),
('libcrypto.so.1.1', '/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1', 'BINARY'),
('libreadline.so.7', '/lib/x86_64-linux-gnu/libreadline.so.7', 'BINARY'),
('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libsqlite3.so.0', '/usr/lib/x86_64-linux-gnu/libsqlite3.so.0', 'BINARY'),
('libXau.so.6', '/usr/lib/x86_64-linux-gnu/libXau.so.6', 'BINARY'),
('libbsd.so.0', '/lib/x86_64-linux-gnu/libbsd.so.0', 'BINARY'),
('libuuid.so.1', '/lib/x86_64-linux-gnu/libuuid.so.1', 'BINARY'),
('libXrender.so.1', '/usr/lib/x86_64-linux-gnu/libXrender.so.1', 'BINARY'),
('libXdmcp.so.6', '/usr/lib/x86_64-linux-gnu/libXdmcp.so.6', 'BINARY'),
('libfreetype.so.6', '/usr/lib/x86_64-linux-gnu/libfreetype.so.6', 'BINARY'),
('libBLT.2.5.so.8.6', '/usr/lib/libBLT.2.5.so.8.6', 'BINARY'),
('libfontconfig.so.1',
'/usr/lib/x86_64-linux-gnu/libfontconfig.so.1',
'BINARY'),
('libX11.so.6', '/usr/lib/x86_64-linux-gnu/libX11.so.6', 'BINARY'),
('libXft.so.2', '/usr/lib/x86_64-linux-gnu/libXft.so.2', 'BINARY'),
('libXss.so.1', '/usr/lib/x86_64-linux-gnu/libXss.so.1', 'BINARY'),
('libtk8.6.so', '/usr/lib/x86_64-linux-gnu/libtk8.6.so', 'BINARY'),
('libpng16.so.16', '/usr/lib/x86_64-linux-gnu/libpng16.so.16', 'BINARY'),
('libXext.so.6', '/usr/lib/x86_64-linux-gnu/libXext.so.6', 'BINARY'),
('libtcl8.6.so', '/usr/lib/x86_64-linux-gnu/libtcl8.6.so', 'BINARY'),
('libpython3.6m.so.1.0',
'/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0',
'BINARY')],
[],
[],
[('base_library.zip',
'/root/Downloads/FLO-appStore-master/apps/FloRate/build/rating-client/base_library.zip',
'DATA'),
('tcl/msgs/es_uy.msg', '/usr/share/tcltk/tcl8.6/msgs/es_uy.msg', 'DATA'),
('tk/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
('tcl/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
('tk/images/pwrdLogo175.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
'DATA'),
('tcl/msgs/es_ar.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ar.msg', 'DATA'),
('tk/images/pwrdLogo150.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
'DATA'),
('tcl/msgs/en_hk.msg', '/usr/share/tcltk/tcl8.6/msgs/en_hk.msg', 'DATA'),
('tcl/encoding/iso8859-14.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
'DATA'),
('tcl/encoding/cp737.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
'DATA'),
('tcl/encoding/iso8859-13.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
'DATA'),
('tk/panedwindow.tcl', '/usr/share/tcltk/tk8.6/panedwindow.tcl', 'DATA'),
('tk/ttk/altTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/altTheme.tcl', 'DATA'),
('tcl/encoding/cp852.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
'DATA'),
('tcl/encoding/cp857.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
'DATA'),
('tcl/msgs/es_gt.msg', '/usr/share/tcltk/tcl8.6/msgs/es_gt.msg', 'DATA'),
('tcl/msgs/hi_in.msg', '/usr/share/tcltk/tcl8.6/msgs/hi_in.msg', 'DATA'),
('tk/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
('tcl/encoding/ksc5601.enc',
'/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
'DATA'),
('tk/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
('tcl/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
('tcl/msgs/es_ec.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ec.msg', 'DATA'),
('tcl/tcl8/http-2.8.12.tm',
'/usr/share/tcltk/tcl8.6/tcl8/http-2.8.12.tm',
'DATA'),
('tk/images/pwrdLogo75.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
'DATA'),
('tcl/encoding/iso8859-3.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
'DATA'),
('tcl/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
('tcl/encoding/jis0201.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
'DATA'),
('tcl/msgs/es_cl.msg', '/usr/share/tcltk/tcl8.6/msgs/es_cl.msg', 'DATA'),
('tk/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
('tk/ttk/aquaTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl', 'DATA'),
('tcl/msgs/de_at.msg', '/usr/share/tcltk/tcl8.6/msgs/de_at.msg', 'DATA'),
('tcl/msgs/bn_in.msg', '/usr/share/tcltk/tcl8.6/msgs/bn_in.msg', 'DATA'),
('tk/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
('tcl/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
('tcl/encoding/iso2022-jp.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
'DATA'),
('tcl/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
('tcl/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
('tcl/encoding/iso2022.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
'DATA'),
('tk/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
('tk/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
('tcl/msgs/fr_ca.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg', 'DATA'),
('tcl/encoding/cp862.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
'DATA'),
('tk/images/pwrdLogo.eps',
'/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
'DATA'),
('tcl/msgs/mr_in.msg', '/usr/share/tcltk/tcl8.6/msgs/mr_in.msg', 'DATA'),
('tcl/tcl8/platform-1.0.14.tm',
'/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.14.tm',
'DATA'),
('tcl/encoding/cp1253.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
'DATA'),
('tk/ttk/scrollbar.tcl', '/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl', 'DATA'),
('tcl/msgs/es_ve.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ve.msg', 'DATA'),
('tcl/msgs/ar_sy.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg', 'DATA'),
('tcl/msgs/en_nz.msg', '/usr/share/tcltk/tcl8.6/msgs/en_nz.msg', 'DATA'),
('tcl/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
('tk/ttk/cursors.tcl', '/usr/share/tcltk/tk8.6/ttk/cursors.tcl', 'DATA'),
('tcl/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
('tcl/encoding/iso8859-7.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
'DATA'),
('tk/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
('tcl/encoding/iso8859-8.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
'DATA'),
('tcl/msgs/es_co.msg', '/usr/share/tcltk/tcl8.6/msgs/es_co.msg', 'DATA'),
('tcl/msgs/eu_es.msg', '/usr/share/tcltk/tcl8.6/msgs/eu_es.msg', 'DATA'),
('tcl/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
('tk/ttk/treeview.tcl', '/usr/share/tcltk/tk8.6/ttk/treeview.tcl', 'DATA'),
('tcl/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
('tcl/msgs/ta_in.msg', '/usr/share/tcltk/tcl8.6/msgs/ta_in.msg', 'DATA'),
('tcl/encoding/cp1255.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
'DATA'),
('tcl/encoding/cp1250.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
'DATA'),
('tcl/encoding/jis0208.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
'DATA'),
('tk/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
('tcl/msgs/es_mx.msg', '/usr/share/tcltk/tcl8.6/msgs/es_mx.msg', 'DATA'),
('tcl/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
('tcl/encoding/big5.enc',
'/usr/share/tcltk/tcl8.6/encoding/big5.enc',
'DATA'),
('tk/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
('tk/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
('tcl/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
('tcl/msgs/fa_in.msg', '/usr/share/tcltk/tcl8.6/msgs/fa_in.msg', 'DATA'),
('tcl/msgs/fr_be.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_be.msg', 'DATA'),
('tk/ttk/progress.tcl', '/usr/share/tcltk/tk8.6/ttk/progress.tcl', 'DATA'),
('tcl/msgs/zh_cn.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg', 'DATA'),
('tk/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
('tcl/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
('tk/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
('tk/images/logo.eps', '/usr/share/tcltk/tk8.6/images/logo.eps', 'DATA'),
('tk/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
('tk/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
('tcl/encoding/cp950.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
'DATA'),
('tcl/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
('tcl/encoding/cp936.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
'DATA'),
('tcl/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
('tk/images/logoMed.gif',
'/usr/share/tcltk/tk8.6/images/logoMed.gif',
'DATA'),
('tcl/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
('tcl/encoding/iso2022-kr.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
'DATA'),
('tcl/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
('tcl/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
('tk/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
('tk/ttk/xpTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl', 'DATA'),
('tcl/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
('tcl/msgs/es_cr.msg', '/usr/share/tcltk/tcl8.6/msgs/es_cr.msg', 'DATA'),
('tcl/encoding/cp864.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
'DATA'),
('tcl/encoding/cp437.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
'DATA'),
('tcl/encoding/tis-620.enc',
'/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
'DATA'),
('tcl/encoding/koi8-u.enc',
'/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
'DATA'),
('tk/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
('tk/images/pwrdLogo200.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
'DATA'),
('tcl/encoding/gb1988.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
'DATA'),
('tcl/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
('tk/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
('tk/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
('tcl/encoding/macCentEuro.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
'DATA'),
('tcl/encoding/cp861.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
'DATA'),
('tcl/msgs/ar_in.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_in.msg', 'DATA'),
('tcl/encoding/iso8859-1.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
'DATA'),
('tcl/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
('tk/fontchooser.tcl', '/usr/share/tcltk/tk8.6/fontchooser.tcl', 'DATA'),
('tcl/msgs/ko_kr.msg', '/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg', 'DATA'),
('tcl/msgs/es_bo.msg', '/usr/share/tcltk/tcl8.6/msgs/es_bo.msg', 'DATA'),
('tcl/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
('tcl/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
('tcl/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
('tk/ttk/winTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/winTheme.tcl', 'DATA'),
('tcl/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
('tcl/msgs/gl_es.msg', '/usr/share/tcltk/tcl8.6/msgs/gl_es.msg', 'DATA'),
('tcl/msgs/es_do.msg', '/usr/share/tcltk/tcl8.6/msgs/es_do.msg', 'DATA'),
('tk/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
('tcl/encoding/cp775.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
'DATA'),
('tcl/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
('tcl/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
('tcl/msgs/es_pe.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pe.msg', 'DATA'),
('tcl/encoding/symbol.enc',
'/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
'DATA'),
('tk/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
('tcl/msgs/gv_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg', 'DATA'),
('tcl/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
('tcl/encoding/gb12345.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
'DATA'),
('tcl/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
('tcl/msgs/pt_br.msg', '/usr/share/tcltk/tcl8.6/msgs/pt_br.msg', 'DATA'),
('tcl/msgs/en_zw.msg', '/usr/share/tcltk/tcl8.6/msgs/en_zw.msg', 'DATA'),
('tcl/encoding/iso8859-10.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
'DATA'),
('tk/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
('tcl/encoding/iso8859-6.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
'DATA'),
('tcl/encoding/cp1256.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
'DATA'),
('tk/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
('tcl/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
('tcl/encoding/cp865.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
'DATA'),
('tcl/encoding/iso8859-9.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
'DATA'),
('tk/images/logoLarge.gif',
'/usr/share/tcltk/tk8.6/images/logoLarge.gif',
'DATA'),
('tcl/encoding/ascii.enc',
'/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
'DATA'),
('tcl/msgs/kw_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg', 'DATA'),
('tcl/encoding/cp860.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
'DATA'),
('tcl/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
('tcl/msgs/es_ni.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ni.msg', 'DATA'),
('tcl/encoding/euc-kr.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
'DATA'),
('tcl/encoding/iso8859-4.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
'DATA'),
('tcl/encoding/macUkraine.enc',
'/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
'DATA'),
('tcl/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
('tk/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
('tk/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
('tcl/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
('tcl/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
('tcl/encoding/cp850.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
'DATA'),
('tk/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
('tcl/encoding/cp1254.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
'DATA'),
('tcl/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
('tcl/msgs/id_id.msg', '/usr/share/tcltk/tcl8.6/msgs/id_id.msg', 'DATA'),
('tcl/encoding/macRomania.enc',
'/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
'DATA'),
('tcl/encoding/euc-jp.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
'DATA'),
('tcl/encoding/cp866.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
'DATA'),
('tcl/msgs/fo_fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg', 'DATA'),
('tcl/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
('tcl/encoding/gb2312.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
'DATA'),
('tcl/encoding/cp1252.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
'DATA'),
('tk/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
('tcl/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
('tk/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
('tcl/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
('tcl/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
('tcl/msgs/es_hn.msg', '/usr/share/tcltk/tcl8.6/msgs/es_hn.msg', 'DATA'),
('tcl/tcl8/tcltest-2.4.1.tm',
'/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.4.1.tm',
'DATA'),
('tcl/encoding/dingbats.enc',
'/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
'DATA'),
('tcl/encoding/gb2312-raw.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
'DATA'),
('tk/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
('tcl/encoding/macGreek.enc',
'/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
'DATA'),
('tk/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
('tcl/encoding/iso8859-5.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
'DATA'),
('tcl/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
('tcl/encoding/macDingbats.enc',
'/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
'DATA'),
('tcl/msgs/af_za.msg', '/usr/share/tcltk/tcl8.6/msgs/af_za.msg', 'DATA'),
('tcl/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
('tcl/msgs/en_au.msg', '/usr/share/tcltk/tcl8.6/msgs/en_au.msg', 'DATA'),
('tcl/msgs/fa_ir.msg', '/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg', 'DATA'),
('tcl/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
('tk/ttk/defaults.tcl', '/usr/share/tcltk/tk8.6/ttk/defaults.tcl', 'DATA'),
('tk/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
('tk/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
('tcl/msgs/es_sv.msg', '/usr/share/tcltk/tcl8.6/msgs/es_sv.msg', 'DATA'),
('tcl/msgs/ms_my.msg', '/usr/share/tcltk/tcl8.6/msgs/ms_my.msg', 'DATA'),
('tcl/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
('tcl/opt0.4/pkgIndex.tcl',
'/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
'DATA'),
('tcl/encoding/cp949.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
'DATA'),
('tk/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
('tcl/encoding/iso8859-15.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
'DATA'),
('tk/ttk/clamTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl', 'DATA'),
('tcl/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
('tcl/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
('tcl/msgs/en_in.msg', '/usr/share/tcltk/tcl8.6/msgs/en_in.msg', 'DATA'),
('tk/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
('tcl/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
('tk/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
('tcl/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
('tcl/msgs/zh_hk.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg', 'DATA'),
('tcl/msgs/it_ch.msg', '/usr/share/tcltk/tcl8.6/msgs/it_ch.msg', 'DATA'),
('tk/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
('tk/ttk/combobox.tcl', '/usr/share/tcltk/tk8.6/ttk/combobox.tcl', 'DATA'),
('tk/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
('tcl/msgs/de_be.msg', '/usr/share/tcltk/tcl8.6/msgs/de_be.msg', 'DATA'),
('tcl/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
('tcl/encoding/cp1258.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
'DATA'),
('tk/ttk/notebook.tcl', '/usr/share/tcltk/tk8.6/ttk/notebook.tcl', 'DATA'),
('tcl/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
('tk/unsupported.tcl', '/usr/share/tcltk/tk8.6/unsupported.tcl', 'DATA'),
('tcl/encoding/koi8-r.enc',
'/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
'DATA'),
('tcl/tcl8/platform/shell-1.1.4.tm',
'/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
'DATA'),
('tcl/encoding/ebcdic.enc',
'/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
'DATA'),
('tcl/msgs/ru_ua.msg', '/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg', 'DATA'),
('tcl/msgs/en_ie.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ie.msg', 'DATA'),
('tcl/encoding/cp869.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
'DATA'),
('tcl/msgs/ar_lb.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg', 'DATA'),
('tcl/msgs/en_za.msg', '/usr/share/tcltk/tcl8.6/msgs/en_za.msg', 'DATA'),
('tcl/encoding/macRoman.enc',
'/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
'DATA'),
('tcl/msgs/es_py.msg', '/usr/share/tcltk/tcl8.6/msgs/es_py.msg', 'DATA'),
('tcl/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
('tcl/msgs/zh_sg.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg', 'DATA'),
('tk/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
('tk/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
('tcl/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
('tk/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
('tcl/msgs/en_ca.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ca.msg', 'DATA'),
('tcl/msgs/en_ph.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ph.msg', 'DATA'),
('tk/images/logo100.gif',
'/usr/share/tcltk/tk8.6/images/logo100.gif',
'DATA'),
('tk/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
('tk/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
('tcl/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
('tcl/msgs/kl_gl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg', 'DATA'),
('tk/ttk/vistaTheme.tcl',
'/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
'DATA'),
('tk/ttk/spinbox.tcl', '/usr/share/tcltk/tk8.6/ttk/spinbox.tcl', 'DATA'),
('tk/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
('tk/ttk/sizegrip.tcl', '/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl', 'DATA'),
('tcl/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
('tcl/encoding/jis0212.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
'DATA'),
('tcl/msgs/en_be.msg', '/usr/share/tcltk/tcl8.6/msgs/en_be.msg', 'DATA'),
('tcl/encoding/euc-cn.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
'DATA'),
('tcl/encoding/macJapan.enc',
'/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
'DATA'),
('tcl/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
('tcl/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
('tk/ttk/classicTheme.tcl',
'/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
'DATA'),
('tcl/encoding/macCroatian.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
'DATA'),
('tcl/encoding/macCyrillic.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
'DATA'),
('tcl/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
('tcl/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
('tcl/msgs/en_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/en_gb.msg', 'DATA'),
('tk/images/tai-ku.gif', '/usr/share/tcltk/tk8.6/images/tai-ku.gif', 'DATA'),
('tcl/encoding/cp874.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
'DATA'),
('tcl/msgs/nl_be.msg', '/usr/share/tcltk/tcl8.6/msgs/nl_be.msg', 'DATA'),
('tcl/http1.0/http.tcl', '/usr/share/tcltk/tcl8.6/http1.0/http.tcl', 'DATA'),
('tcl/msgs/en_bw.msg', '/usr/share/tcltk/tcl8.6/msgs/en_bw.msg', 'DATA'),
('tk/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
('tcl/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
('tk/ttk/menubutton.tcl',
'/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
'DATA'),
('tcl/msgs/ga_ie.msg', '/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg', 'DATA'),
('tcl/msgs/en_sg.msg', '/usr/share/tcltk/tcl8.6/msgs/en_sg.msg', 'DATA'),
('tcl/encoding/iso8859-2.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
'DATA'),
('tcl/msgs/kok_in.msg', '/usr/share/tcltk/tcl8.6/msgs/kok_in.msg', 'DATA'),
('tk/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
('tcl/msgs/ar_jo.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg', 'DATA'),
('tcl/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
('tcl/encoding/cp932.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
'DATA'),
('tk/images/pwrdLogo100.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
'DATA'),
('tk/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
('tcl/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
('tcl/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
('tcl/encoding/iso8859-16.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
'DATA'),
('tcl/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
('tcl/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
('tk/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
('tcl/http1.0/pkgIndex.tcl',
'/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
'DATA'),
('tk/ttk/panedwindow.tcl',
'/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
'DATA'),
('tk/images/logo64.gif', '/usr/share/tcltk/tk8.6/images/logo64.gif', 'DATA'),
('tk/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
('tcl/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
('tcl/encoding/macTurkish.enc',
'/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
'DATA'),
('tcl/encoding/macIceland.enc',
'/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
'DATA'),
('tcl/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
('tk/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
('tcl/msgs/es_pr.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pr.msg', 'DATA'),
('tcl/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
('tk/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
('tcl/encoding/cp1251.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
'DATA'),
('tcl/msgs/zh_tw.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg', 'DATA'),
('tcl/encoding/cp1257.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
'DATA'),
('tcl/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
('tk/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
('tcl/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
('tcl/msgs/te_in.msg', '/usr/share/tcltk/tcl8.6/msgs/te_in.msg', 'DATA'),
('tcl/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
('tcl/encoding/shiftjis.enc',
'/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
'DATA'),
('tcl/msgs/fr_ch.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg', 'DATA'),
('tk/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
('tcl/encoding/cp855.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
'DATA'),
('tcl/msgs/es_pa.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pa.msg', 'DATA'),
('tcl/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
('tcl/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
('tcl/tcl8/msgcat-1.6.1.tm',
'/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
'DATA'),
('tcl/opt0.4/optparse.tcl',
'/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
'DATA'),
('tk/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
('tcl/encoding/cp863.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
'DATA'),
('tcl/encoding/macThai.enc',
'/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
'DATA')],
[])

View File

@ -1,635 +0,0 @@
('/root/Downloads/FLO-appStore-master/apps/FloRate/dist/rating-client',
True,
False,
False,
None,
None,
False,
False,
None,
True,
'rating-client.pkg',
[('out00-PYZ.pyz',
'/root/Downloads/FLO-appStore-master/apps/FloRate/build/rating-client/out00-PYZ.pyz',
'PYZ'),
('struct', '/usr/lib/python3.6/struct.pyo', 'PYMODULE'),
('pyimod01_os_path',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod01_os_path.pyc',
'PYMODULE'),
('pyimod02_archive',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod02_archive.pyc',
'PYMODULE'),
('pyimod03_importers',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod03_importers.pyc',
'PYMODULE'),
('pyiboot01_bootstrap',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
'PYSOURCE'),
('pyi_rth__tkinter',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/rthooks/pyi_rth__tkinter.py',
'PYSOURCE'),
('rating-client',
'/root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py',
'PYSOURCE'),
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('resource',
'/usr/lib/python3.6/lib-dynload/resource.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_ssl',
'/usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_hk',
'/usr/lib/python3.6/lib-dynload/_codecs_hk.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_kr',
'/usr/lib/python3.6/lib-dynload/_codecs_kr.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_tw',
'/usr/lib/python3.6/lib-dynload/_codecs_tw.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_cn',
'/usr/lib/python3.6/lib-dynload/_codecs_cn.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_jp',
'/usr/lib/python3.6/lib-dynload/_codecs_jp.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_iso2022',
'/usr/lib/python3.6/lib-dynload/_codecs_iso2022.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_multibytecodec',
'/usr/lib/python3.6/lib-dynload/_multibytecodec.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_opcode',
'/usr/lib/python3.6/lib-dynload/_opcode.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('readline',
'/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('termios',
'/usr/lib/python3.6/lib-dynload/termios.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_hashlib',
'/usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_bz2',
'/usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_lzma',
'/usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_sqlite3',
'/usr/lib/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_json',
'/usr/lib/python3.6/lib-dynload/_json.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_tkinter',
'/usr/lib/python3.6/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('libssl.so.1.1', '/usr/lib/x86_64-linux-gnu/libssl.so.1.1', 'BINARY'),
('libcrypto.so.1.1', '/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1', 'BINARY'),
('libreadline.so.7', '/lib/x86_64-linux-gnu/libreadline.so.7', 'BINARY'),
('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libsqlite3.so.0', '/usr/lib/x86_64-linux-gnu/libsqlite3.so.0', 'BINARY'),
('libXau.so.6', '/usr/lib/x86_64-linux-gnu/libXau.so.6', 'BINARY'),
('libbsd.so.0', '/lib/x86_64-linux-gnu/libbsd.so.0', 'BINARY'),
('libuuid.so.1', '/lib/x86_64-linux-gnu/libuuid.so.1', 'BINARY'),
('libXrender.so.1', '/usr/lib/x86_64-linux-gnu/libXrender.so.1', 'BINARY'),
('libXdmcp.so.6', '/usr/lib/x86_64-linux-gnu/libXdmcp.so.6', 'BINARY'),
('libfreetype.so.6', '/usr/lib/x86_64-linux-gnu/libfreetype.so.6', 'BINARY'),
('libBLT.2.5.so.8.6', '/usr/lib/libBLT.2.5.so.8.6', 'BINARY'),
('libfontconfig.so.1',
'/usr/lib/x86_64-linux-gnu/libfontconfig.so.1',
'BINARY'),
('libX11.so.6', '/usr/lib/x86_64-linux-gnu/libX11.so.6', 'BINARY'),
('libXft.so.2', '/usr/lib/x86_64-linux-gnu/libXft.so.2', 'BINARY'),
('libXss.so.1', '/usr/lib/x86_64-linux-gnu/libXss.so.1', 'BINARY'),
('libtk8.6.so', '/usr/lib/x86_64-linux-gnu/libtk8.6.so', 'BINARY'),
('libpng16.so.16', '/usr/lib/x86_64-linux-gnu/libpng16.so.16', 'BINARY'),
('libXext.so.6', '/usr/lib/x86_64-linux-gnu/libXext.so.6', 'BINARY'),
('libtcl8.6.so', '/usr/lib/x86_64-linux-gnu/libtcl8.6.so', 'BINARY'),
('libpython3.6m.so.1.0',
'/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0',
'BINARY'),
('base_library.zip',
'/root/Downloads/FLO-appStore-master/apps/FloRate/build/rating-client/base_library.zip',
'DATA'),
('tcl/msgs/es_uy.msg', '/usr/share/tcltk/tcl8.6/msgs/es_uy.msg', 'DATA'),
('tk/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
('tcl/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
('tk/images/pwrdLogo175.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
'DATA'),
('tcl/msgs/es_ar.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ar.msg', 'DATA'),
('tk/images/pwrdLogo150.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
'DATA'),
('tcl/msgs/en_hk.msg', '/usr/share/tcltk/tcl8.6/msgs/en_hk.msg', 'DATA'),
('tcl/encoding/iso8859-14.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
'DATA'),
('tcl/encoding/cp737.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
'DATA'),
('tcl/encoding/iso8859-13.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
'DATA'),
('tk/panedwindow.tcl', '/usr/share/tcltk/tk8.6/panedwindow.tcl', 'DATA'),
('tk/ttk/altTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/altTheme.tcl', 'DATA'),
('tcl/encoding/cp852.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
'DATA'),
('tcl/encoding/cp857.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
'DATA'),
('tcl/msgs/es_gt.msg', '/usr/share/tcltk/tcl8.6/msgs/es_gt.msg', 'DATA'),
('tcl/msgs/hi_in.msg', '/usr/share/tcltk/tcl8.6/msgs/hi_in.msg', 'DATA'),
('tk/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
('tcl/encoding/ksc5601.enc',
'/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
'DATA'),
('tk/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
('tcl/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
('tcl/msgs/es_ec.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ec.msg', 'DATA'),
('tcl/tcl8/http-2.8.12.tm',
'/usr/share/tcltk/tcl8.6/tcl8/http-2.8.12.tm',
'DATA'),
('tk/images/pwrdLogo75.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
'DATA'),
('tcl/encoding/iso8859-3.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
'DATA'),
('tcl/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
('tcl/encoding/jis0201.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
'DATA'),
('tcl/msgs/es_cl.msg', '/usr/share/tcltk/tcl8.6/msgs/es_cl.msg', 'DATA'),
('tk/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
('tk/ttk/aquaTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl', 'DATA'),
('tcl/msgs/de_at.msg', '/usr/share/tcltk/tcl8.6/msgs/de_at.msg', 'DATA'),
('tcl/msgs/bn_in.msg', '/usr/share/tcltk/tcl8.6/msgs/bn_in.msg', 'DATA'),
('tk/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
('tcl/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
('tcl/encoding/iso2022-jp.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
'DATA'),
('tcl/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
('tcl/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
('tcl/encoding/iso2022.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
'DATA'),
('tk/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
('tk/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
('tcl/msgs/fr_ca.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg', 'DATA'),
('tcl/encoding/cp862.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
'DATA'),
('tk/images/pwrdLogo.eps',
'/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
'DATA'),
('tcl/msgs/mr_in.msg', '/usr/share/tcltk/tcl8.6/msgs/mr_in.msg', 'DATA'),
('tcl/tcl8/platform-1.0.14.tm',
'/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.14.tm',
'DATA'),
('tcl/encoding/cp1253.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
'DATA'),
('tk/ttk/scrollbar.tcl', '/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl', 'DATA'),
('tcl/msgs/es_ve.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ve.msg', 'DATA'),
('tcl/msgs/ar_sy.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg', 'DATA'),
('tcl/msgs/en_nz.msg', '/usr/share/tcltk/tcl8.6/msgs/en_nz.msg', 'DATA'),
('tcl/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
('tk/ttk/cursors.tcl', '/usr/share/tcltk/tk8.6/ttk/cursors.tcl', 'DATA'),
('tcl/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
('tcl/encoding/iso8859-7.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
'DATA'),
('tk/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
('tcl/encoding/iso8859-8.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
'DATA'),
('tcl/msgs/es_co.msg', '/usr/share/tcltk/tcl8.6/msgs/es_co.msg', 'DATA'),
('tcl/msgs/eu_es.msg', '/usr/share/tcltk/tcl8.6/msgs/eu_es.msg', 'DATA'),
('tcl/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
('tk/ttk/treeview.tcl', '/usr/share/tcltk/tk8.6/ttk/treeview.tcl', 'DATA'),
('tcl/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
('tcl/msgs/ta_in.msg', '/usr/share/tcltk/tcl8.6/msgs/ta_in.msg', 'DATA'),
('tcl/encoding/cp1255.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
'DATA'),
('tcl/encoding/cp1250.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
'DATA'),
('tcl/encoding/jis0208.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
'DATA'),
('tk/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
('tcl/msgs/es_mx.msg', '/usr/share/tcltk/tcl8.6/msgs/es_mx.msg', 'DATA'),
('tcl/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
('tcl/encoding/big5.enc',
'/usr/share/tcltk/tcl8.6/encoding/big5.enc',
'DATA'),
('tk/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
('tk/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
('tcl/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
('tcl/msgs/fa_in.msg', '/usr/share/tcltk/tcl8.6/msgs/fa_in.msg', 'DATA'),
('tcl/msgs/fr_be.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_be.msg', 'DATA'),
('tk/ttk/progress.tcl', '/usr/share/tcltk/tk8.6/ttk/progress.tcl', 'DATA'),
('tcl/msgs/zh_cn.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg', 'DATA'),
('tk/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
('tcl/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
('tk/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
('tk/images/logo.eps', '/usr/share/tcltk/tk8.6/images/logo.eps', 'DATA'),
('tk/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
('tk/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
('tcl/encoding/cp950.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
'DATA'),
('tcl/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
('tcl/encoding/cp936.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
'DATA'),
('tcl/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
('tk/images/logoMed.gif',
'/usr/share/tcltk/tk8.6/images/logoMed.gif',
'DATA'),
('tcl/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
('tcl/encoding/iso2022-kr.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
'DATA'),
('tcl/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
('tcl/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
('tk/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
('tk/ttk/xpTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl', 'DATA'),
('tcl/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
('tcl/msgs/es_cr.msg', '/usr/share/tcltk/tcl8.6/msgs/es_cr.msg', 'DATA'),
('tcl/encoding/cp864.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
'DATA'),
('tcl/encoding/cp437.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
'DATA'),
('tcl/encoding/tis-620.enc',
'/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
'DATA'),
('tcl/encoding/koi8-u.enc',
'/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
'DATA'),
('tk/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
('tk/images/pwrdLogo200.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
'DATA'),
('tcl/encoding/gb1988.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
'DATA'),
('tcl/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
('tk/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
('tk/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
('tcl/encoding/macCentEuro.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
'DATA'),
('tcl/encoding/cp861.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
'DATA'),
('tcl/msgs/ar_in.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_in.msg', 'DATA'),
('tcl/encoding/iso8859-1.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
'DATA'),
('tcl/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
('tk/fontchooser.tcl', '/usr/share/tcltk/tk8.6/fontchooser.tcl', 'DATA'),
('tcl/msgs/ko_kr.msg', '/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg', 'DATA'),
('tcl/msgs/es_bo.msg', '/usr/share/tcltk/tcl8.6/msgs/es_bo.msg', 'DATA'),
('tcl/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
('tcl/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
('tcl/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
('tk/ttk/winTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/winTheme.tcl', 'DATA'),
('tcl/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
('tcl/msgs/gl_es.msg', '/usr/share/tcltk/tcl8.6/msgs/gl_es.msg', 'DATA'),
('tcl/msgs/es_do.msg', '/usr/share/tcltk/tcl8.6/msgs/es_do.msg', 'DATA'),
('tk/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
('tcl/encoding/cp775.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
'DATA'),
('tcl/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
('tcl/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
('tcl/msgs/es_pe.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pe.msg', 'DATA'),
('tcl/encoding/symbol.enc',
'/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
'DATA'),
('tk/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
('tcl/msgs/gv_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg', 'DATA'),
('tcl/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
('tcl/encoding/gb12345.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
'DATA'),
('tcl/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
('tcl/msgs/pt_br.msg', '/usr/share/tcltk/tcl8.6/msgs/pt_br.msg', 'DATA'),
('tcl/msgs/en_zw.msg', '/usr/share/tcltk/tcl8.6/msgs/en_zw.msg', 'DATA'),
('tcl/encoding/iso8859-10.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
'DATA'),
('tk/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
('tcl/encoding/iso8859-6.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
'DATA'),
('tcl/encoding/cp1256.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
'DATA'),
('tk/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
('tcl/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
('tcl/encoding/cp865.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
'DATA'),
('tcl/encoding/iso8859-9.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
'DATA'),
('tk/images/logoLarge.gif',
'/usr/share/tcltk/tk8.6/images/logoLarge.gif',
'DATA'),
('tcl/encoding/ascii.enc',
'/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
'DATA'),
('tcl/msgs/kw_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg', 'DATA'),
('tcl/encoding/cp860.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
'DATA'),
('tcl/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
('tcl/msgs/es_ni.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ni.msg', 'DATA'),
('tcl/encoding/euc-kr.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
'DATA'),
('tcl/encoding/iso8859-4.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
'DATA'),
('tcl/encoding/macUkraine.enc',
'/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
'DATA'),
('tcl/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
('tk/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
('tk/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
('tcl/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
('tcl/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
('tcl/encoding/cp850.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
'DATA'),
('tk/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
('tcl/encoding/cp1254.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
'DATA'),
('tcl/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
('tcl/msgs/id_id.msg', '/usr/share/tcltk/tcl8.6/msgs/id_id.msg', 'DATA'),
('tcl/encoding/macRomania.enc',
'/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
'DATA'),
('tcl/encoding/euc-jp.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
'DATA'),
('tcl/encoding/cp866.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
'DATA'),
('tcl/msgs/fo_fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg', 'DATA'),
('tcl/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
('tcl/encoding/gb2312.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
'DATA'),
('tcl/encoding/cp1252.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
'DATA'),
('tk/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
('tcl/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
('tk/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
('tcl/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
('tcl/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
('tcl/msgs/es_hn.msg', '/usr/share/tcltk/tcl8.6/msgs/es_hn.msg', 'DATA'),
('tcl/tcl8/tcltest-2.4.1.tm',
'/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.4.1.tm',
'DATA'),
('tcl/encoding/dingbats.enc',
'/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
'DATA'),
('tcl/encoding/gb2312-raw.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
'DATA'),
('tk/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
('tcl/encoding/macGreek.enc',
'/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
'DATA'),
('tk/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
('tcl/encoding/iso8859-5.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
'DATA'),
('tcl/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
('tcl/encoding/macDingbats.enc',
'/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
'DATA'),
('tcl/msgs/af_za.msg', '/usr/share/tcltk/tcl8.6/msgs/af_za.msg', 'DATA'),
('tcl/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
('tcl/msgs/en_au.msg', '/usr/share/tcltk/tcl8.6/msgs/en_au.msg', 'DATA'),
('tcl/msgs/fa_ir.msg', '/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg', 'DATA'),
('tcl/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
('tk/ttk/defaults.tcl', '/usr/share/tcltk/tk8.6/ttk/defaults.tcl', 'DATA'),
('tk/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
('tk/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
('tcl/msgs/es_sv.msg', '/usr/share/tcltk/tcl8.6/msgs/es_sv.msg', 'DATA'),
('tcl/msgs/ms_my.msg', '/usr/share/tcltk/tcl8.6/msgs/ms_my.msg', 'DATA'),
('tcl/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
('tcl/opt0.4/pkgIndex.tcl',
'/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
'DATA'),
('tcl/encoding/cp949.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
'DATA'),
('tk/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
('tcl/encoding/iso8859-15.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
'DATA'),
('tk/ttk/clamTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl', 'DATA'),
('tcl/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
('tcl/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
('tcl/msgs/en_in.msg', '/usr/share/tcltk/tcl8.6/msgs/en_in.msg', 'DATA'),
('tk/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
('tcl/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
('tk/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
('tcl/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
('tcl/msgs/zh_hk.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg', 'DATA'),
('tcl/msgs/it_ch.msg', '/usr/share/tcltk/tcl8.6/msgs/it_ch.msg', 'DATA'),
('tk/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
('tk/ttk/combobox.tcl', '/usr/share/tcltk/tk8.6/ttk/combobox.tcl', 'DATA'),
('tk/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
('tcl/msgs/de_be.msg', '/usr/share/tcltk/tcl8.6/msgs/de_be.msg', 'DATA'),
('tcl/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
('tcl/encoding/cp1258.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
'DATA'),
('tk/ttk/notebook.tcl', '/usr/share/tcltk/tk8.6/ttk/notebook.tcl', 'DATA'),
('tcl/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
('tk/unsupported.tcl', '/usr/share/tcltk/tk8.6/unsupported.tcl', 'DATA'),
('tcl/encoding/koi8-r.enc',
'/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
'DATA'),
('tcl/tcl8/platform/shell-1.1.4.tm',
'/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
'DATA'),
('tcl/encoding/ebcdic.enc',
'/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
'DATA'),
('tcl/msgs/ru_ua.msg', '/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg', 'DATA'),
('tcl/msgs/en_ie.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ie.msg', 'DATA'),
('tcl/encoding/cp869.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
'DATA'),
('tcl/msgs/ar_lb.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg', 'DATA'),
('tcl/msgs/en_za.msg', '/usr/share/tcltk/tcl8.6/msgs/en_za.msg', 'DATA'),
('tcl/encoding/macRoman.enc',
'/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
'DATA'),
('tcl/msgs/es_py.msg', '/usr/share/tcltk/tcl8.6/msgs/es_py.msg', 'DATA'),
('tcl/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
('tcl/msgs/zh_sg.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg', 'DATA'),
('tk/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
('tk/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
('tcl/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
('tk/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
('tcl/msgs/en_ca.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ca.msg', 'DATA'),
('tcl/msgs/en_ph.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ph.msg', 'DATA'),
('tk/images/logo100.gif',
'/usr/share/tcltk/tk8.6/images/logo100.gif',
'DATA'),
('tk/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
('tk/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
('tcl/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
('tcl/msgs/kl_gl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg', 'DATA'),
('tk/ttk/vistaTheme.tcl',
'/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
'DATA'),
('tk/ttk/spinbox.tcl', '/usr/share/tcltk/tk8.6/ttk/spinbox.tcl', 'DATA'),
('tk/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
('tk/ttk/sizegrip.tcl', '/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl', 'DATA'),
('tcl/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
('tcl/encoding/jis0212.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
'DATA'),
('tcl/msgs/en_be.msg', '/usr/share/tcltk/tcl8.6/msgs/en_be.msg', 'DATA'),
('tcl/encoding/euc-cn.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
'DATA'),
('tcl/encoding/macJapan.enc',
'/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
'DATA'),
('tcl/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
('tcl/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
('tk/ttk/classicTheme.tcl',
'/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
'DATA'),
('tcl/encoding/macCroatian.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
'DATA'),
('tcl/encoding/macCyrillic.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
'DATA'),
('tcl/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
('tcl/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
('tcl/msgs/en_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/en_gb.msg', 'DATA'),
('tk/images/tai-ku.gif', '/usr/share/tcltk/tk8.6/images/tai-ku.gif', 'DATA'),
('tcl/encoding/cp874.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
'DATA'),
('tcl/msgs/nl_be.msg', '/usr/share/tcltk/tcl8.6/msgs/nl_be.msg', 'DATA'),
('tcl/http1.0/http.tcl', '/usr/share/tcltk/tcl8.6/http1.0/http.tcl', 'DATA'),
('tcl/msgs/en_bw.msg', '/usr/share/tcltk/tcl8.6/msgs/en_bw.msg', 'DATA'),
('tk/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
('tcl/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
('tk/ttk/menubutton.tcl',
'/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
'DATA'),
('tcl/msgs/ga_ie.msg', '/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg', 'DATA'),
('tcl/msgs/en_sg.msg', '/usr/share/tcltk/tcl8.6/msgs/en_sg.msg', 'DATA'),
('tcl/encoding/iso8859-2.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
'DATA'),
('tcl/msgs/kok_in.msg', '/usr/share/tcltk/tcl8.6/msgs/kok_in.msg', 'DATA'),
('tk/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
('tcl/msgs/ar_jo.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg', 'DATA'),
('tcl/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
('tcl/encoding/cp932.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
'DATA'),
('tk/images/pwrdLogo100.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
'DATA'),
('tk/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
('tcl/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
('tcl/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
('tcl/encoding/iso8859-16.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
'DATA'),
('tcl/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
('tcl/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
('tk/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
('tcl/http1.0/pkgIndex.tcl',
'/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
'DATA'),
('tk/ttk/panedwindow.tcl',
'/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
'DATA'),
('tk/images/logo64.gif', '/usr/share/tcltk/tk8.6/images/logo64.gif', 'DATA'),
('tk/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
('tcl/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
('tcl/encoding/macTurkish.enc',
'/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
'DATA'),
('tcl/encoding/macIceland.enc',
'/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
'DATA'),
('tcl/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
('tk/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
('tcl/msgs/es_pr.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pr.msg', 'DATA'),
('tcl/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
('tk/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
('tcl/encoding/cp1251.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
'DATA'),
('tcl/msgs/zh_tw.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg', 'DATA'),
('tcl/encoding/cp1257.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
'DATA'),
('tcl/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
('tk/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
('tcl/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
('tcl/msgs/te_in.msg', '/usr/share/tcltk/tcl8.6/msgs/te_in.msg', 'DATA'),
('tcl/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
('tcl/encoding/shiftjis.enc',
'/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
'DATA'),
('tcl/msgs/fr_ch.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg', 'DATA'),
('tk/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
('tcl/encoding/cp855.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
'DATA'),
('tcl/msgs/es_pa.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pa.msg', 'DATA'),
('tcl/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
('tcl/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
('tcl/tcl8/msgcat-1.6.1.tm',
'/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
'DATA'),
('tcl/opt0.4/optparse.tcl',
'/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
'DATA'),
('tk/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
('tcl/encoding/cp863.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
'DATA'),
('tcl/encoding/macThai.enc',
'/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
'DATA')],
[],
False,
True,
1533892179,
[('run',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/bootloader/Linux-64bit/run',
'EXECUTABLE')])

View File

@ -1,628 +0,0 @@
('/root/Downloads/FLO-appStore-master/apps/FloRate/build/rating-client/out00-PKG.pkg',
{'BINARY': 1,
'DATA': 1,
'EXECUTABLE': 1,
'EXTENSION': 1,
'PYMODULE': 1,
'PYSOURCE': 1,
'PYZ': 0},
[('out00-PYZ.pyz',
'/root/Downloads/FLO-appStore-master/apps/FloRate/build/rating-client/out00-PYZ.pyz',
'PYZ'),
('struct', '/usr/lib/python3.6/struct.pyo', 'PYMODULE'),
('pyimod01_os_path',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod01_os_path.pyc',
'PYMODULE'),
('pyimod02_archive',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod02_archive.pyc',
'PYMODULE'),
('pyimod03_importers',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod03_importers.pyc',
'PYMODULE'),
('pyiboot01_bootstrap',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
'PYSOURCE'),
('pyi_rth__tkinter',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/rthooks/pyi_rth__tkinter.py',
'PYSOURCE'),
('rating-client',
'/root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py',
'PYSOURCE'),
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('resource',
'/usr/lib/python3.6/lib-dynload/resource.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_ssl',
'/usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_hk',
'/usr/lib/python3.6/lib-dynload/_codecs_hk.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_kr',
'/usr/lib/python3.6/lib-dynload/_codecs_kr.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_tw',
'/usr/lib/python3.6/lib-dynload/_codecs_tw.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_cn',
'/usr/lib/python3.6/lib-dynload/_codecs_cn.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_jp',
'/usr/lib/python3.6/lib-dynload/_codecs_jp.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_iso2022',
'/usr/lib/python3.6/lib-dynload/_codecs_iso2022.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_multibytecodec',
'/usr/lib/python3.6/lib-dynload/_multibytecodec.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_opcode',
'/usr/lib/python3.6/lib-dynload/_opcode.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('readline',
'/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('termios',
'/usr/lib/python3.6/lib-dynload/termios.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_hashlib',
'/usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_bz2',
'/usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_lzma',
'/usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_sqlite3',
'/usr/lib/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_json',
'/usr/lib/python3.6/lib-dynload/_json.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_tkinter',
'/usr/lib/python3.6/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('libssl.so.1.1', '/usr/lib/x86_64-linux-gnu/libssl.so.1.1', 'BINARY'),
('libcrypto.so.1.1', '/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1', 'BINARY'),
('libreadline.so.7', '/lib/x86_64-linux-gnu/libreadline.so.7', 'BINARY'),
('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libsqlite3.so.0', '/usr/lib/x86_64-linux-gnu/libsqlite3.so.0', 'BINARY'),
('libXau.so.6', '/usr/lib/x86_64-linux-gnu/libXau.so.6', 'BINARY'),
('libbsd.so.0', '/lib/x86_64-linux-gnu/libbsd.so.0', 'BINARY'),
('libuuid.so.1', '/lib/x86_64-linux-gnu/libuuid.so.1', 'BINARY'),
('libXrender.so.1', '/usr/lib/x86_64-linux-gnu/libXrender.so.1', 'BINARY'),
('libXdmcp.so.6', '/usr/lib/x86_64-linux-gnu/libXdmcp.so.6', 'BINARY'),
('libfreetype.so.6', '/usr/lib/x86_64-linux-gnu/libfreetype.so.6', 'BINARY'),
('libBLT.2.5.so.8.6', '/usr/lib/libBLT.2.5.so.8.6', 'BINARY'),
('libfontconfig.so.1',
'/usr/lib/x86_64-linux-gnu/libfontconfig.so.1',
'BINARY'),
('libX11.so.6', '/usr/lib/x86_64-linux-gnu/libX11.so.6', 'BINARY'),
('libXft.so.2', '/usr/lib/x86_64-linux-gnu/libXft.so.2', 'BINARY'),
('libXss.so.1', '/usr/lib/x86_64-linux-gnu/libXss.so.1', 'BINARY'),
('libtk8.6.so', '/usr/lib/x86_64-linux-gnu/libtk8.6.so', 'BINARY'),
('libpng16.so.16', '/usr/lib/x86_64-linux-gnu/libpng16.so.16', 'BINARY'),
('libXext.so.6', '/usr/lib/x86_64-linux-gnu/libXext.so.6', 'BINARY'),
('libtcl8.6.so', '/usr/lib/x86_64-linux-gnu/libtcl8.6.so', 'BINARY'),
('libpython3.6m.so.1.0',
'/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0',
'BINARY'),
('base_library.zip',
'/root/Downloads/FLO-appStore-master/apps/FloRate/build/rating-client/base_library.zip',
'DATA'),
('tcl/msgs/es_uy.msg', '/usr/share/tcltk/tcl8.6/msgs/es_uy.msg', 'DATA'),
('tk/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
('tcl/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
('tk/images/pwrdLogo175.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
'DATA'),
('tcl/msgs/es_ar.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ar.msg', 'DATA'),
('tk/images/pwrdLogo150.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
'DATA'),
('tcl/msgs/en_hk.msg', '/usr/share/tcltk/tcl8.6/msgs/en_hk.msg', 'DATA'),
('tcl/encoding/iso8859-14.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
'DATA'),
('tcl/encoding/cp737.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
'DATA'),
('tcl/encoding/iso8859-13.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
'DATA'),
('tk/panedwindow.tcl', '/usr/share/tcltk/tk8.6/panedwindow.tcl', 'DATA'),
('tk/ttk/altTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/altTheme.tcl', 'DATA'),
('tcl/encoding/cp852.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
'DATA'),
('tcl/encoding/cp857.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
'DATA'),
('tcl/msgs/es_gt.msg', '/usr/share/tcltk/tcl8.6/msgs/es_gt.msg', 'DATA'),
('tcl/msgs/hi_in.msg', '/usr/share/tcltk/tcl8.6/msgs/hi_in.msg', 'DATA'),
('tk/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
('tcl/encoding/ksc5601.enc',
'/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
'DATA'),
('tk/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
('tcl/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
('tcl/msgs/es_ec.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ec.msg', 'DATA'),
('tcl/tcl8/http-2.8.12.tm',
'/usr/share/tcltk/tcl8.6/tcl8/http-2.8.12.tm',
'DATA'),
('tk/images/pwrdLogo75.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
'DATA'),
('tcl/encoding/iso8859-3.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
'DATA'),
('tcl/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
('tcl/encoding/jis0201.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
'DATA'),
('tcl/msgs/es_cl.msg', '/usr/share/tcltk/tcl8.6/msgs/es_cl.msg', 'DATA'),
('tk/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
('tk/ttk/aquaTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl', 'DATA'),
('tcl/msgs/de_at.msg', '/usr/share/tcltk/tcl8.6/msgs/de_at.msg', 'DATA'),
('tcl/msgs/bn_in.msg', '/usr/share/tcltk/tcl8.6/msgs/bn_in.msg', 'DATA'),
('tk/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
('tcl/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
('tcl/encoding/iso2022-jp.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
'DATA'),
('tcl/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
('tcl/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
('tcl/encoding/iso2022.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
'DATA'),
('tk/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
('tk/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
('tcl/msgs/fr_ca.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg', 'DATA'),
('tcl/encoding/cp862.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
'DATA'),
('tk/images/pwrdLogo.eps',
'/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
'DATA'),
('tcl/msgs/mr_in.msg', '/usr/share/tcltk/tcl8.6/msgs/mr_in.msg', 'DATA'),
('tcl/tcl8/platform-1.0.14.tm',
'/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.14.tm',
'DATA'),
('tcl/encoding/cp1253.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
'DATA'),
('tk/ttk/scrollbar.tcl', '/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl', 'DATA'),
('tcl/msgs/es_ve.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ve.msg', 'DATA'),
('tcl/msgs/ar_sy.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg', 'DATA'),
('tcl/msgs/en_nz.msg', '/usr/share/tcltk/tcl8.6/msgs/en_nz.msg', 'DATA'),
('tcl/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
('tk/ttk/cursors.tcl', '/usr/share/tcltk/tk8.6/ttk/cursors.tcl', 'DATA'),
('tcl/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
('tcl/encoding/iso8859-7.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
'DATA'),
('tk/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
('tcl/encoding/iso8859-8.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
'DATA'),
('tcl/msgs/es_co.msg', '/usr/share/tcltk/tcl8.6/msgs/es_co.msg', 'DATA'),
('tcl/msgs/eu_es.msg', '/usr/share/tcltk/tcl8.6/msgs/eu_es.msg', 'DATA'),
('tcl/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
('tk/ttk/treeview.tcl', '/usr/share/tcltk/tk8.6/ttk/treeview.tcl', 'DATA'),
('tcl/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
('tcl/msgs/ta_in.msg', '/usr/share/tcltk/tcl8.6/msgs/ta_in.msg', 'DATA'),
('tcl/encoding/cp1255.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
'DATA'),
('tcl/encoding/cp1250.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
'DATA'),
('tcl/encoding/jis0208.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
'DATA'),
('tk/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
('tcl/msgs/es_mx.msg', '/usr/share/tcltk/tcl8.6/msgs/es_mx.msg', 'DATA'),
('tcl/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
('tcl/encoding/big5.enc',
'/usr/share/tcltk/tcl8.6/encoding/big5.enc',
'DATA'),
('tk/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
('tk/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
('tcl/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
('tcl/msgs/fa_in.msg', '/usr/share/tcltk/tcl8.6/msgs/fa_in.msg', 'DATA'),
('tcl/msgs/fr_be.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_be.msg', 'DATA'),
('tk/ttk/progress.tcl', '/usr/share/tcltk/tk8.6/ttk/progress.tcl', 'DATA'),
('tcl/msgs/zh_cn.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg', 'DATA'),
('tk/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
('tcl/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
('tk/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
('tk/images/logo.eps', '/usr/share/tcltk/tk8.6/images/logo.eps', 'DATA'),
('tk/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
('tk/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
('tcl/encoding/cp950.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
'DATA'),
('tcl/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
('tcl/encoding/cp936.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
'DATA'),
('tcl/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
('tk/images/logoMed.gif',
'/usr/share/tcltk/tk8.6/images/logoMed.gif',
'DATA'),
('tcl/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
('tcl/encoding/iso2022-kr.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
'DATA'),
('tcl/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
('tcl/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
('tk/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
('tk/ttk/xpTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl', 'DATA'),
('tcl/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
('tcl/msgs/es_cr.msg', '/usr/share/tcltk/tcl8.6/msgs/es_cr.msg', 'DATA'),
('tcl/encoding/cp864.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
'DATA'),
('tcl/encoding/cp437.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
'DATA'),
('tcl/encoding/tis-620.enc',
'/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
'DATA'),
('tcl/encoding/koi8-u.enc',
'/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
'DATA'),
('tk/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
('tk/images/pwrdLogo200.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
'DATA'),
('tcl/encoding/gb1988.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
'DATA'),
('tcl/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
('tk/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
('tk/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
('tcl/encoding/macCentEuro.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
'DATA'),
('tcl/encoding/cp861.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
'DATA'),
('tcl/msgs/ar_in.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_in.msg', 'DATA'),
('tcl/encoding/iso8859-1.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
'DATA'),
('tcl/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
('tk/fontchooser.tcl', '/usr/share/tcltk/tk8.6/fontchooser.tcl', 'DATA'),
('tcl/msgs/ko_kr.msg', '/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg', 'DATA'),
('tcl/msgs/es_bo.msg', '/usr/share/tcltk/tcl8.6/msgs/es_bo.msg', 'DATA'),
('tcl/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
('tcl/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
('tcl/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
('tk/ttk/winTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/winTheme.tcl', 'DATA'),
('tcl/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
('tcl/msgs/gl_es.msg', '/usr/share/tcltk/tcl8.6/msgs/gl_es.msg', 'DATA'),
('tcl/msgs/es_do.msg', '/usr/share/tcltk/tcl8.6/msgs/es_do.msg', 'DATA'),
('tk/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
('tcl/encoding/cp775.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
'DATA'),
('tcl/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
('tcl/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
('tcl/msgs/es_pe.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pe.msg', 'DATA'),
('tcl/encoding/symbol.enc',
'/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
'DATA'),
('tk/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
('tcl/msgs/gv_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg', 'DATA'),
('tcl/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
('tcl/encoding/gb12345.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
'DATA'),
('tcl/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
('tcl/msgs/pt_br.msg', '/usr/share/tcltk/tcl8.6/msgs/pt_br.msg', 'DATA'),
('tcl/msgs/en_zw.msg', '/usr/share/tcltk/tcl8.6/msgs/en_zw.msg', 'DATA'),
('tcl/encoding/iso8859-10.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
'DATA'),
('tk/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
('tcl/encoding/iso8859-6.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
'DATA'),
('tcl/encoding/cp1256.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
'DATA'),
('tk/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
('tcl/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
('tcl/encoding/cp865.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
'DATA'),
('tcl/encoding/iso8859-9.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
'DATA'),
('tk/images/logoLarge.gif',
'/usr/share/tcltk/tk8.6/images/logoLarge.gif',
'DATA'),
('tcl/encoding/ascii.enc',
'/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
'DATA'),
('tcl/msgs/kw_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg', 'DATA'),
('tcl/encoding/cp860.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
'DATA'),
('tcl/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
('tcl/msgs/es_ni.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ni.msg', 'DATA'),
('tcl/encoding/euc-kr.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
'DATA'),
('tcl/encoding/iso8859-4.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
'DATA'),
('tcl/encoding/macUkraine.enc',
'/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
'DATA'),
('tcl/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
('tk/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
('tk/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
('tcl/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
('tcl/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
('tcl/encoding/cp850.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
'DATA'),
('tk/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
('tcl/encoding/cp1254.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
'DATA'),
('tcl/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
('tcl/msgs/id_id.msg', '/usr/share/tcltk/tcl8.6/msgs/id_id.msg', 'DATA'),
('tcl/encoding/macRomania.enc',
'/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
'DATA'),
('tcl/encoding/euc-jp.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
'DATA'),
('tcl/encoding/cp866.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
'DATA'),
('tcl/msgs/fo_fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg', 'DATA'),
('tcl/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
('tcl/encoding/gb2312.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
'DATA'),
('tcl/encoding/cp1252.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
'DATA'),
('tk/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
('tcl/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
('tk/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
('tcl/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
('tcl/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
('tcl/msgs/es_hn.msg', '/usr/share/tcltk/tcl8.6/msgs/es_hn.msg', 'DATA'),
('tcl/tcl8/tcltest-2.4.1.tm',
'/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.4.1.tm',
'DATA'),
('tcl/encoding/dingbats.enc',
'/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
'DATA'),
('tcl/encoding/gb2312-raw.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
'DATA'),
('tk/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
('tcl/encoding/macGreek.enc',
'/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
'DATA'),
('tk/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
('tcl/encoding/iso8859-5.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
'DATA'),
('tcl/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
('tcl/encoding/macDingbats.enc',
'/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
'DATA'),
('tcl/msgs/af_za.msg', '/usr/share/tcltk/tcl8.6/msgs/af_za.msg', 'DATA'),
('tcl/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
('tcl/msgs/en_au.msg', '/usr/share/tcltk/tcl8.6/msgs/en_au.msg', 'DATA'),
('tcl/msgs/fa_ir.msg', '/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg', 'DATA'),
('tcl/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
('tk/ttk/defaults.tcl', '/usr/share/tcltk/tk8.6/ttk/defaults.tcl', 'DATA'),
('tk/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
('tk/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
('tcl/msgs/es_sv.msg', '/usr/share/tcltk/tcl8.6/msgs/es_sv.msg', 'DATA'),
('tcl/msgs/ms_my.msg', '/usr/share/tcltk/tcl8.6/msgs/ms_my.msg', 'DATA'),
('tcl/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
('tcl/opt0.4/pkgIndex.tcl',
'/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
'DATA'),
('tcl/encoding/cp949.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
'DATA'),
('tk/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
('tcl/encoding/iso8859-15.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
'DATA'),
('tk/ttk/clamTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl', 'DATA'),
('tcl/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
('tcl/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
('tcl/msgs/en_in.msg', '/usr/share/tcltk/tcl8.6/msgs/en_in.msg', 'DATA'),
('tk/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
('tcl/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
('tk/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
('tcl/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
('tcl/msgs/zh_hk.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg', 'DATA'),
('tcl/msgs/it_ch.msg', '/usr/share/tcltk/tcl8.6/msgs/it_ch.msg', 'DATA'),
('tk/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
('tk/ttk/combobox.tcl', '/usr/share/tcltk/tk8.6/ttk/combobox.tcl', 'DATA'),
('tk/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
('tcl/msgs/de_be.msg', '/usr/share/tcltk/tcl8.6/msgs/de_be.msg', 'DATA'),
('tcl/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
('tcl/encoding/cp1258.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
'DATA'),
('tk/ttk/notebook.tcl', '/usr/share/tcltk/tk8.6/ttk/notebook.tcl', 'DATA'),
('tcl/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
('tk/unsupported.tcl', '/usr/share/tcltk/tk8.6/unsupported.tcl', 'DATA'),
('tcl/encoding/koi8-r.enc',
'/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
'DATA'),
('tcl/tcl8/platform/shell-1.1.4.tm',
'/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
'DATA'),
('tcl/encoding/ebcdic.enc',
'/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
'DATA'),
('tcl/msgs/ru_ua.msg', '/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg', 'DATA'),
('tcl/msgs/en_ie.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ie.msg', 'DATA'),
('tcl/encoding/cp869.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
'DATA'),
('tcl/msgs/ar_lb.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg', 'DATA'),
('tcl/msgs/en_za.msg', '/usr/share/tcltk/tcl8.6/msgs/en_za.msg', 'DATA'),
('tcl/encoding/macRoman.enc',
'/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
'DATA'),
('tcl/msgs/es_py.msg', '/usr/share/tcltk/tcl8.6/msgs/es_py.msg', 'DATA'),
('tcl/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
('tcl/msgs/zh_sg.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg', 'DATA'),
('tk/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
('tk/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
('tcl/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
('tk/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
('tcl/msgs/en_ca.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ca.msg', 'DATA'),
('tcl/msgs/en_ph.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ph.msg', 'DATA'),
('tk/images/logo100.gif',
'/usr/share/tcltk/tk8.6/images/logo100.gif',
'DATA'),
('tk/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
('tk/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
('tcl/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
('tcl/msgs/kl_gl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg', 'DATA'),
('tk/ttk/vistaTheme.tcl',
'/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
'DATA'),
('tk/ttk/spinbox.tcl', '/usr/share/tcltk/tk8.6/ttk/spinbox.tcl', 'DATA'),
('tk/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
('tk/ttk/sizegrip.tcl', '/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl', 'DATA'),
('tcl/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
('tcl/encoding/jis0212.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
'DATA'),
('tcl/msgs/en_be.msg', '/usr/share/tcltk/tcl8.6/msgs/en_be.msg', 'DATA'),
('tcl/encoding/euc-cn.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
'DATA'),
('tcl/encoding/macJapan.enc',
'/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
'DATA'),
('tcl/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
('tcl/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
('tk/ttk/classicTheme.tcl',
'/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
'DATA'),
('tcl/encoding/macCroatian.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
'DATA'),
('tcl/encoding/macCyrillic.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
'DATA'),
('tcl/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
('tcl/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
('tcl/msgs/en_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/en_gb.msg', 'DATA'),
('tk/images/tai-ku.gif', '/usr/share/tcltk/tk8.6/images/tai-ku.gif', 'DATA'),
('tcl/encoding/cp874.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
'DATA'),
('tcl/msgs/nl_be.msg', '/usr/share/tcltk/tcl8.6/msgs/nl_be.msg', 'DATA'),
('tcl/http1.0/http.tcl', '/usr/share/tcltk/tcl8.6/http1.0/http.tcl', 'DATA'),
('tcl/msgs/en_bw.msg', '/usr/share/tcltk/tcl8.6/msgs/en_bw.msg', 'DATA'),
('tk/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
('tcl/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
('tk/ttk/menubutton.tcl',
'/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
'DATA'),
('tcl/msgs/ga_ie.msg', '/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg', 'DATA'),
('tcl/msgs/en_sg.msg', '/usr/share/tcltk/tcl8.6/msgs/en_sg.msg', 'DATA'),
('tcl/encoding/iso8859-2.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
'DATA'),
('tcl/msgs/kok_in.msg', '/usr/share/tcltk/tcl8.6/msgs/kok_in.msg', 'DATA'),
('tk/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
('tcl/msgs/ar_jo.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg', 'DATA'),
('tcl/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
('tcl/encoding/cp932.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
'DATA'),
('tk/images/pwrdLogo100.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
'DATA'),
('tk/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
('tcl/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
('tcl/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
('tcl/encoding/iso8859-16.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
'DATA'),
('tcl/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
('tcl/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
('tk/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
('tcl/http1.0/pkgIndex.tcl',
'/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
'DATA'),
('tk/ttk/panedwindow.tcl',
'/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
'DATA'),
('tk/images/logo64.gif', '/usr/share/tcltk/tk8.6/images/logo64.gif', 'DATA'),
('tk/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
('tcl/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
('tcl/encoding/macTurkish.enc',
'/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
'DATA'),
('tcl/encoding/macIceland.enc',
'/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
'DATA'),
('tcl/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
('tk/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
('tcl/msgs/es_pr.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pr.msg', 'DATA'),
('tcl/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
('tk/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
('tcl/encoding/cp1251.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
'DATA'),
('tcl/msgs/zh_tw.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg', 'DATA'),
('tcl/encoding/cp1257.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
'DATA'),
('tcl/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
('tk/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
('tcl/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
('tcl/msgs/te_in.msg', '/usr/share/tcltk/tcl8.6/msgs/te_in.msg', 'DATA'),
('tcl/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
('tcl/encoding/shiftjis.enc',
'/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
'DATA'),
('tcl/msgs/fr_ch.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg', 'DATA'),
('tk/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
('tcl/encoding/cp855.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
'DATA'),
('tcl/msgs/es_pa.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pa.msg', 'DATA'),
('tcl/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
('tcl/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
('tcl/tcl8/msgcat-1.6.1.tm',
'/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
'DATA'),
('tcl/opt0.4/optparse.tcl',
'/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
'DATA'),
('tk/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
('tcl/encoding/cp863.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
'DATA'),
('tcl/encoding/macThai.enc',
'/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
'DATA')],
False,
False,
True)

View File

@ -1,184 +0,0 @@
('/root/Downloads/FLO-appStore-master/apps/FloRate/build/rating-client/out00-PYZ.pyz',
[('posixpath', '/usr/lib/python3.6/posixpath.py', 'PYMODULE'),
('_strptime', '/usr/lib/python3.6/_strptime.py', 'PYMODULE'),
('datetime', '/usr/lib/python3.6/datetime.py', 'PYMODULE'),
('stringprep', '/usr/lib/python3.6/stringprep.py', 'PYMODULE'),
('fnmatch', '/usr/lib/python3.6/fnmatch.py', 'PYMODULE'),
('struct', '/usr/lib/python3.6/struct.py', 'PYMODULE'),
('_compat_pickle', '/usr/lib/python3.6/_compat_pickle.py', 'PYMODULE'),
('__future__', '/usr/lib/python3.6/__future__.py', 'PYMODULE'),
('difflib', '/usr/lib/python3.6/difflib.py', 'PYMODULE'),
('ast', '/usr/lib/python3.6/ast.py', 'PYMODULE'),
('inspect', '/usr/lib/python3.6/inspect.py', 'PYMODULE'),
('cmd', '/usr/lib/python3.6/cmd.py', 'PYMODULE'),
('bdb', '/usr/lib/python3.6/bdb.py', 'PYMODULE'),
('opcode', '/usr/lib/python3.6/opcode.py', 'PYMODULE'),
('dis', '/usr/lib/python3.6/dis.py', 'PYMODULE'),
('codeop', '/usr/lib/python3.6/codeop.py', 'PYMODULE'),
('code', '/usr/lib/python3.6/code.py', 'PYMODULE'),
('glob', '/usr/lib/python3.6/glob.py', 'PYMODULE'),
('shlex', '/usr/lib/python3.6/shlex.py', 'PYMODULE'),
('importlib._bootstrap',
'/usr/lib/python3.6/importlib/_bootstrap.py',
'PYMODULE'),
('importlib._bootstrap_external',
'/usr/lib/python3.6/importlib/_bootstrap_external.py',
'PYMODULE'),
('importlib.machinery',
'/usr/lib/python3.6/importlib/machinery.py',
'PYMODULE'),
('importlib.util', '/usr/lib/python3.6/importlib/util.py', 'PYMODULE'),
('importlib.abc', '/usr/lib/python3.6/importlib/abc.py', 'PYMODULE'),
('importlib', '/usr/lib/python3.6/importlib/__init__.py', 'PYMODULE'),
('pkgutil', '/usr/lib/python3.6/pkgutil.py', 'PYMODULE'),
('xml', '/usr/lib/python3.6/xml/__init__.py', 'PYMODULE'),
('xml.sax.expatreader',
'/usr/lib/python3.6/xml/sax/expatreader.py',
'PYMODULE'),
('xml.sax.saxutils', '/usr/lib/python3.6/xml/sax/saxutils.py', 'PYMODULE'),
('urllib.request', '/usr/lib/python3.6/urllib/request.py', 'PYMODULE'),
('getpass', '/usr/lib/python3.6/getpass.py', 'PYMODULE'),
('nturl2path', '/usr/lib/python3.6/nturl2path.py', 'PYMODULE'),
('ftplib', '/usr/lib/python3.6/ftplib.py', 'PYMODULE'),
('netrc', '/usr/lib/python3.6/netrc.py', 'PYMODULE'),
('http.cookiejar', '/usr/lib/python3.6/http/cookiejar.py', 'PYMODULE'),
('urllib.response', '/usr/lib/python3.6/urllib/response.py', 'PYMODULE'),
('urllib.error', '/usr/lib/python3.6/urllib/error.py', 'PYMODULE'),
('xml.sax', '/usr/lib/python3.6/xml/sax/__init__.py', 'PYMODULE'),
('xml.sax.handler', '/usr/lib/python3.6/xml/sax/handler.py', 'PYMODULE'),
('xml.sax._exceptions',
'/usr/lib/python3.6/xml/sax/_exceptions.py',
'PYMODULE'),
('xml.sax.xmlreader', '/usr/lib/python3.6/xml/sax/xmlreader.py', 'PYMODULE'),
('xml.parsers', '/usr/lib/python3.6/xml/parsers/__init__.py', 'PYMODULE'),
('xml.parsers.expat', '/usr/lib/python3.6/xml/parsers/expat.py', 'PYMODULE'),
('plistlib', '/usr/lib/python3.6/plistlib.py', 'PYMODULE'),
('platform', '/usr/lib/python3.6/platform.py', 'PYMODULE'),
('token', '/usr/lib/python3.6/token.py', 'PYMODULE'),
('tokenize', '/usr/lib/python3.6/tokenize.py', 'PYMODULE'),
('urllib.parse', '/usr/lib/python3.6/urllib/parse.py', 'PYMODULE'),
('tempfile', '/usr/lib/python3.6/tempfile.py', 'PYMODULE'),
('tty', '/usr/lib/python3.6/tty.py', 'PYMODULE'),
('pydoc_data', '/usr/lib/python3.6/pydoc_data/__init__.py', 'PYMODULE'),
('pydoc_data.topics', '/usr/lib/python3.6/pydoc_data/topics.py', 'PYMODULE'),
('html.entities', '/usr/lib/python3.6/html/entities.py', 'PYMODULE'),
('html', '/usr/lib/python3.6/html/__init__.py', 'PYMODULE'),
('ipaddress', '/usr/lib/python3.6/ipaddress.py', 'PYMODULE'),
('ssl', '/usr/lib/python3.6/ssl.py', 'PYMODULE'),
('http.client', '/usr/lib/python3.6/http/client.py', 'PYMODULE'),
('mimetypes', '/usr/lib/python3.6/mimetypes.py', 'PYMODULE'),
('socketserver', '/usr/lib/python3.6/socketserver.py', 'PYMODULE'),
('http', '/usr/lib/python3.6/http/__init__.py', 'PYMODULE'),
('http.server', '/usr/lib/python3.6/http/server.py', 'PYMODULE'),
('optparse', '/usr/lib/python3.6/optparse.py', 'PYMODULE'),
('uu', '/usr/lib/python3.6/uu.py', 'PYMODULE'),
('quopri', '/usr/lib/python3.6/quopri.py', 'PYMODULE'),
('email.feedparser', '/usr/lib/python3.6/email/feedparser.py', 'PYMODULE'),
('email.parser', '/usr/lib/python3.6/email/parser.py', 'PYMODULE'),
('email', '/usr/lib/python3.6/email/__init__.py', 'PYMODULE'),
('calendar', '/usr/lib/python3.6/calendar.py', 'PYMODULE'),
('email._parseaddr', '/usr/lib/python3.6/email/_parseaddr.py', 'PYMODULE'),
('email.utils', '/usr/lib/python3.6/email/utils.py', 'PYMODULE'),
('email.errors', '/usr/lib/python3.6/email/errors.py', 'PYMODULE'),
('email.header', '/usr/lib/python3.6/email/header.py', 'PYMODULE'),
('email._policybase', '/usr/lib/python3.6/email/_policybase.py', 'PYMODULE'),
('email.base64mime', '/usr/lib/python3.6/email/base64mime.py', 'PYMODULE'),
('email.encoders', '/usr/lib/python3.6/email/encoders.py', 'PYMODULE'),
('email.charset', '/usr/lib/python3.6/email/charset.py', 'PYMODULE'),
('base64', '/usr/lib/python3.6/base64.py', 'PYMODULE'),
('email._encoded_words',
'/usr/lib/python3.6/email/_encoded_words.py',
'PYMODULE'),
('hashlib', '/usr/lib/python3.6/hashlib.py', 'PYMODULE'),
('bisect', '/usr/lib/python3.6/bisect.py', 'PYMODULE'),
('random', '/usr/lib/python3.6/random.py', 'PYMODULE'),
('email.generator', '/usr/lib/python3.6/email/generator.py', 'PYMODULE'),
('email.iterators', '/usr/lib/python3.6/email/iterators.py', 'PYMODULE'),
('urllib', '/usr/lib/python3.6/urllib/__init__.py', 'PYMODULE'),
('email._header_value_parser',
'/usr/lib/python3.6/email/_header_value_parser.py',
'PYMODULE'),
('email.headerregistry',
'/usr/lib/python3.6/email/headerregistry.py',
'PYMODULE'),
('email.quoprimime', '/usr/lib/python3.6/email/quoprimime.py', 'PYMODULE'),
('email.contentmanager',
'/usr/lib/python3.6/email/contentmanager.py',
'PYMODULE'),
('email.policy', '/usr/lib/python3.6/email/policy.py', 'PYMODULE'),
('email.message', '/usr/lib/python3.6/email/message.py', 'PYMODULE'),
('bz2', '/usr/lib/python3.6/bz2.py', 'PYMODULE'),
('lzma', '/usr/lib/python3.6/lzma.py', 'PYMODULE'),
('_compression', '/usr/lib/python3.6/_compression.py', 'PYMODULE'),
('gzip', '/usr/lib/python3.6/gzip.py', 'PYMODULE'),
('tarfile', '/usr/lib/python3.6/tarfile.py', 'PYMODULE'),
('py_compile', '/usr/lib/python3.6/py_compile.py', 'PYMODULE'),
('zipfile', '/usr/lib/python3.6/zipfile.py', 'PYMODULE'),
('shutil', '/usr/lib/python3.6/shutil.py', 'PYMODULE'),
('socket', '/usr/lib/python3.6/socket.py', 'PYMODULE'),
('webbrowser', '/usr/lib/python3.6/webbrowser.py', 'PYMODULE'),
('pydoc', '/usr/lib/python3.6/pydoc.py', 'PYMODULE'),
('getopt', '/usr/lib/python3.6/getopt.py', 'PYMODULE'),
('pdb', '/usr/lib/python3.6/pdb.py', 'PYMODULE'),
('unittest.util', '/usr/lib/python3.6/unittest/util.py', 'PYMODULE'),
('unittest.result', '/usr/lib/python3.6/unittest/result.py', 'PYMODULE'),
('logging', '/usr/lib/python3.6/logging/__init__.py', 'PYMODULE'),
('unittest.case', '/usr/lib/python3.6/unittest/case.py', 'PYMODULE'),
('unittest.suite', '/usr/lib/python3.6/unittest/suite.py', 'PYMODULE'),
('unittest.loader', '/usr/lib/python3.6/unittest/loader.py', 'PYMODULE'),
('unittest.runner', '/usr/lib/python3.6/unittest/runner.py', 'PYMODULE'),
('unittest.main', '/usr/lib/python3.6/unittest/main.py', 'PYMODULE'),
('unittest.signals', '/usr/lib/python3.6/unittest/signals.py', 'PYMODULE'),
('unittest', '/usr/lib/python3.6/unittest/__init__.py', 'PYMODULE'),
('doctest', '/usr/lib/python3.6/doctest.py', 'PYMODULE'),
('stat', '/usr/lib/python3.6/stat.py', 'PYMODULE'),
('genericpath', '/usr/lib/python3.6/genericpath.py', 'PYMODULE'),
('string', '/usr/lib/python3.6/string.py', 'PYMODULE'),
('ntpath', '/usr/lib/python3.6/ntpath.py', 'PYMODULE'),
('enum', '/usr/lib/python3.6/enum.py', 'PYMODULE'),
('signal', '/usr/lib/python3.6/signal.py', 'PYMODULE'),
('contextlib', '/usr/lib/python3.6/contextlib.py', 'PYMODULE'),
('_threading_local', '/usr/lib/python3.6/_threading_local.py', 'PYMODULE'),
('threading', '/usr/lib/python3.6/threading.py', 'PYMODULE'),
('selectors', '/usr/lib/python3.6/selectors.py', 'PYMODULE'),
('dummy_threading', '/usr/lib/python3.6/dummy_threading.py', 'PYMODULE'),
('subprocess', '/usr/lib/python3.6/subprocess.py', 'PYMODULE'),
('os', '/usr/lib/python3.6/os.py', 'PYMODULE'),
('textwrap', '/usr/lib/python3.6/textwrap.py', 'PYMODULE'),
('gettext', '/usr/lib/python3.6/gettext.py', 'PYMODULE'),
('argparse', '/usr/lib/python3.6/argparse.py', 'PYMODULE'),
('pprint', '/usr/lib/python3.6/pprint.py', 'PYMODULE'),
('pickle', '/usr/lib/python3.6/pickle.py', 'PYMODULE'),
('tracemalloc', '/usr/lib/python3.6/tracemalloc.py', 'PYMODULE'),
('warnings', '/usr/lib/python3.6/warnings.py', 'PYMODULE'),
('copy', '/usr/lib/python3.6/copy.py', 'PYMODULE'),
('_dummy_thread', '/usr/lib/python3.6/_dummy_thread.py', 'PYMODULE'),
('SF', '/root/Downloads/FLO-appStore-master/apps/FloRate/SF.py', 'PYMODULE'),
('tkinter.ttk', '/usr/lib/python3.6/tkinter/ttk.py', 'PYMODULE'),
('DataCenter',
'/root/Downloads/FLO-appStore-master/apps/FloRate/DataCenter/__init__.py',
'PYMODULE'),
('DataCenter.DataCenter',
'/root/Downloads/FLO-appStore-master/apps/FloRate/DataCenter/DataCenter.py',
'PYMODULE'),
('sqlite3', '/usr/lib/python3.6/sqlite3/__init__.py', 'PYMODULE'),
('sqlite3.dump', '/usr/lib/python3.6/sqlite3/dump.py', 'PYMODULE'),
('sqlite3.dbapi2', '/usr/lib/python3.6/sqlite3/dbapi2.py', 'PYMODULE'),
('Transaction',
'/root/Downloads/FLO-appStore-master/apps/FloRate/Transaction/__init__.py',
'PYMODULE'),
('Transaction.TM',
'/root/Downloads/FLO-appStore-master/apps/FloRate/Transaction/TM.py',
'PYMODULE'),
('json', '/usr/lib/python3.6/json/__init__.py', 'PYMODULE'),
('json.encoder', '/usr/lib/python3.6/json/encoder.py', 'PYMODULE'),
('json.decoder', '/usr/lib/python3.6/json/decoder.py', 'PYMODULE'),
('json.scanner', '/usr/lib/python3.6/json/scanner.py', 'PYMODULE'),
('tkinter.messagebox',
'/usr/lib/python3.6/tkinter/messagebox.py',
'PYMODULE'),
('tkinter.commondialog',
'/usr/lib/python3.6/tkinter/commondialog.py',
'PYMODULE'),
('tkinter', '/usr/lib/python3.6/tkinter/__init__.py', 'PYMODULE'),
('tkinter.constants', '/usr/lib/python3.6/tkinter/constants.py', 'PYMODULE')])

View File

@ -1,401 +0,0 @@
('/usr/share/tcltk/tcl8.6',
'tcl',
['demos', '*.lib', 'tclConfig.sh'],
'DATA',
[('tcl/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
('tcl/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
('tcl/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
('tcl/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
('tcl/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
('tcl/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
('tcl/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
('tcl/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
('tcl/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
('tcl/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
('tcl/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
('tcl/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
('tcl/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
('tcl/msgs/es_pe.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pe.msg', 'DATA'),
('tcl/msgs/ga_ie.msg', '/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg', 'DATA'),
('tcl/msgs/de_be.msg', '/usr/share/tcltk/tcl8.6/msgs/de_be.msg', 'DATA'),
('tcl/msgs/es_mx.msg', '/usr/share/tcltk/tcl8.6/msgs/es_mx.msg', 'DATA'),
('tcl/msgs/kw_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg', 'DATA'),
('tcl/msgs/en_za.msg', '/usr/share/tcltk/tcl8.6/msgs/en_za.msg', 'DATA'),
('tcl/msgs/ru_ua.msg', '/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg', 'DATA'),
('tcl/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
('tcl/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
('tcl/msgs/pt_br.msg', '/usr/share/tcltk/tcl8.6/msgs/pt_br.msg', 'DATA'),
('tcl/msgs/en_sg.msg', '/usr/share/tcltk/tcl8.6/msgs/en_sg.msg', 'DATA'),
('tcl/msgs/mr_in.msg', '/usr/share/tcltk/tcl8.6/msgs/mr_in.msg', 'DATA'),
('tcl/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
('tcl/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
('tcl/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
('tcl/msgs/fr_ca.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg', 'DATA'),
('tcl/msgs/zh_tw.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg', 'DATA'),
('tcl/msgs/es_cr.msg', '/usr/share/tcltk/tcl8.6/msgs/es_cr.msg', 'DATA'),
('tcl/msgs/en_hk.msg', '/usr/share/tcltk/tcl8.6/msgs/en_hk.msg', 'DATA'),
('tcl/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
('tcl/msgs/fr_be.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_be.msg', 'DATA'),
('tcl/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
('tcl/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
('tcl/msgs/es_ec.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ec.msg', 'DATA'),
('tcl/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
('tcl/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
('tcl/msgs/af_za.msg', '/usr/share/tcltk/tcl8.6/msgs/af_za.msg', 'DATA'),
('tcl/msgs/es_pa.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pa.msg', 'DATA'),
('tcl/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
('tcl/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
('tcl/msgs/es_ve.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ve.msg', 'DATA'),
('tcl/msgs/en_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/en_gb.msg', 'DATA'),
('tcl/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
('tcl/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
('tcl/msgs/en_in.msg', '/usr/share/tcltk/tcl8.6/msgs/en_in.msg', 'DATA'),
('tcl/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
('tcl/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
('tcl/msgs/ar_lb.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg', 'DATA'),
('tcl/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
('tcl/msgs/de_at.msg', '/usr/share/tcltk/tcl8.6/msgs/de_at.msg', 'DATA'),
('tcl/msgs/es_gt.msg', '/usr/share/tcltk/tcl8.6/msgs/es_gt.msg', 'DATA'),
('tcl/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
('tcl/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
('tcl/msgs/en_bw.msg', '/usr/share/tcltk/tcl8.6/msgs/en_bw.msg', 'DATA'),
('tcl/msgs/bn_in.msg', '/usr/share/tcltk/tcl8.6/msgs/bn_in.msg', 'DATA'),
('tcl/msgs/es_do.msg', '/usr/share/tcltk/tcl8.6/msgs/es_do.msg', 'DATA'),
('tcl/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
('tcl/msgs/ko_kr.msg', '/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg', 'DATA'),
('tcl/msgs/en_au.msg', '/usr/share/tcltk/tcl8.6/msgs/en_au.msg', 'DATA'),
('tcl/msgs/ar_jo.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg', 'DATA'),
('tcl/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
('tcl/msgs/id_id.msg', '/usr/share/tcltk/tcl8.6/msgs/id_id.msg', 'DATA'),
('tcl/msgs/es_cl.msg', '/usr/share/tcltk/tcl8.6/msgs/es_cl.msg', 'DATA'),
('tcl/msgs/es_sv.msg', '/usr/share/tcltk/tcl8.6/msgs/es_sv.msg', 'DATA'),
('tcl/msgs/es_pr.msg', '/usr/share/tcltk/tcl8.6/msgs/es_pr.msg', 'DATA'),
('tcl/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
('tcl/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
('tcl/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
('tcl/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
('tcl/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
('tcl/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
('tcl/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
('tcl/msgs/ar_in.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_in.msg', 'DATA'),
('tcl/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
('tcl/msgs/es_co.msg', '/usr/share/tcltk/tcl8.6/msgs/es_co.msg', 'DATA'),
('tcl/msgs/zh_sg.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg', 'DATA'),
('tcl/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
('tcl/msgs/hi_in.msg', '/usr/share/tcltk/tcl8.6/msgs/hi_in.msg', 'DATA'),
('tcl/msgs/en_ie.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ie.msg', 'DATA'),
('tcl/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
('tcl/msgs/ar_sy.msg', '/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg', 'DATA'),
('tcl/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
('tcl/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
('tcl/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
('tcl/msgs/fo_fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg', 'DATA'),
('tcl/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
('tcl/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
('tcl/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
('tcl/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
('tcl/msgs/kl_gl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg', 'DATA'),
('tcl/msgs/es_ni.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ni.msg', 'DATA'),
('tcl/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
('tcl/msgs/en_be.msg', '/usr/share/tcltk/tcl8.6/msgs/en_be.msg', 'DATA'),
('tcl/msgs/fa_ir.msg', '/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg', 'DATA'),
('tcl/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
('tcl/msgs/en_ph.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ph.msg', 'DATA'),
('tcl/msgs/ta_in.msg', '/usr/share/tcltk/tcl8.6/msgs/ta_in.msg', 'DATA'),
('tcl/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
('tcl/msgs/es_ar.msg', '/usr/share/tcltk/tcl8.6/msgs/es_ar.msg', 'DATA'),
('tcl/msgs/ms_my.msg', '/usr/share/tcltk/tcl8.6/msgs/ms_my.msg', 'DATA'),
('tcl/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
('tcl/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
('tcl/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
('tcl/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
('tcl/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
('tcl/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
('tcl/msgs/fa_in.msg', '/usr/share/tcltk/tcl8.6/msgs/fa_in.msg', 'DATA'),
('tcl/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
('tcl/msgs/zh_hk.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg', 'DATA'),
('tcl/msgs/eu_es.msg', '/usr/share/tcltk/tcl8.6/msgs/eu_es.msg', 'DATA'),
('tcl/msgs/es_py.msg', '/usr/share/tcltk/tcl8.6/msgs/es_py.msg', 'DATA'),
('tcl/msgs/es_uy.msg', '/usr/share/tcltk/tcl8.6/msgs/es_uy.msg', 'DATA'),
('tcl/msgs/es_bo.msg', '/usr/share/tcltk/tcl8.6/msgs/es_bo.msg', 'DATA'),
('tcl/msgs/kok_in.msg', '/usr/share/tcltk/tcl8.6/msgs/kok_in.msg', 'DATA'),
('tcl/msgs/te_in.msg', '/usr/share/tcltk/tcl8.6/msgs/te_in.msg', 'DATA'),
('tcl/msgs/it_ch.msg', '/usr/share/tcltk/tcl8.6/msgs/it_ch.msg', 'DATA'),
('tcl/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
('tcl/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
('tcl/msgs/fr_ch.msg', '/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg', 'DATA'),
('tcl/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
('tcl/msgs/gv_gb.msg', '/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg', 'DATA'),
('tcl/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
('tcl/msgs/gl_es.msg', '/usr/share/tcltk/tcl8.6/msgs/gl_es.msg', 'DATA'),
('tcl/msgs/en_nz.msg', '/usr/share/tcltk/tcl8.6/msgs/en_nz.msg', 'DATA'),
('tcl/msgs/zh_cn.msg', '/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg', 'DATA'),
('tcl/msgs/es_hn.msg', '/usr/share/tcltk/tcl8.6/msgs/es_hn.msg', 'DATA'),
('tcl/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
('tcl/msgs/en_ca.msg', '/usr/share/tcltk/tcl8.6/msgs/en_ca.msg', 'DATA'),
('tcl/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
('tcl/msgs/en_zw.msg', '/usr/share/tcltk/tcl8.6/msgs/en_zw.msg', 'DATA'),
('tcl/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
('tcl/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
('tcl/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
('tcl/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
('tcl/msgs/nl_be.msg', '/usr/share/tcltk/tcl8.6/msgs/nl_be.msg', 'DATA'),
('tcl/http1.0/http.tcl', '/usr/share/tcltk/tcl8.6/http1.0/http.tcl', 'DATA'),
('tcl/http1.0/pkgIndex.tcl',
'/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
'DATA'),
('tcl/encoding/cp1257.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
'DATA'),
('tcl/encoding/gb1988.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
'DATA'),
('tcl/encoding/euc-kr.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
'DATA'),
('tcl/encoding/cp852.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
'DATA'),
('tcl/encoding/macUkraine.enc',
'/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
'DATA'),
('tcl/encoding/cp874.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
'DATA'),
('tcl/encoding/cp869.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
'DATA'),
('tcl/encoding/euc-cn.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
'DATA'),
('tcl/encoding/iso2022.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
'DATA'),
('tcl/encoding/macCentEuro.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
'DATA'),
('tcl/encoding/iso8859-3.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
'DATA'),
('tcl/encoding/gb2312.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
'DATA'),
('tcl/encoding/big5.enc',
'/usr/share/tcltk/tcl8.6/encoding/big5.enc',
'DATA'),
('tcl/encoding/macIceland.enc',
'/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
'DATA'),
('tcl/encoding/cp1255.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
'DATA'),
('tcl/encoding/macGreek.enc',
'/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
'DATA'),
('tcl/encoding/cp850.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
'DATA'),
('tcl/encoding/cp437.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
'DATA'),
('tcl/encoding/iso8859-8.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
'DATA'),
('tcl/encoding/cp1252.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
'DATA'),
('tcl/encoding/cp950.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
'DATA'),
('tcl/encoding/ebcdic.enc',
'/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
'DATA'),
('tcl/encoding/iso2022-jp.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
'DATA'),
('tcl/encoding/gb2312-raw.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
'DATA'),
('tcl/encoding/iso8859-13.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
'DATA'),
('tcl/encoding/tis-620.enc',
'/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
'DATA'),
('tcl/encoding/macThai.enc',
'/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
'DATA'),
('tcl/encoding/cp949.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
'DATA'),
('tcl/encoding/euc-jp.enc',
'/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
'DATA'),
('tcl/encoding/macRomania.enc',
'/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
'DATA'),
('tcl/encoding/iso8859-15.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
'DATA'),
('tcl/encoding/cp860.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
'DATA'),
('tcl/encoding/cp863.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
'DATA'),
('tcl/encoding/ksc5601.enc',
'/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
'DATA'),
('tcl/encoding/jis0208.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
'DATA'),
('tcl/encoding/iso8859-7.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
'DATA'),
('tcl/encoding/macRoman.enc',
'/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
'DATA'),
('tcl/encoding/iso2022-kr.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
'DATA'),
('tcl/encoding/iso8859-5.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
'DATA'),
('tcl/encoding/cp737.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
'DATA'),
('tcl/encoding/iso8859-9.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
'DATA'),
('tcl/encoding/gb12345.enc',
'/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
'DATA'),
('tcl/encoding/cp855.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
'DATA'),
('tcl/encoding/cp861.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
'DATA'),
('tcl/encoding/cp865.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
'DATA'),
('tcl/encoding/koi8-u.enc',
'/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
'DATA'),
('tcl/encoding/macCroatian.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
'DATA'),
('tcl/encoding/macDingbats.enc',
'/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
'DATA'),
('tcl/encoding/iso8859-4.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
'DATA'),
('tcl/encoding/cp932.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
'DATA'),
('tcl/encoding/macCyrillic.enc',
'/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
'DATA'),
('tcl/encoding/macTurkish.enc',
'/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
'DATA'),
('tcl/encoding/cp1251.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
'DATA'),
('tcl/encoding/cp1258.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
'DATA'),
('tcl/encoding/iso8859-1.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
'DATA'),
('tcl/encoding/cp862.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
'DATA'),
('tcl/encoding/jis0212.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
'DATA'),
('tcl/encoding/cp1253.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
'DATA'),
('tcl/encoding/jis0201.enc',
'/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
'DATA'),
('tcl/encoding/iso8859-6.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
'DATA'),
('tcl/encoding/cp864.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
'DATA'),
('tcl/encoding/cp1256.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
'DATA'),
('tcl/encoding/cp866.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
'DATA'),
('tcl/encoding/dingbats.enc',
'/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
'DATA'),
('tcl/encoding/cp857.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
'DATA'),
('tcl/encoding/cp936.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
'DATA'),
('tcl/encoding/iso8859-2.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
'DATA'),
('tcl/encoding/cp1254.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
'DATA'),
('tcl/encoding/ascii.enc',
'/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
'DATA'),
('tcl/encoding/cp1250.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
'DATA'),
('tcl/encoding/iso8859-14.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
'DATA'),
('tcl/encoding/iso8859-16.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
'DATA'),
('tcl/encoding/shiftjis.enc',
'/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
'DATA'),
('tcl/encoding/iso8859-10.enc',
'/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
'DATA'),
('tcl/encoding/koi8-r.enc',
'/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
'DATA'),
('tcl/encoding/symbol.enc',
'/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
'DATA'),
('tcl/encoding/cp775.enc',
'/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
'DATA'),
('tcl/encoding/macJapan.enc',
'/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
'DATA'),
('tcl/opt0.4/optparse.tcl',
'/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
'DATA'),
('tcl/opt0.4/pkgIndex.tcl',
'/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
'DATA'),
('tcl/tcl8/http-2.8.12.tm',
'/usr/share/tcltk/tcl8.6/tcl8/http-2.8.12.tm',
'DATA'),
('tcl/tcl8/msgcat-1.6.1.tm',
'/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
'DATA'),
('tcl/tcl8/tcltest-2.4.1.tm',
'/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.4.1.tm',
'DATA'),
('tcl/tcl8/platform-1.0.14.tm',
'/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.14.tm',
'DATA'),
('tcl/tcl8/platform/shell-1.1.4.tm',
'/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
'DATA')])

View File

@ -1,116 +0,0 @@
('/usr/share/tcltk/tk8.6',
'tk',
['demos', '*.lib', 'tkConfig.sh'],
'DATA',
[('tk/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
('tk/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
('tk/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
('tk/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
('tk/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
('tk/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
('tk/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
('tk/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
('tk/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
('tk/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
('tk/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
('tk/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
('tk/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
('tk/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
('tk/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
('tk/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
('tk/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
('tk/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
('tk/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
('tk/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
('tk/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
('tk/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
('tk/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
('tk/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
('tk/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
('tk/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
('tk/panedwindow.tcl', '/usr/share/tcltk/tk8.6/panedwindow.tcl', 'DATA'),
('tk/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
('tk/fontchooser.tcl', '/usr/share/tcltk/tk8.6/fontchooser.tcl', 'DATA'),
('tk/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
('tk/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
('tk/unsupported.tcl', '/usr/share/tcltk/tk8.6/unsupported.tcl', 'DATA'),
('tk/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
('tk/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
('tk/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
('tk/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
('tk/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
('tk/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
('tk/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
('tk/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
('tk/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
('tk/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
('tk/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
('tk/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
('tk/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
('tk/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
('tk/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
('tk/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
('tk/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
('tk/images/pwrdLogo75.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
'DATA'),
('tk/images/tai-ku.gif', '/usr/share/tcltk/tk8.6/images/tai-ku.gif', 'DATA'),
('tk/images/logo.eps', '/usr/share/tcltk/tk8.6/images/logo.eps', 'DATA'),
('tk/images/logo100.gif',
'/usr/share/tcltk/tk8.6/images/logo100.gif',
'DATA'),
('tk/images/logoLarge.gif',
'/usr/share/tcltk/tk8.6/images/logoLarge.gif',
'DATA'),
('tk/images/pwrdLogo175.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
'DATA'),
('tk/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
('tk/images/pwrdLogo100.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
'DATA'),
('tk/images/logo64.gif', '/usr/share/tcltk/tk8.6/images/logo64.gif', 'DATA'),
('tk/images/pwrdLogo150.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
'DATA'),
('tk/images/pwrdLogo.eps',
'/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
'DATA'),
('tk/images/pwrdLogo200.gif',
'/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
'DATA'),
('tk/images/logoMed.gif',
'/usr/share/tcltk/tk8.6/images/logoMed.gif',
'DATA'),
('tk/ttk/clamTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl', 'DATA'),
('tk/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
('tk/ttk/cursors.tcl', '/usr/share/tcltk/tk8.6/ttk/cursors.tcl', 'DATA'),
('tk/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
('tk/ttk/winTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/winTheme.tcl', 'DATA'),
('tk/ttk/sizegrip.tcl', '/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl', 'DATA'),
('tk/ttk/notebook.tcl', '/usr/share/tcltk/tk8.6/ttk/notebook.tcl', 'DATA'),
('tk/ttk/vistaTheme.tcl',
'/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
'DATA'),
('tk/ttk/classicTheme.tcl',
'/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
'DATA'),
('tk/ttk/defaults.tcl', '/usr/share/tcltk/tk8.6/ttk/defaults.tcl', 'DATA'),
('tk/ttk/menubutton.tcl',
'/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
'DATA'),
('tk/ttk/altTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/altTheme.tcl', 'DATA'),
('tk/ttk/progress.tcl', '/usr/share/tcltk/tk8.6/ttk/progress.tcl', 'DATA'),
('tk/ttk/aquaTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl', 'DATA'),
('tk/ttk/xpTheme.tcl', '/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl', 'DATA'),
('tk/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
('tk/ttk/treeview.tcl', '/usr/share/tcltk/tk8.6/ttk/treeview.tcl', 'DATA'),
('tk/ttk/spinbox.tcl', '/usr/share/tcltk/tk8.6/ttk/spinbox.tcl', 'DATA'),
('tk/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
('tk/ttk/panedwindow.tcl',
'/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
'DATA'),
('tk/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
('tk/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
('tk/ttk/scrollbar.tcl', '/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl', 'DATA'),
('tk/ttk/combobox.tcl', '/usr/share/tcltk/tk8.6/ttk/combobox.tcl', 'DATA')])

View File

@ -1,14 +0,0 @@
missing module named 'org.python' - imported by pickle, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py, xml.sax
excluded module named _frozen_importlib - imported by importlib, importlib.abc, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py
missing module named _frozen_importlib_external - imported by importlib._bootstrap, importlib, importlib.abc, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py
missing module named _winreg - imported by platform, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py
missing module named _scproxy - imported by urllib.request
missing module named java - imported by platform, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py
missing module named 'java.lang' - imported by platform, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py, xml.sax._exceptions
missing module named vms_lib - imported by platform, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py
missing module named winreg - imported by platform, mimetypes, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py, urllib.request
missing module named nt - imported by shutil, os, ntpath, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py
missing module named msvcrt - imported by subprocess, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py, getpass
missing module named _winapi - imported by subprocess, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py
missing module named _dummy_threading - imported by dummy_threading, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py
missing module named org - imported by copy, /root/Downloads/FLO-appStore-master/apps/FloRate/rating-client.py

File diff suppressed because it is too large Load Diff

View File

@ -1,399 +0,0 @@
from tkinter import Tk,END,Button,Label,Frame,Entry,messagebox,Message,Text,NSEW,Scrollbar,Listbox,MULTIPLE ,PhotoImage,VERTICAL
#import CryptTools
import Transaction
import DataCenter
from SF import VerticalScrolledFrame
class Application:
"""The main application GUI Window."""
def __init__(self,master=None):
self.master = master
self.Frame = Frame(self.master)
self.LEVEL ={
1: 'unsatisfactory',
2: 'satisfactory',
3: 'meet expectations',
4: 'Exceed expectations',
5: 'Exceptional'
}
def main(self):
"""
Method name: main.
Method use: The program starts the main GUI of the Rating System.
"""
try:
self.IS.destroy()
except:
pass
try:
self.EM.destroy()
except:
pass
self.MF = Frame(self.master)
self.MF.pack()
WelcomeLabel = Label(self.MF,text="Choose who you are ?",font=("Arial", 20))
WelcomeLabel.grid(column = 1, columnspan =2)
label =Label(self.MF,text=" ")
label.grid(row = 2, columnspan =2)
ISButton = Button(self.MF,text="Intern",command=self.internWindow)
ISButton.grid(row =3,column=1)
EMButton = Button(self.MF,text="Employee",command=self.employeeWindow)
EMButton.grid(row =3, column=2)
contentText = "\n\nWhat is this?\nThis app lets us to rate Interns through the FLO blockchain .\n\nThis is a zero knowledge application.\n\nHow to work ?\n\n Choose if you are an Intern or Employeer\n\n"+"An Intern's work would be to enter the Transaction id in the given field and get rating\n\nAn Empolyee must enter the transaction address and write all the intern data to it "
Context = Message(self.MF, text = contentText)
Context.grid(column = 1, columnspan =2)
#Intern Section Starts
def internWindow(self):
"""
Method Name: internWindow.
Method use: Provides a GUI for the Intern Application.
"""
self.MF.destroy()
self.IS = Frame(self.master)
self.IS.pack()
self.tranLBL = Label(self.IS,text="Enter Trasaction id: ")
self.tranLBL.grid(row=0,column=0,sticky=NSEW,padx=8,pady=8)
self.TXE = Entry(self.IS)
self.TXE.grid(row=0,column=1,sticky=NSEW,padx=16,pady=8)
self.Sub = Button(self.IS,text="Fetch Rating",command=self.ratingResults)
self.Sub.grid(row=1,columnspan=2,pady=16,padx=16,sticky=NSEW)
self.LBL = Label(self.IS,text="Make a search and results will be displayed here:")
self.LBL.grid(row=2,columnspan=2)
self.Text = Text(self.IS,height=30,width=40,state='disabled')
self.TextScroll = Scrollbar(self.Text,orient=VERTICAL)
self.Text.config(yscrollcommand=self.TextScroll.set)
self.TextScroll.config(command=self.Text.yview)
self.Text.grid(row=3,columnspan=2,padx=16,pady=16)
self.BackButton = Button(self.IS,text="Back",command=self.main)
self.BackButton.grid(row=4,column=0)
self.QUIT = Button(self.IS,command=self.master.destroy,text="QUIT")
self.QUIT.grid(row=4,column=1)
def ratingResults(self):
"""
Method name: ratingResults.
Method use: Driver for Intern Window GUI.
"""
self.txid = self.TXE.get()
self.TXE.configure(state="normal")
self.TXE.insert('end',"Attempting to connect to BlockChain Address")
self.TXE.configure(state="disabled")
self.Text.configure(state="normal")
self.Text.insert('end',"Trying to read Data from Block Chain")
self.Text.configure(state="disabled")
try:
if len(self.txid)==0:
messagebox.showwarning('Txid Error',"Trasaction Id cannot be empty")
self.TXE.configure(state='normal')
self.TXE.delete(0,'end')
self.Text.configure(state='normal')
self.Text.delete(1.0,'end')
self.Text.configure(state='disabled')
return
recv = Transaction.readDatafromBlockchain(self.txid)
except:
messagebox.showwarning("NetworkError","Make Sure FLO-Core is running")
self.TXE.configure(state='normal')
self.TXE.delete(0,'end')
self.Text.configure(state='normal')
self.Text.delete(1.0,'end')
self.Text.configure(state='disabled')
pt = bytes.fromhex(recv).decode()
lines = pt.split('\n')
self.Text.configure(state="normal")
self.Text.delete(1.0,'end')
for line in lines:
if line:
num = line.split()[1]
num = int(float(num))+1
self.Text.insert('1.0',line+" "+self.LEVEL[num]+"\n")
self.Text.configure(state='disabled')
#Intern Section Ends Here
#Employee Section Starts Here
def employeeWindow(self,text=None):
"""
Method name: employeeWindow.
Method use: Provide a GUI for employee Window.
Positional Arguments:
Arguement Name: text.
Argument Use: To provide the neccessary details to the GUI about rating data
retrieved from the finalizeRatings method.
"""
try:
self.MF.destroy()
self.RW.destroy()
except:
pass
self.EM = Frame(self.master)
self.EM.pack()
self.IDLBL = Label(self.EM,text="Enter the Adress: ")
self.IDLBL.grid(row=0,column=0,sticky=NSEW,padx=8,pady=8)
self.TRE = Entry(self.EM)
self.TRE.grid(row=0,column=1,sticky=NSEW,padx=16,pady=8)
self.pButton = Button(self.EM,text="Create New Ratings",command=self.createRatings)
self.pButton.grid(row=2,column=0,pady=16,padx=16)
self.Sub = Button(self.EM,text="Post Rating",command=self.postResults)
self.Sub.grid(row=2,column=1,pady=16,padx=16,sticky=NSEW)
self.LBL = Label(self.EM,text="The rating Data is Here:")
self.LBL.grid(row=3,columnspan=2)
self.Text = Text(self.EM,height=20,width=30)
if text:
self.Text.insert('1.0',text)
self.Text.grid(row=4,columnspan=2,padx=16,pady=16)
self.BackButton = Button(self.EM,text="Back",command=self.main)
self.BackButton.grid(row=5,column=0)
self.QUIT = Button(self.EM,command=self.master.destroy,text="QUIT")
self.QUIT.grid(row=5,column=1)
def createRatings(self):
"""
Method name: createRaNSEWtings.
Method use: Provides a GUI for the Intern Rating.
"""
try:
self.EM.destroy()
except:
pass
DataCenter.checkState()
self.RW = Frame(self.master)
self.RW.pack()
self.IDLB = Listbox(self.RW,width=50,height=20,selectmode=MULTIPLE)
self.scrollbar = Scrollbar(self.IDLB, orient=VERTICAL)
self.IDLB.config(yscrollcommand=self.scrollbar.set)
self.scrollbar.config(command=self.IDLB.yview)
self.populateListBox()
self.IDLB.grid(row=0,column=1,padx=16,pady=16,sticky=NSEW)
self.loadImg = PhotoImage(file="AddBtn.gif")
self.remImg = PhotoImage(file="RenmBtn.gif")
self.removeIntern = Button(self.RW,height=48,width=48,image=self.remImg,command=self.removeData)
self.removeIntern.grid(row=0,column=2,padx=8,pady=8)
self.addIntern = Button(self.RW,text="",height=48,width=48,image=self.loadImg,command = self.loadData)
self.addIntern.grid(row=0,column=3,padx=8,pady=8)
self.RL = Listbox(self.RW,width=50,height=20,selectmode=MULTIPLE)
for usr,rat in DataCenter.retrieveRating():
self.RL.insert(END,usr + " "+str(rat))
try:
self.RAT.destroy()
except:
pass
self.RLscroll = Scrollbar(self.RL, orient=VERTICAL)
self.RL.config(yscrollcommand=self.RLscroll.set)
self.RLscroll.config(command=self.RL.yview)
self.RL.grid(row=0,column=4,padx=16,pady=16)
self.createIntern = Button(self.RW,text="Add a new Intern",command = self.newIntern)
self.createIntern.grid(row=2,column=1,padx=8,pady=4)
self.DeleteIntern = Button(self.RW,text="Remove an Existing Intern",command=self.removeExistingIntern)
self.DeleteIntern.grid(row=3,column=1,padx=8,pady=4)
self.finalBtn = Button(self.RW,text="Finalize",command = self.finalizeRatings)
self.finalBtn.grid(row=3,column=4)
def newIntern(self):
"""
Method name: newIntern.
Method use: GUI for the creation of new Intern
"""
self.RW.destroy()
self.NE = Frame(self.master)
self.NE.pack()
self.newLBL = Label(self.NE,text="Enter the name: ")
self.newLBL.grid(row=0,column=0,padx=8,pady=8)
self.newNMEntry = Entry(self.NE)
self.newNMEntry.grid(row=0,column=1,padx=8,pady=8)
self.newUser = Label(self.NE,text="Enter the username: ")
self.newUser.grid(row=1,column=0,padx=8,pady=8)
self.newUNMEntry = Entry(self.NE)
self.newUNMEntry.grid(row=1,column=1,padx=8,pady=8)
self.AddBtn = Button(self.NE,text="Add Intern",command = self.CIB)
self.AddBtn.grid(row=2,padx=8,pady=8)
def finalizeRatings(self):
"""
Method Name: finalizeRatings.
Method Use: Format the rating data into desirable format and return back to the
Employee Window.
"""
Rating_Str = ""
for usr,rat in DataCenter.retrieveRating():
Rating_Str += usr+" "+str(rat)+"\n"
if not messagebox.askyesno("Revive Data","Should you want the rating data to be kept"):
DataCenter.clearRatings()
self.RW.destroy()
self.employeeWindow(text = Rating_Str)
def CIB(self):
"""
Method name: CIB.
Method Use: Driver Code to add a new Intern to the DataBase.
"""
if len(self.newNMEntry.get())<=3 or len(self.newUNMEntry.get())<=3:
messagebox.showwarning("Invalid Length","The Intern Fields are either empty or under 3 charecters")
return
else:
try:
DataCenter.write(self.newNMEntry.get(),self.newUNMEntry.get())
except:
messagebox.showwarning("Invalid Data","Please Check again")
return
messagebox.showinfo("Success","New Intern Sucessfully added")
self.NE.destroy()
self.createRatings()
def loadData(self,process=None):
"""
Method name: loadData.
Method use: GUI to take the Input from the user and load the data to the Rating Data Base.
"""
self.ratList = []
self.TMPEN=[]
if process:
for name,rating in process:
DataCenter.insertRating(name,rating.get())
self.createRatings()
return
if not self.IDLB.curselection():
messagebox.showinfo("Empty Selection","Please make sure to select at least one intern")
return
for i in self.IDLB.curselection():
self.ratList.append(self.IDLB.get(i).split(' ')[2])
self.RW.destroy()
self.RAT = VerticalScrolledFrame(self.master)
self.RAT.pack()
self.LBL = Label(self.RAT.interior,text="Enter a Rating for the selected interns: ")
self.LBL.pack()
for item,row in zip(self.ratList,range(1,len(self.ratList)+1)):
self.LBx = Label(self.RAT.interior,text=item)
self.LBx.pack()
self.TMPEN.append(Entry(self.RAT.interior))
self.TMPEN[row-1].pack()
self.Sub = Button(self.RAT.interior,command=lambda :self.loadData(zip(self.ratList,self.TMPEN)),text="submit")
self.Sub.pack(pady=8)
def removeData(self):
"""
Method Name: removeData.
Method use: Driver code to remove an Intern's Rating from the DataBase.
"""
delList = []
for item in self.RL.curselection():
delList.append(self.RL.get(item))
self.RL.delete(item)
for item in delList:
DataCenter.removeRating(item.split(' ')[0])
def populateListBox(self):
"""
Method Name: populateListBox
Method use: To Format the rating Data and Fill it into the Intern's List
"""
try:
for data in enumerate(DataCenter.readAll(),1):
self.IDLB.insert(END,str(data[0])+" "+str(data[1][0])+" "+str(data[1][1]))
except:
return
def removeExistingIntern(self):
"""
Method Name: removeExistingIntern
Method use: To remove an Existing Intern from the DataBase
"""
delList = []
for i in self.IDLB.curselection():
delList.append(self.IDLB.get(i))
if messagebox.askyesno("Are you sure to delete ? (This can't be undone)","The following interns data is deleted:\n\n"+"\n".join(delList)):
for item in delList:
DataCenter.delete(item.split(' ')[2])
self.RW.destroy()
self.createRatings()
def postResults(self):
"""
Method Name: postResults
Method use: To post the results on to the Block Chain
"""
self.addr = self.TRE.get()
self.ratingData = self.Text.get('1.0', END)
try:
if len(self.addr)==0:
messagebox.showwarning('Adress Error',"Trasaction Address cannot be empty")
self.TRE.configure(state='normal')
self.TRE.delete(0,'end')
self.Text.delete(1.0,'end')
return
elif len(self.ratingData)==0:
messagebox.showwarning('Empty Ratings Error',"Ratings Field cannot be empty")
hexCoded = self.ratingData.encode()
hexCoded = hexCoded.hex()
send = Transaction.writeDatatoBlockchain(hexCoded,self.addr,0.003)
print(send)
messagebox.showinfo("Transaction Success","Share this id with your interns:\n"+send)
f = open("RatingData.txt","w")
f.write(send)
f.close()
except:
messagebox.showwarning("NetworkError","Make Sure FLO-Core is running")
self.TRE.configure(state='normal')
self.TRE.delete(0,'end')
self.Text.delete(1.0,'end')
root = Tk()
root.title("Flo Rating App")
app = Application(master=root)
app.main()
root.mainloop()
""""
key = CryptTools.keyGen()
ct = CryptTools.encryptMsg("HelloTarun",key)
send = ct.encode().hex()
#txid = Transaction.writeDatatoBlockchain(send,"oPXCQNVnzkLRgHqzhz6kWc8XyErSdVhAdn",0.0003)
#recv = Transaction.readDatafromBlockchain(txid)
ct = bytes.fromhex(recv).decode()
pt = CryptTools.decryptMsg(ct,key)
"""

View File

@ -1,29 +0,0 @@
# -*- mode: python -*-
block_cipher = None
a = Analysis(['rating-client.py'],
pathex=['/root/Downloads/FLO-appStore-master/apps/FloRate'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='rating-client',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )

2
apps/Readme.md Normal file
View File

@ -0,0 +1,2 @@
This is util Folder for downloading the app.
Do not delete this folder

View File

@ -1,23 +0,0 @@
# Xcertify
Xcertify is decentralized application built on floblockchain, which can be used to publish certificates, college degrees, results, and even contact cards. Xcertify makes sure that fake documents cannot be created as they are written over blockchain and verified using digital signatures.
Currently only CLI version is available , with just the basic certificate templates. I will be releasing the GUI version and 3 more templates in a week or so. Although it already supports user created themes.
You need to run a full flo-qt wallet to run it. Download it from here https://github.com/floblockchain/flo
How to use Xcertify?
-> Download it from github
-> Install htmlmin and webbrowser modules using pip
pip install htmlmin
pip install webbrowser
-> You can edit the Xcertify/HTML/index.html according to your need. The attributes should be enclosed within {{ }} . e.g. {{student_name}}
->Run publish.py. It will automatically detect the attributes and ask you to enter the values.
->if you want to view a document run the view.py file and enter the certificate id and source's address to verify the document. If verification is successful then a browser window with the document should appear.

View File

@ -1,246 +0,0 @@
(['/root/Desktop/Xcertify-master/publish.py'],
['/root/Desktop/Xcertify-master', '/root/Desktop/Xcertify-master'],
['codecs'],
[],
[],
[],
False,
False,
'3.6.6 (default, Jun 27 2018, 14:44:17) \n[GCC 8.1.0]',
[('publish', '/root/Desktop/Xcertify-master/publish.py', 'PYSOURCE')],
[('_strptime', '/usr/lib/python3.6/_strptime.py', 'PYMODULE'),
('datetime', '/usr/lib/python3.6/datetime.py', 'PYMODULE'),
('posixpath', '/usr/lib/python3.6/posixpath.py', 'PYMODULE'),
('stringprep', '/usr/lib/python3.6/stringprep.py', 'PYMODULE'),
('__future__', '/usr/lib/python3.6/__future__.py', 'PYMODULE'),
('argparse', '/usr/lib/python3.6/argparse.py', 'PYMODULE'),
('difflib', '/usr/lib/python3.6/difflib.py', 'PYMODULE'),
('ast', '/usr/lib/python3.6/ast.py', 'PYMODULE'),
('inspect', '/usr/lib/python3.6/inspect.py', 'PYMODULE'),
('genericpath', '/usr/lib/python3.6/genericpath.py', 'PYMODULE'),
('ntpath', '/usr/lib/python3.6/ntpath.py', 'PYMODULE'),
('os', '/usr/lib/python3.6/os.py', 'PYMODULE'),
('cmd', '/usr/lib/python3.6/cmd.py', 'PYMODULE'),
('bdb', '/usr/lib/python3.6/bdb.py', 'PYMODULE'),
('opcode', '/usr/lib/python3.6/opcode.py', 'PYMODULE'),
('dis', '/usr/lib/python3.6/dis.py', 'PYMODULE'),
('codeop', '/usr/lib/python3.6/codeop.py', 'PYMODULE'),
('code', '/usr/lib/python3.6/code.py', 'PYMODULE'),
('glob', '/usr/lib/python3.6/glob.py', 'PYMODULE'),
('shlex', '/usr/lib/python3.6/shlex.py', 'PYMODULE'),
('importlib._bootstrap',
'/usr/lib/python3.6/importlib/_bootstrap.py',
'PYMODULE'),
('importlib._bootstrap_external',
'/usr/lib/python3.6/importlib/_bootstrap_external.py',
'PYMODULE'),
('importlib.machinery',
'/usr/lib/python3.6/importlib/machinery.py',
'PYMODULE'),
('importlib.util', '/usr/lib/python3.6/importlib/util.py', 'PYMODULE'),
('importlib.abc', '/usr/lib/python3.6/importlib/abc.py', 'PYMODULE'),
('importlib', '/usr/lib/python3.6/importlib/__init__.py', 'PYMODULE'),
('pkgutil', '/usr/lib/python3.6/pkgutil.py', 'PYMODULE'),
('xml', '/usr/lib/python3.6/xml/__init__.py', 'PYMODULE'),
('xml.sax.expatreader',
'/usr/lib/python3.6/xml/sax/expatreader.py',
'PYMODULE'),
('xml.sax.saxutils', '/usr/lib/python3.6/xml/sax/saxutils.py', 'PYMODULE'),
('urllib.request', '/usr/lib/python3.6/urllib/request.py', 'PYMODULE'),
('getpass', '/usr/lib/python3.6/getpass.py', 'PYMODULE'),
('nturl2path', '/usr/lib/python3.6/nturl2path.py', 'PYMODULE'),
('ftplib', '/usr/lib/python3.6/ftplib.py', 'PYMODULE'),
('netrc', '/usr/lib/python3.6/netrc.py', 'PYMODULE'),
('http.cookiejar', '/usr/lib/python3.6/http/cookiejar.py', 'PYMODULE'),
('urllib.response', '/usr/lib/python3.6/urllib/response.py', 'PYMODULE'),
('urllib.error', '/usr/lib/python3.6/urllib/error.py', 'PYMODULE'),
('xml.sax', '/usr/lib/python3.6/xml/sax/__init__.py', 'PYMODULE'),
('xml.sax.handler', '/usr/lib/python3.6/xml/sax/handler.py', 'PYMODULE'),
('xml.sax._exceptions',
'/usr/lib/python3.6/xml/sax/_exceptions.py',
'PYMODULE'),
('xml.sax.xmlreader', '/usr/lib/python3.6/xml/sax/xmlreader.py', 'PYMODULE'),
('xml.parsers', '/usr/lib/python3.6/xml/parsers/__init__.py', 'PYMODULE'),
('xml.parsers.expat', '/usr/lib/python3.6/xml/parsers/expat.py', 'PYMODULE'),
('plistlib', '/usr/lib/python3.6/plistlib.py', 'PYMODULE'),
('platform', '/usr/lib/python3.6/platform.py', 'PYMODULE'),
('token', '/usr/lib/python3.6/token.py', 'PYMODULE'),
('tokenize', '/usr/lib/python3.6/tokenize.py', 'PYMODULE'),
('urllib.parse', '/usr/lib/python3.6/urllib/parse.py', 'PYMODULE'),
('tempfile', '/usr/lib/python3.6/tempfile.py', 'PYMODULE'),
('tty', '/usr/lib/python3.6/tty.py', 'PYMODULE'),
('pydoc_data', '/usr/lib/python3.6/pydoc_data/__init__.py', 'PYMODULE'),
('pydoc_data.topics', '/usr/lib/python3.6/pydoc_data/topics.py', 'PYMODULE'),
('textwrap', '/usr/lib/python3.6/textwrap.py', 'PYMODULE'),
('html.entities', '/usr/lib/python3.6/html/entities.py', 'PYMODULE'),
('html', '/usr/lib/python3.6/html/__init__.py', 'PYMODULE'),
('ipaddress', '/usr/lib/python3.6/ipaddress.py', 'PYMODULE'),
('ssl', '/usr/lib/python3.6/ssl.py', 'PYMODULE'),
('http.client', '/usr/lib/python3.6/http/client.py', 'PYMODULE'),
('mimetypes', '/usr/lib/python3.6/mimetypes.py', 'PYMODULE'),
('socketserver', '/usr/lib/python3.6/socketserver.py', 'PYMODULE'),
('http', '/usr/lib/python3.6/http/__init__.py', 'PYMODULE'),
('http.server', '/usr/lib/python3.6/http/server.py', 'PYMODULE'),
('optparse', '/usr/lib/python3.6/optparse.py', 'PYMODULE'),
('uu', '/usr/lib/python3.6/uu.py', 'PYMODULE'),
('quopri', '/usr/lib/python3.6/quopri.py', 'PYMODULE'),
('email.feedparser', '/usr/lib/python3.6/email/feedparser.py', 'PYMODULE'),
('email.parser', '/usr/lib/python3.6/email/parser.py', 'PYMODULE'),
('email', '/usr/lib/python3.6/email/__init__.py', 'PYMODULE'),
('calendar', '/usr/lib/python3.6/calendar.py', 'PYMODULE'),
('email._parseaddr', '/usr/lib/python3.6/email/_parseaddr.py', 'PYMODULE'),
('email.utils', '/usr/lib/python3.6/email/utils.py', 'PYMODULE'),
('email.errors', '/usr/lib/python3.6/email/errors.py', 'PYMODULE'),
('email.header', '/usr/lib/python3.6/email/header.py', 'PYMODULE'),
('email._policybase', '/usr/lib/python3.6/email/_policybase.py', 'PYMODULE'),
('email.base64mime', '/usr/lib/python3.6/email/base64mime.py', 'PYMODULE'),
('email.encoders', '/usr/lib/python3.6/email/encoders.py', 'PYMODULE'),
('email.charset', '/usr/lib/python3.6/email/charset.py', 'PYMODULE'),
('base64', '/usr/lib/python3.6/base64.py', 'PYMODULE'),
('email._encoded_words',
'/usr/lib/python3.6/email/_encoded_words.py',
'PYMODULE'),
('hashlib', '/usr/lib/python3.6/hashlib.py', 'PYMODULE'),
('bisect', '/usr/lib/python3.6/bisect.py', 'PYMODULE'),
('random', '/usr/lib/python3.6/random.py', 'PYMODULE'),
('email.generator', '/usr/lib/python3.6/email/generator.py', 'PYMODULE'),
('email.iterators', '/usr/lib/python3.6/email/iterators.py', 'PYMODULE'),
('urllib', '/usr/lib/python3.6/urllib/__init__.py', 'PYMODULE'),
('email._header_value_parser',
'/usr/lib/python3.6/email/_header_value_parser.py',
'PYMODULE'),
('email.headerregistry',
'/usr/lib/python3.6/email/headerregistry.py',
'PYMODULE'),
('email.quoprimime', '/usr/lib/python3.6/email/quoprimime.py', 'PYMODULE'),
('email.contentmanager',
'/usr/lib/python3.6/email/contentmanager.py',
'PYMODULE'),
('email.policy', '/usr/lib/python3.6/email/policy.py', 'PYMODULE'),
('email.message', '/usr/lib/python3.6/email/message.py', 'PYMODULE'),
('stat', '/usr/lib/python3.6/stat.py', 'PYMODULE'),
('bz2', '/usr/lib/python3.6/bz2.py', 'PYMODULE'),
('lzma', '/usr/lib/python3.6/lzma.py', 'PYMODULE'),
('_compression', '/usr/lib/python3.6/_compression.py', 'PYMODULE'),
('gzip', '/usr/lib/python3.6/gzip.py', 'PYMODULE'),
('tarfile', '/usr/lib/python3.6/tarfile.py', 'PYMODULE'),
('_dummy_thread', '/usr/lib/python3.6/_dummy_thread.py', 'PYMODULE'),
('dummy_threading', '/usr/lib/python3.6/dummy_threading.py', 'PYMODULE'),
('py_compile', '/usr/lib/python3.6/py_compile.py', 'PYMODULE'),
('zipfile', '/usr/lib/python3.6/zipfile.py', 'PYMODULE'),
('shutil', '/usr/lib/python3.6/shutil.py', 'PYMODULE'),
('selectors', '/usr/lib/python3.6/selectors.py', 'PYMODULE'),
('socket', '/usr/lib/python3.6/socket.py', 'PYMODULE'),
('webbrowser', '/usr/lib/python3.6/webbrowser.py', 'PYMODULE'),
('pydoc', '/usr/lib/python3.6/pydoc.py', 'PYMODULE'),
('copy', '/usr/lib/python3.6/copy.py', 'PYMODULE'),
('gettext', '/usr/lib/python3.6/gettext.py', 'PYMODULE'),
('getopt', '/usr/lib/python3.6/getopt.py', 'PYMODULE'),
('pdb', '/usr/lib/python3.6/pdb.py', 'PYMODULE'),
('unittest.util', '/usr/lib/python3.6/unittest/util.py', 'PYMODULE'),
('unittest.result', '/usr/lib/python3.6/unittest/result.py', 'PYMODULE'),
('string', '/usr/lib/python3.6/string.py', 'PYMODULE'),
('_threading_local', '/usr/lib/python3.6/_threading_local.py', 'PYMODULE'),
('threading', '/usr/lib/python3.6/threading.py', 'PYMODULE'),
('logging', '/usr/lib/python3.6/logging/__init__.py', 'PYMODULE'),
('contextlib', '/usr/lib/python3.6/contextlib.py', 'PYMODULE'),
('unittest.case', '/usr/lib/python3.6/unittest/case.py', 'PYMODULE'),
('unittest.suite', '/usr/lib/python3.6/unittest/suite.py', 'PYMODULE'),
('unittest.loader', '/usr/lib/python3.6/unittest/loader.py', 'PYMODULE'),
('fnmatch', '/usr/lib/python3.6/fnmatch.py', 'PYMODULE'),
('struct', '/usr/lib/python3.6/struct.py', 'PYMODULE'),
('_compat_pickle', '/usr/lib/python3.6/_compat_pickle.py', 'PYMODULE'),
('pprint', '/usr/lib/python3.6/pprint.py', 'PYMODULE'),
('pickle', '/usr/lib/python3.6/pickle.py', 'PYMODULE'),
('tracemalloc', '/usr/lib/python3.6/tracemalloc.py', 'PYMODULE'),
('warnings', '/usr/lib/python3.6/warnings.py', 'PYMODULE'),
('unittest.runner', '/usr/lib/python3.6/unittest/runner.py', 'PYMODULE'),
('unittest.main', '/usr/lib/python3.6/unittest/main.py', 'PYMODULE'),
('enum', '/usr/lib/python3.6/enum.py', 'PYMODULE'),
('signal', '/usr/lib/python3.6/signal.py', 'PYMODULE'),
('unittest.signals', '/usr/lib/python3.6/unittest/signals.py', 'PYMODULE'),
('unittest', '/usr/lib/python3.6/unittest/__init__.py', 'PYMODULE'),
('doctest', '/usr/lib/python3.6/doctest.py', 'PYMODULE'),
('htmlmin',
'/usr/local/lib/python3.6/dist-packages/htmlmin/__init__.py',
'PYMODULE'),
('htmlmin.main',
'/usr/local/lib/python3.6/dist-packages/htmlmin/main.py',
'PYMODULE'),
('cgi', '/usr/lib/python3.6/cgi.py', 'PYMODULE'),
('htmlmin.parser',
'/usr/local/lib/python3.6/dist-packages/htmlmin/parser.py',
'PYMODULE'),
('htmlmin.python3html.parser',
'/usr/local/lib/python3.6/dist-packages/htmlmin/python3html/parser.py',
'PYMODULE'),
('htmlmin.python3html',
'/usr/local/lib/python3.6/dist-packages/htmlmin/python3html/__init__.py',
'PYMODULE'),
('_markupbase', '/usr/lib/python3.6/_markupbase.py', 'PYMODULE'),
('htmlmin.escape',
'/usr/local/lib/python3.6/dist-packages/htmlmin/escape.py',
'PYMODULE'),
('subprocess', '/usr/lib/python3.6/subprocess.py', 'PYMODULE')],
[('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('resource',
'/usr/lib/python3.6/lib-dynload/resource.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_ssl',
'/usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_tw',
'/usr/lib/python3.6/lib-dynload/_codecs_tw.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_kr',
'/usr/lib/python3.6/lib-dynload/_codecs_kr.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_cn',
'/usr/lib/python3.6/lib-dynload/_codecs_cn.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_iso2022',
'/usr/lib/python3.6/lib-dynload/_codecs_iso2022.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_hk',
'/usr/lib/python3.6/lib-dynload/_codecs_hk.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_jp',
'/usr/lib/python3.6/lib-dynload/_codecs_jp.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_multibytecodec',
'/usr/lib/python3.6/lib-dynload/_multibytecodec.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_opcode',
'/usr/lib/python3.6/lib-dynload/_opcode.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('readline',
'/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('termios',
'/usr/lib/python3.6/lib-dynload/termios.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_hashlib',
'/usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_bz2',
'/usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_lzma',
'/usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('libcrypto.so.1.1', '/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1', 'BINARY'),
('libssl.so.1.1', '/usr/lib/x86_64-linux-gnu/libssl.so.1.1', 'BINARY'),
('libreadline.so.7', '/lib/x86_64-linux-gnu/libreadline.so.7', 'BINARY'),
('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libpython3.6m.so.1.0',
'/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0',
'BINARY')],
[],
[],
[('base_library.zip',
'/root/Desktop/Xcertify-master/build/publish/base_library.zip',
'DATA')],
[])

View File

@ -1,94 +0,0 @@
('/root/Desktop/Xcertify-master/dist/publish',
True,
False,
False,
None,
None,
False,
False,
None,
True,
'publish.pkg',
[('out00-PYZ.pyz',
'/root/Desktop/Xcertify-master/build/publish/out00-PYZ.pyz',
'PYZ'),
('struct', '/usr/lib/python3.6/struct.pyo', 'PYMODULE'),
('pyimod01_os_path',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod01_os_path.pyc',
'PYMODULE'),
('pyimod02_archive',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod02_archive.pyc',
'PYMODULE'),
('pyimod03_importers',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod03_importers.pyc',
'PYMODULE'),
('pyiboot01_bootstrap',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
'PYSOURCE'),
('publish', '/root/Desktop/Xcertify-master/publish.py', 'PYSOURCE'),
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('resource',
'/usr/lib/python3.6/lib-dynload/resource.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_ssl',
'/usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_tw',
'/usr/lib/python3.6/lib-dynload/_codecs_tw.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_kr',
'/usr/lib/python3.6/lib-dynload/_codecs_kr.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_cn',
'/usr/lib/python3.6/lib-dynload/_codecs_cn.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_iso2022',
'/usr/lib/python3.6/lib-dynload/_codecs_iso2022.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_hk',
'/usr/lib/python3.6/lib-dynload/_codecs_hk.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_jp',
'/usr/lib/python3.6/lib-dynload/_codecs_jp.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_multibytecodec',
'/usr/lib/python3.6/lib-dynload/_multibytecodec.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_opcode',
'/usr/lib/python3.6/lib-dynload/_opcode.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('readline',
'/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('termios',
'/usr/lib/python3.6/lib-dynload/termios.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_hashlib',
'/usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_bz2',
'/usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_lzma',
'/usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('libcrypto.so.1.1', '/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1', 'BINARY'),
('libssl.so.1.1', '/usr/lib/x86_64-linux-gnu/libssl.so.1.1', 'BINARY'),
('libreadline.so.7', '/lib/x86_64-linux-gnu/libreadline.so.7', 'BINARY'),
('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libpython3.6m.so.1.0',
'/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0',
'BINARY'),
('base_library.zip',
'/root/Desktop/Xcertify-master/build/publish/base_library.zip',
'DATA')],
[],
False,
True,
1533572235,
[('run',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/bootloader/Linux-64bit/run',
'EXECUTABLE')])

View File

@ -1,87 +0,0 @@
('/root/Desktop/Xcertify-master/build/publish/out00-PKG.pkg',
{'BINARY': 1,
'DATA': 1,
'EXECUTABLE': 1,
'EXTENSION': 1,
'PYMODULE': 1,
'PYSOURCE': 1,
'PYZ': 0},
[('out00-PYZ.pyz',
'/root/Desktop/Xcertify-master/build/publish/out00-PYZ.pyz',
'PYZ'),
('struct', '/usr/lib/python3.6/struct.pyo', 'PYMODULE'),
('pyimod01_os_path',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod01_os_path.pyc',
'PYMODULE'),
('pyimod02_archive',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod02_archive.pyc',
'PYMODULE'),
('pyimod03_importers',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyimod03_importers.pyc',
'PYMODULE'),
('pyiboot01_bootstrap',
'/usr/local/lib/python3.6/dist-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
'PYSOURCE'),
('publish', '/root/Desktop/Xcertify-master/publish.py', 'PYSOURCE'),
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('resource',
'/usr/lib/python3.6/lib-dynload/resource.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_ssl',
'/usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_tw',
'/usr/lib/python3.6/lib-dynload/_codecs_tw.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_kr',
'/usr/lib/python3.6/lib-dynload/_codecs_kr.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_cn',
'/usr/lib/python3.6/lib-dynload/_codecs_cn.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_iso2022',
'/usr/lib/python3.6/lib-dynload/_codecs_iso2022.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_hk',
'/usr/lib/python3.6/lib-dynload/_codecs_hk.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_codecs_jp',
'/usr/lib/python3.6/lib-dynload/_codecs_jp.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_multibytecodec',
'/usr/lib/python3.6/lib-dynload/_multibytecodec.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_opcode',
'/usr/lib/python3.6/lib-dynload/_opcode.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('readline',
'/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('termios',
'/usr/lib/python3.6/lib-dynload/termios.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_hashlib',
'/usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_bz2',
'/usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('_lzma',
'/usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so',
'EXTENSION'),
('libcrypto.so.1.1', '/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1', 'BINARY'),
('libssl.so.1.1', '/usr/lib/x86_64-linux-gnu/libssl.so.1.1', 'BINARY'),
('libreadline.so.7', '/lib/x86_64-linux-gnu/libreadline.so.7', 'BINARY'),
('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libpython3.6m.so.1.0',
'/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0',
'BINARY'),
('base_library.zip',
'/root/Desktop/Xcertify-master/build/publish/base_library.zip',
'DATA')],
False,
False,
True)

View File

@ -1,175 +0,0 @@
('/root/Desktop/Xcertify-master/build/publish/out00-PYZ.pyz',
[('_strptime', '/usr/lib/python3.6/_strptime.py', 'PYMODULE'),
('datetime', '/usr/lib/python3.6/datetime.py', 'PYMODULE'),
('posixpath', '/usr/lib/python3.6/posixpath.py', 'PYMODULE'),
('stringprep', '/usr/lib/python3.6/stringprep.py', 'PYMODULE'),
('__future__', '/usr/lib/python3.6/__future__.py', 'PYMODULE'),
('argparse', '/usr/lib/python3.6/argparse.py', 'PYMODULE'),
('difflib', '/usr/lib/python3.6/difflib.py', 'PYMODULE'),
('ast', '/usr/lib/python3.6/ast.py', 'PYMODULE'),
('inspect', '/usr/lib/python3.6/inspect.py', 'PYMODULE'),
('genericpath', '/usr/lib/python3.6/genericpath.py', 'PYMODULE'),
('ntpath', '/usr/lib/python3.6/ntpath.py', 'PYMODULE'),
('os', '/usr/lib/python3.6/os.py', 'PYMODULE'),
('cmd', '/usr/lib/python3.6/cmd.py', 'PYMODULE'),
('bdb', '/usr/lib/python3.6/bdb.py', 'PYMODULE'),
('opcode', '/usr/lib/python3.6/opcode.py', 'PYMODULE'),
('dis', '/usr/lib/python3.6/dis.py', 'PYMODULE'),
('codeop', '/usr/lib/python3.6/codeop.py', 'PYMODULE'),
('code', '/usr/lib/python3.6/code.py', 'PYMODULE'),
('glob', '/usr/lib/python3.6/glob.py', 'PYMODULE'),
('shlex', '/usr/lib/python3.6/shlex.py', 'PYMODULE'),
('importlib._bootstrap',
'/usr/lib/python3.6/importlib/_bootstrap.py',
'PYMODULE'),
('importlib._bootstrap_external',
'/usr/lib/python3.6/importlib/_bootstrap_external.py',
'PYMODULE'),
('importlib.machinery',
'/usr/lib/python3.6/importlib/machinery.py',
'PYMODULE'),
('importlib.util', '/usr/lib/python3.6/importlib/util.py', 'PYMODULE'),
('importlib.abc', '/usr/lib/python3.6/importlib/abc.py', 'PYMODULE'),
('importlib', '/usr/lib/python3.6/importlib/__init__.py', 'PYMODULE'),
('pkgutil', '/usr/lib/python3.6/pkgutil.py', 'PYMODULE'),
('xml', '/usr/lib/python3.6/xml/__init__.py', 'PYMODULE'),
('xml.sax.expatreader',
'/usr/lib/python3.6/xml/sax/expatreader.py',
'PYMODULE'),
('xml.sax.saxutils', '/usr/lib/python3.6/xml/sax/saxutils.py', 'PYMODULE'),
('urllib.request', '/usr/lib/python3.6/urllib/request.py', 'PYMODULE'),
('getpass', '/usr/lib/python3.6/getpass.py', 'PYMODULE'),
('nturl2path', '/usr/lib/python3.6/nturl2path.py', 'PYMODULE'),
('ftplib', '/usr/lib/python3.6/ftplib.py', 'PYMODULE'),
('netrc', '/usr/lib/python3.6/netrc.py', 'PYMODULE'),
('http.cookiejar', '/usr/lib/python3.6/http/cookiejar.py', 'PYMODULE'),
('urllib.response', '/usr/lib/python3.6/urllib/response.py', 'PYMODULE'),
('urllib.error', '/usr/lib/python3.6/urllib/error.py', 'PYMODULE'),
('xml.sax', '/usr/lib/python3.6/xml/sax/__init__.py', 'PYMODULE'),
('xml.sax.handler', '/usr/lib/python3.6/xml/sax/handler.py', 'PYMODULE'),
('xml.sax._exceptions',
'/usr/lib/python3.6/xml/sax/_exceptions.py',
'PYMODULE'),
('xml.sax.xmlreader', '/usr/lib/python3.6/xml/sax/xmlreader.py', 'PYMODULE'),
('xml.parsers', '/usr/lib/python3.6/xml/parsers/__init__.py', 'PYMODULE'),
('xml.parsers.expat', '/usr/lib/python3.6/xml/parsers/expat.py', 'PYMODULE'),
('plistlib', '/usr/lib/python3.6/plistlib.py', 'PYMODULE'),
('platform', '/usr/lib/python3.6/platform.py', 'PYMODULE'),
('token', '/usr/lib/python3.6/token.py', 'PYMODULE'),
('tokenize', '/usr/lib/python3.6/tokenize.py', 'PYMODULE'),
('urllib.parse', '/usr/lib/python3.6/urllib/parse.py', 'PYMODULE'),
('tempfile', '/usr/lib/python3.6/tempfile.py', 'PYMODULE'),
('tty', '/usr/lib/python3.6/tty.py', 'PYMODULE'),
('pydoc_data', '/usr/lib/python3.6/pydoc_data/__init__.py', 'PYMODULE'),
('pydoc_data.topics', '/usr/lib/python3.6/pydoc_data/topics.py', 'PYMODULE'),
('textwrap', '/usr/lib/python3.6/textwrap.py', 'PYMODULE'),
('html.entities', '/usr/lib/python3.6/html/entities.py', 'PYMODULE'),
('html', '/usr/lib/python3.6/html/__init__.py', 'PYMODULE'),
('ipaddress', '/usr/lib/python3.6/ipaddress.py', 'PYMODULE'),
('ssl', '/usr/lib/python3.6/ssl.py', 'PYMODULE'),
('http.client', '/usr/lib/python3.6/http/client.py', 'PYMODULE'),
('mimetypes', '/usr/lib/python3.6/mimetypes.py', 'PYMODULE'),
('socketserver', '/usr/lib/python3.6/socketserver.py', 'PYMODULE'),
('http', '/usr/lib/python3.6/http/__init__.py', 'PYMODULE'),
('http.server', '/usr/lib/python3.6/http/server.py', 'PYMODULE'),
('optparse', '/usr/lib/python3.6/optparse.py', 'PYMODULE'),
('uu', '/usr/lib/python3.6/uu.py', 'PYMODULE'),
('quopri', '/usr/lib/python3.6/quopri.py', 'PYMODULE'),
('email.feedparser', '/usr/lib/python3.6/email/feedparser.py', 'PYMODULE'),
('email.parser', '/usr/lib/python3.6/email/parser.py', 'PYMODULE'),
('email', '/usr/lib/python3.6/email/__init__.py', 'PYMODULE'),
('calendar', '/usr/lib/python3.6/calendar.py', 'PYMODULE'),
('email._parseaddr', '/usr/lib/python3.6/email/_parseaddr.py', 'PYMODULE'),
('email.utils', '/usr/lib/python3.6/email/utils.py', 'PYMODULE'),
('email.errors', '/usr/lib/python3.6/email/errors.py', 'PYMODULE'),
('email.header', '/usr/lib/python3.6/email/header.py', 'PYMODULE'),
('email._policybase', '/usr/lib/python3.6/email/_policybase.py', 'PYMODULE'),
('email.base64mime', '/usr/lib/python3.6/email/base64mime.py', 'PYMODULE'),
('email.encoders', '/usr/lib/python3.6/email/encoders.py', 'PYMODULE'),
('email.charset', '/usr/lib/python3.6/email/charset.py', 'PYMODULE'),
('base64', '/usr/lib/python3.6/base64.py', 'PYMODULE'),
('email._encoded_words',
'/usr/lib/python3.6/email/_encoded_words.py',
'PYMODULE'),
('hashlib', '/usr/lib/python3.6/hashlib.py', 'PYMODULE'),
('bisect', '/usr/lib/python3.6/bisect.py', 'PYMODULE'),
('random', '/usr/lib/python3.6/random.py', 'PYMODULE'),
('email.generator', '/usr/lib/python3.6/email/generator.py', 'PYMODULE'),
('email.iterators', '/usr/lib/python3.6/email/iterators.py', 'PYMODULE'),
('urllib', '/usr/lib/python3.6/urllib/__init__.py', 'PYMODULE'),
('email._header_value_parser',
'/usr/lib/python3.6/email/_header_value_parser.py',
'PYMODULE'),
('email.headerregistry',
'/usr/lib/python3.6/email/headerregistry.py',
'PYMODULE'),
('email.quoprimime', '/usr/lib/python3.6/email/quoprimime.py', 'PYMODULE'),
('email.contentmanager',
'/usr/lib/python3.6/email/contentmanager.py',
'PYMODULE'),
('email.policy', '/usr/lib/python3.6/email/policy.py', 'PYMODULE'),
('email.message', '/usr/lib/python3.6/email/message.py', 'PYMODULE'),
('stat', '/usr/lib/python3.6/stat.py', 'PYMODULE'),
('bz2', '/usr/lib/python3.6/bz2.py', 'PYMODULE'),
('lzma', '/usr/lib/python3.6/lzma.py', 'PYMODULE'),
('_compression', '/usr/lib/python3.6/_compression.py', 'PYMODULE'),
('gzip', '/usr/lib/python3.6/gzip.py', 'PYMODULE'),
('tarfile', '/usr/lib/python3.6/tarfile.py', 'PYMODULE'),
('_dummy_thread', '/usr/lib/python3.6/_dummy_thread.py', 'PYMODULE'),
('dummy_threading', '/usr/lib/python3.6/dummy_threading.py', 'PYMODULE'),
('py_compile', '/usr/lib/python3.6/py_compile.py', 'PYMODULE'),
('zipfile', '/usr/lib/python3.6/zipfile.py', 'PYMODULE'),
('shutil', '/usr/lib/python3.6/shutil.py', 'PYMODULE'),
('selectors', '/usr/lib/python3.6/selectors.py', 'PYMODULE'),
('socket', '/usr/lib/python3.6/socket.py', 'PYMODULE'),
('webbrowser', '/usr/lib/python3.6/webbrowser.py', 'PYMODULE'),
('pydoc', '/usr/lib/python3.6/pydoc.py', 'PYMODULE'),
('copy', '/usr/lib/python3.6/copy.py', 'PYMODULE'),
('gettext', '/usr/lib/python3.6/gettext.py', 'PYMODULE'),
('getopt', '/usr/lib/python3.6/getopt.py', 'PYMODULE'),
('pdb', '/usr/lib/python3.6/pdb.py', 'PYMODULE'),
('unittest.util', '/usr/lib/python3.6/unittest/util.py', 'PYMODULE'),
('unittest.result', '/usr/lib/python3.6/unittest/result.py', 'PYMODULE'),
('string', '/usr/lib/python3.6/string.py', 'PYMODULE'),
('_threading_local', '/usr/lib/python3.6/_threading_local.py', 'PYMODULE'),
('threading', '/usr/lib/python3.6/threading.py', 'PYMODULE'),
('logging', '/usr/lib/python3.6/logging/__init__.py', 'PYMODULE'),
('contextlib', '/usr/lib/python3.6/contextlib.py', 'PYMODULE'),
('unittest.case', '/usr/lib/python3.6/unittest/case.py', 'PYMODULE'),
('unittest.suite', '/usr/lib/python3.6/unittest/suite.py', 'PYMODULE'),
('unittest.loader', '/usr/lib/python3.6/unittest/loader.py', 'PYMODULE'),
('fnmatch', '/usr/lib/python3.6/fnmatch.py', 'PYMODULE'),
('struct', '/usr/lib/python3.6/struct.py', 'PYMODULE'),
('_compat_pickle', '/usr/lib/python3.6/_compat_pickle.py', 'PYMODULE'),
('pprint', '/usr/lib/python3.6/pprint.py', 'PYMODULE'),
('pickle', '/usr/lib/python3.6/pickle.py', 'PYMODULE'),
('tracemalloc', '/usr/lib/python3.6/tracemalloc.py', 'PYMODULE'),
('warnings', '/usr/lib/python3.6/warnings.py', 'PYMODULE'),
('unittest.runner', '/usr/lib/python3.6/unittest/runner.py', 'PYMODULE'),
('unittest.main', '/usr/lib/python3.6/unittest/main.py', 'PYMODULE'),
('enum', '/usr/lib/python3.6/enum.py', 'PYMODULE'),
('signal', '/usr/lib/python3.6/signal.py', 'PYMODULE'),
('unittest.signals', '/usr/lib/python3.6/unittest/signals.py', 'PYMODULE'),
('unittest', '/usr/lib/python3.6/unittest/__init__.py', 'PYMODULE'),
('doctest', '/usr/lib/python3.6/doctest.py', 'PYMODULE'),
('htmlmin',
'/usr/local/lib/python3.6/dist-packages/htmlmin/__init__.py',
'PYMODULE'),
('htmlmin.main',
'/usr/local/lib/python3.6/dist-packages/htmlmin/main.py',
'PYMODULE'),
('cgi', '/usr/lib/python3.6/cgi.py', 'PYMODULE'),
('htmlmin.parser',
'/usr/local/lib/python3.6/dist-packages/htmlmin/parser.py',
'PYMODULE'),
('htmlmin.python3html.parser',
'/usr/local/lib/python3.6/dist-packages/htmlmin/python3html/parser.py',
'PYMODULE'),
('htmlmin.python3html',
'/usr/local/lib/python3.6/dist-packages/htmlmin/python3html/__init__.py',
'PYMODULE'),
('_markupbase', '/usr/lib/python3.6/_markupbase.py', 'PYMODULE'),
('htmlmin.escape',
'/usr/local/lib/python3.6/dist-packages/htmlmin/escape.py',
'PYMODULE'),
('subprocess', '/usr/lib/python3.6/subprocess.py', 'PYMODULE')])

View File

@ -1,16 +0,0 @@
excluded module named _frozen_importlib - imported by importlib, importlib.abc, /root/Desktop/Xcertify-master/publish.py
missing module named _frozen_importlib_external - imported by importlib._bootstrap, importlib, importlib.abc, /root/Desktop/Xcertify-master/publish.py
missing module named _winreg - imported by platform, /root/Desktop/Xcertify-master/publish.py
missing module named _scproxy - imported by urllib.request
missing module named java - imported by platform, /root/Desktop/Xcertify-master/publish.py
missing module named 'java.lang' - imported by platform, /root/Desktop/Xcertify-master/publish.py, xml.sax._exceptions
missing module named vms_lib - imported by platform, /root/Desktop/Xcertify-master/publish.py
missing module named msvcrt - imported by subprocess, /root/Desktop/Xcertify-master/publish.py, getpass
missing module named _winapi - imported by subprocess, /root/Desktop/Xcertify-master/publish.py
missing module named winreg - imported by platform, mimetypes, /root/Desktop/Xcertify-master/publish.py, urllib.request
missing module named _dummy_threading - imported by dummy_threading, /root/Desktop/Xcertify-master/publish.py
missing module named nt - imported by os, ntpath, shutil, /root/Desktop/Xcertify-master/publish.py
missing module named 'org.python' - imported by copy, /root/Desktop/Xcertify-master/publish.py, xml.sax
missing module named org - imported by pickle, /root/Desktop/Xcertify-master/publish.py
missing module named htmlentitydefs - imported by htmlmin.python3html
missing module named markupbase - imported by htmlmin.python3html.parser

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

View File

@ -1,23 +0,0 @@
body{
font:Arial;
margin:0px;
}
.container{
width:650px;
height:480px;
background:url('bg.jpg') no-repeat;
text-align: center;
padding-top:40px;
margin:auto;
}
h1{
font:;
margin-bottom:0px;
}
h3{
margin:3px 0;
}
h2{
margin-top: 3px;
margin-bottom: 25px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

View File

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Certificate</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>CERTIFICATE</h1>
<h3>of</h3>
<h2>EXCELLENCE</h2>
<p>We present this certifiate to <br> <b>{{name}}</b> <br> in appreciation of his successfull work at <b>{{company}}</b> <br> during the period of <b>{{start_date}}</b> to <b>{{end_date}}</b> </p>
</div>
</body>
</html>

View File

@ -1,23 +0,0 @@
body{
font:Arial;
margin:0px;
}
.container{
width:650px;
height:480px;
background:url('bg.jpg') no-repeat;
text-align: center;
padding-top:40px;
margin:auto;
}
h1{
font:;
margin-bottom:0px;
}
h3{
margin:3px 0;
}
h2{
margin-top: 3px;
margin-bottom: 25px;
}

View File

@ -1,45 +0,0 @@
import re
import subprocess
import htmlmin
template=open("html/index.html", "r")
page_html=template.read()
page_html = htmlmin.minify(page_html, remove_empty_space=True)
print("Loaded Default Theme.")
#regex for identifying attributes
exp =r"{{\w+}}"
attributes = re.findall(exp,page_html)
r_attributes = attributes[:]
print()
print("Detected following attributes")
#removing curly brackets from attribute
for i in range(0,len(attributes)):
attributes[i] = attributes[i][2:-2]
print(str(i+1)+". "+attributes[i])
values=[]
print("Input Values for new certificate");
for i in range(0,len(attributes)):
inp = input(attributes[i]+" : ")
values.append(inp)
#replacing values in the code
for i in range(0,len(values)):
page_html = page_html.replace(r_attributes[i],values[i])
print(len(page_html))
receiver = input("Enter Receiver's Address: ")
#signing the certificate
sender = input("Enter your Address(for signing the certificate): ")
signature = subprocess.check_output(["flo-cli","signmessage",sender,str(page_html)])
signature = str(signature)
signature = signature[2:-3]
print(len(signature))
page_html = signature+page_html
#writing the certificate on the blockchain
txid = subprocess.check_output(["flo-cli", "sendtoaddress",receiver,"0.01",'""','""',"true","false","10",'UNSET',str(page_html)])
txid = str(txid)
txid = txid[2:-3]
print("Certificate Successfully Generated: "+txid)

View File

@ -1,29 +0,0 @@
# -*- mode: python -*-
block_cipher = None
a = Analysis(['publish.py'],
pathex=['/root/Desktop/Xcertify-master'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='publish',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )

View File

@ -1,30 +0,0 @@
import subprocess
import json
import webbrowser
txid = input("Enter Certificate Id: ")
rawtx = subprocess.check_output(["flo-cli", "getrawtransaction", str(txid)])
rawtx = str(rawtx)
rawtx = rawtx[2:-3]
tx = subprocess.check_output(["flo-cli",, "decoderawtransaction", str(rawtx)])
content = json.loads(tx)
page_html = content['floData']
signature = page_html[0:88]
page_html = page_html[88:]
issued_by = input("Enter address of the issuing authority: ")
status = subprocess.check_output(["flo-cli","verifymessage",issued_by,signature,str(page_html)])
status = str(status)
status = status[2:-3]
if(status=='true'):
print("Certificate verification successfull.")
cert = open("./certificates/"+txid+".html",'w')
cert.write(page_html)
url = "./certificates/"+txid+".html"
webbrowser.open_new(url)
else:
print('The certificate is invalid.')

Binary file not shown.

View File

@ -1,83 +0,0 @@
from tkinter import *
import subprocess
import os
import webbrowser
current_dir=os.getcwd()
class FLOappStore:
def __init__(self, root):
self.root = root
def medici(self):
webbrowser.open("https://www.mediciventures.com/",new=1)
def alexandria(self):
webbrowser.open("https://alexandria.io/browser/",new=1)
def caltech(self):
webbrowser.open("https://etdb.caltech.edu/browse",new=1)
def tzero(self):
webbrowser.open("https://www.tzero.com/",new=1)
def worldmood(self):
webbrowser.open("http://worldmood.io/",new=1)
def flotorizer(self):
webbrowser.open("http://flotorizer.net/",new=1)
def xcertify(self):
os.chdir('apps/Xcertify/')
os.system('gnome-terminal -- ./xcertify')
os.chdir(current_dir)
def aternalove(self):
os.chdir('apps/Aterna-Love/')
os.system('gnome-terminal -- ./auto-aterna-love.sh')
os.chdir(current_dir)
def start(self):
self.MainFrame = Frame(self.root, height=1000,width=500)
self.MainFrame.pack()
WelcomeLabel = Label(self.MainFrame,text="FLO AppStore",font=("Arial", 20))
WelcomeLabel.grid(column = 1, columnspan =4)
self.img1 = PhotoImage(file="Logos/SharedSecret.png")
button1 = Button(self.MainFrame,image = self.img1,width="187",height="186",command=lambda:self.execute('apps/FLO-Shared-Secret/FLO_Secret'))
button1.grid(row=2,column=1)
self.img2 = PhotoImage(file="Logos/Medici.png")
button2 = Button(self.MainFrame,image=self.img2, width="187",height="186",command=self.medici)
button2.grid(row=2, column=2)
self.img3= PhotoImage(file="Logos/Flotorizer.png")
button3= Button(self.MainFrame,image=self.img3,width="187",height="186",command=self.flotorizer)
button3.grid(row=2,column=3)
self.img4 = PhotoImage(file="Logos/WorldMood.png")
button4 = Button(self.MainFrame,image=self.img4,width="187",height="186",command=self.worldmood)
button4.grid(row=2,column=4)
self.img5 = PhotoImage(file="Logos/tZero.png")
button5 = Button(self.MainFrame, image=self.img5, width="187", height="186",command=self.tzero)
button5.grid(row=3, column=1)
self.img6 = PhotoImage(file="Logos/Alexandria.png")
button6 = Button(self.MainFrame, image=self.img6, width="187", height="186",command=self.alexandria)
button6.grid(row=3, column=2)
self.img7 = PhotoImage(file="Logos/Caltech.png")
button7 = Button(self.MainFrame, image=self.img7, width="187", height="186",command=self.caltech)
button7.grid(row=3, column=3)
self.img8 = PhotoImage(file="Logos/Xcertify.png")
button8 = Button(self.MainFrame, image=self.img8, width="187", height="186",command=self.xcertify)
button8.grid(row=3, column=4)
self.img9 = PhotoImage(file="Logos/Florate.png")
button9 = Button(self.MainFrame, image=self.img9, width="187", height="186",command=lambda:self.execute('apps/Florate/Florate'))
button9.grid(row=4, column=1)
self.img10 = PhotoImage(file="Logos/AternaLove.png")
button10 = Button(self.MainFrame, image=self.img10, width="187", height="186",command=self.aternalove)
button10.grid(row=4, column=2)
def execute(self,f):
subprocess.run([f])
root = Tk()
root.title("FLOappStore")
gui = FLOappStore(root)
gui.start()
root.mainloop()

13
test.py
View File

@ -1,13 +0,0 @@
from tkinter import *
from tkinter import messagebox
import subprocess
import os
import webbrowser
import json
app={}
app["location"] = 'apps/FLO-shared-secret/'
app["github"] = "https://github.com/akhil2015/FLO-shared-secret.git"
print(os.path.isdir(app["location"]))
#print(os.path.isdir(app["location"]) and subprocess.Popen("git config --get remote.origin.url",cwd=app["location"],stdout=subprocess.PIPE,shell=True).communicate()[0].decode("utf-8")==app["github"])
#print(subprocess.Popen("git diff --raw",cwd=app["location"],stdout=subprocess.PIPE,shell=True).communicate()[0]=="")
subprocess.Popen(['rm', '-rf', app['location']])