@gooddollar/goodprotocol 1.0.29 → 1.0.30-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/releases/deployment.json +9 -3
- package/scripts/deployGnosisSafe.ts +111 -0
- package/yarn.lock +76 -1
- package/scripts/misc/activeUsersCount.ts +0 -65
- package/scripts/misc/activeWalletsStats.ts +0 -150
- package/scripts/misc/claimIncidentStats.ts +0 -117
- package/scripts/misc/faucetStats.ts +0 -103
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddollar/goodprotocol",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.30-beta.0",
|
|
4
4
|
"description": "GoodDollar Protocol",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "scripts/build.sh deploy",
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
"mocha-lcov-reporter": "*",
|
|
105
105
|
"node-fetch": "*",
|
|
106
106
|
"node-jq": "*",
|
|
107
|
+
"prompt": "^1.3.0",
|
|
107
108
|
"regenerator-runtime": "^0.13.9",
|
|
108
109
|
"solhint": "*",
|
|
109
110
|
"solidity-coverage": "^0.7.21",
|
package/releases/deployment.json
CHANGED
|
@@ -521,7 +521,8 @@
|
|
|
521
521
|
]
|
|
522
522
|
],
|
|
523
523
|
"MultichainRouter": "0x765277eebeca2e31912c9946eae1021199b39c61",
|
|
524
|
-
"anyGoodDollar": "0xd17652350cfd2a37ba2f947c910987a3b1a1c60d"
|
|
524
|
+
"anyGoodDollar": "0xd17652350cfd2a37ba2f947c910987a3b1a1c60d",
|
|
525
|
+
"GuardiansSafe": "0x84c10b45fe51bfb4f86c19a47fdbc187d4572fb8"
|
|
525
526
|
},
|
|
526
527
|
"production": {
|
|
527
528
|
"NameService": "0xec6dcE387B1616a0c44fF2E4fA9E90E53Cf14eb0",
|
|
@@ -547,7 +548,8 @@
|
|
|
547
548
|
"FirstClaimPool": "0x18BcdF79A724648bF34eb06701be81bD072A2384",
|
|
548
549
|
"ProxyAdmin": "0x57179b2A8eB019157b0C3E761cdB26c82C982a3B",
|
|
549
550
|
"FuseFaucet": "0x01ab5966C1d742Ae0CFF7f14cC0F4D85156e83d9",
|
|
550
|
-
"FuseStaking": "0xA199F0C353E25AdF022378B0c208D600f39a6505"
|
|
551
|
+
"FuseStaking": "0xA199F0C353E25AdF022378B0c208D600f39a6505",
|
|
552
|
+
"GuardiansSafe": "0x84c10b45fe51bfb4f86c19a47fdbc187d4572fb8"
|
|
551
553
|
},
|
|
552
554
|
"production-celo": {
|
|
553
555
|
"ProxyFactory": "0x99C22e78A579e2176311c736C4c9F0b0D5A47806",
|
|
@@ -557,10 +559,14 @@
|
|
|
557
559
|
"Identity": "0x96B81f82A29e78C5ba9E2034Ce8490fd641a24eb",
|
|
558
560
|
"NameService": "0x563a80a452264a9e1aa37c6FA0B46D04C3c71b24",
|
|
559
561
|
"GReputation": "0xAC132ECe25217867E318eA8ff63420C90d5a74A6",
|
|
560
|
-
"
|
|
562
|
+
"GuardiansSafeOld": "0xC9D09BA972B4EB6Bb7347F2229FB6d50434fFCa6",
|
|
563
|
+
"GuardiansSafe": "0x84c10b45fe51bfb4f86c19a47fdbc187d4572fb8",
|
|
561
564
|
"network": "production-celo",
|
|
562
565
|
"networkId": 42220,
|
|
563
566
|
"GoodDollarMintBurnWrapper": "0x5566b6E4962BA83e05a426Ad89031ec18e9CadD3",
|
|
564
567
|
"MultichainRouter": "0xf27Ee99622C3C9b264583dACB2cCE056e194494f"
|
|
568
|
+
},
|
|
569
|
+
"localhost": {
|
|
570
|
+
"GuardiansSafe": "0x84c10b45fe51bfb4f86c19a47fdbc187d4572fb8"
|
|
565
571
|
}
|
|
566
572
|
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { network, ethers } from "hardhat";
|
|
2
|
+
import prompt from "prompt";
|
|
3
|
+
|
|
4
|
+
import releaser from "./releaser";
|
|
5
|
+
|
|
6
|
+
const PROXYFACTORY_CODE =
|
|
7
|
+
"0x608060405234801561001057600080fd5b5061131f806100206000396000f3fe60806040523480156200001157600080fd5b50600436106200006a5760003560e01c80631688f0b9146200006f5780632500510e14620000a557806353e5d93514620000db57806361b69abd14620000fd578063addacc0f1462000133578063d18af54d1462000155575b600080fd5b6200008d600480360381019062000087919062000801565b6200018b565b6040516200009c9190620008e7565b60405180910390f35b620000c36004803603810190620000bd91906200096d565b62000205565b604051620000d29190620008e7565b60405180910390f35b620000e5620002ba565b604051620000f4919062000a76565b60405180910390f35b6200011b600480360381019062000115919062000a9a565b620002e7565b6040516200012a9190620008e7565b60405180910390f35b6200013d6200038c565b6040516200014c919062000a76565b60405180910390f35b6200017360048036038101906200016d919062000b45565b620003b9565b604051620001829190620008e7565b60405180910390f35b60006200019a848484620004af565b9050600083511115620001c35760008060008551602087016000865af103620001c257600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358185604051620001f692919062000be7565b60405180910390a19392505050565b6000620002588585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505084620004af565b9050806040516020016200026d919062000c64565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b1919062000cde565b60405180910390fd5b606060405180602001620002ce90620005d0565b6020820181038252601f19601f82011660405250905090565b600082604051620002f890620005d0565b62000304919062000d02565b604051809103906000f08015801562000321573d6000803e3d6000fd5b5090506000825111156200034b5760008060008451602086016000865af1036200034a57600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e23581846040516200037e92919062000be7565b60405180910390a192915050565b606060405180602001620003a090620005de565b6020820181038252601f19601f82011660405250905090565b6000808383604051602001620003d192919062000d9b565b6040516020818303038152906040528051906020012060001c9050620003f98686836200018b565b9150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620004a6578273ffffffffffffffffffffffffffffffffffffffff16631e52b518838888886040518563ffffffff1660e01b815260040162000471949392919062000ddc565b600060405180830381600087803b1580156200048c57600080fd5b505af1158015620004a1573d6000803e3d6000fd5b505050505b50949350505050565b600080838051906020012083604051602001620004ce92919062000e5f565b604051602081830303815290604052805190602001209050600060405180602001620004fa90620005d0565b6020820181038252601f19601f820116604052508673ffffffffffffffffffffffffffffffffffffffff166040516020016200053892919062000ed1565b6040516020818303038152906040529050818151826020016000f59250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620005c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005be9062000f4d565b60405180910390fd5b50509392505050565b6102d18062000f7083390190565b60a9806200124183390190565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200062c82620005ff565b9050919050565b6200063e816200061f565b81146200064a57600080fd5b50565b6000813590506200065e8162000633565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006b9826200066e565b810181811067ffffffffffffffff82111715620006db57620006da6200067f565b5b80604052505050565b6000620006f0620005eb565b9050620006fe8282620006ae565b919050565b600067ffffffffffffffff8211156200072157620007206200067f565b5b6200072c826200066e565b9050602081019050919050565b82818337600083830152505050565b60006200075f620007598462000703565b620006e4565b9050828152602081018484840111156200077e576200077d62000669565b5b6200078b84828562000739565b509392505050565b600082601f830112620007ab57620007aa62000664565b5b8135620007bd84826020860162000748565b91505092915050565b6000819050919050565b620007db81620007c6565b8114620007e757600080fd5b50565b600081359050620007fb81620007d0565b92915050565b6000806000606084860312156200081d576200081c620005f5565b5b60006200082d868287016200064d565b935050602084013567ffffffffffffffff811115620008515762000850620005fa565b5b6200085f8682870162000793565b92505060406200087286828701620007ea565b9150509250925092565b6000819050919050565b6000620008a7620008a16200089b84620005ff565b6200087c565b620005ff565b9050919050565b6000620008bb8262000886565b9050919050565b6000620008cf82620008ae565b9050919050565b620008e181620008c2565b82525050565b6000602082019050620008fe6000830184620008d6565b92915050565b600080fd5b600080fd5b60008083601f84011262000927576200092662000664565b5b8235905067ffffffffffffffff81111562000947576200094662000904565b5b60208301915083600182028301111562000966576200096562000909565b5b9250929050565b600080600080606085870312156200098a5762000989620005f5565b5b60006200099a878288016200064d565b945050602085013567ffffffffffffffff811115620009be57620009bd620005fa565b5b620009cc878288016200090e565b93509350506040620009e187828801620007ea565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000a2957808201518184015260208101905062000a0c565b60008484015250505050565b600062000a4282620009ed565b62000a4e8185620009f8565b935062000a6081856020860162000a09565b62000a6b816200066e565b840191505092915050565b6000602082019050818103600083015262000a92818462000a35565b905092915050565b6000806040838503121562000ab45762000ab3620005f5565b5b600062000ac4858286016200064d565b925050602083013567ffffffffffffffff81111562000ae85762000ae7620005fa565b5b62000af68582860162000793565b9150509250929050565b600062000b0d826200061f565b9050919050565b62000b1f8162000b00565b811462000b2b57600080fd5b50565b60008135905062000b3f8162000b14565b92915050565b6000806000806080858703121562000b625762000b61620005f5565b5b600062000b72878288016200064d565b945050602085013567ffffffffffffffff81111562000b965762000b95620005fa565b5b62000ba48782880162000793565b935050604062000bb787828801620007ea565b925050606062000bca8782880162000b2e565b91505092959194509250565b62000be1816200061f565b82525050565b600060408201905062000bfe6000830185620008d6565b62000c0d602083018462000bd6565b9392505050565b60008160601b9050919050565b600062000c2e8262000c14565b9050919050565b600062000c428262000c21565b9050919050565b62000c5e62000c5882620008c2565b62000c35565b82525050565b600062000c72828462000c49565b60148201915081905092915050565b600081519050919050565b600082825260208201905092915050565b600062000caa8262000c81565b62000cb6818562000c8c565b935062000cc881856020860162000a09565b62000cd3816200066e565b840191505092915050565b6000602082019050818103600083015262000cfa818462000c9d565b905092915050565b600060208201905062000d19600083018462000bd6565b92915050565b6000819050919050565b62000d3e62000d3882620007c6565b62000d1f565b82525050565b600062000d518262000886565b9050919050565b600062000d658262000d44565b9050919050565b600062000d798262000c21565b9050919050565b62000d9562000d8f8262000d58565b62000d6c565b82525050565b600062000da9828562000d29565b60208201915062000dbb828462000d80565b6014820191508190509392505050565b62000dd681620007c6565b82525050565b600060808201905062000df36000830187620008d6565b62000e02602083018662000bd6565b818103604083015262000e16818562000a35565b905062000e27606083018462000dcb565b95945050505050565b6000819050919050565b6000819050919050565b62000e5962000e538262000e30565b62000e3a565b82525050565b600062000e6d828562000e44565b60208201915062000e7f828462000d29565b6020820191508190509392505050565b600081905092915050565b600062000ea782620009ed565b62000eb3818562000e8f565b935062000ec581856020860162000a09565b80840191505092915050565b600062000edf828562000e9a565b915062000eed828462000d29565b6020820191508190509392505050565b7f437265617465322063616c6c206661696c656400000000000000000000000000600082015250565b600062000f3560138362000c8c565b915062000f428262000efd565b602082019050919050565b6000602082019050818103600083015262000f688162000f26565b905091905056fe608060405234801561001057600080fd5b506040516102d13803806102d18339818101604052810190610032919061014a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610098906101fa565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061021a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610117826100ec565b9050919050565b6101278161010c565b811461013257600080fd5b50565b6000815190506101448161011e565b92915050565b6000602082840312156101605761015f6100e7565b5b600061016e84828501610135565b91505092915050565b600082825260208201905092915050565b7f496e76616c69642073696e676c65746f6e20616464726573732070726f76696460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006101e4602283610177565b91506101ef82610188565b604082019050919050565b60006020820190508181036000830152610213816101d7565b9050919050565b60a9806102286000396000f3fe608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003503604f578060005260206000f35b3660008037600080366000845af43d6000803e60008103606e573d6000fd5b3d6000f3fea264697066735822122049f30e93de35a93d49348cc74fd27bb93dd1eb95d254f2930a0271d73876690c64736f6c63430008110033608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003503604f578060005260206000f35b3660008037600080366000845af43d6000803e60008103606e573d6000fd5b3d6000f3fea264697066735822122049f30e93de35a93d49348cc74fd27bb93dd1eb95d254f2930a0271d73876690c64736f6c63430008110033a26469706673582212203eedafa11fbb6d90d6fdd6d24faf7d2dfe6346dba76077f30a18b423c089804d64736f6c63430008110033";
|
|
8
|
+
const FALLBACKHANDLER_CODE =
|
|
9
|
+
"0x608060405234801561001057600080fd5b50611574806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ce5760003560e01c80636ac247841161008c578063bc197c8111610066578063bc197c81146107bb578063bd61951d14610951578063f23a6e6114610a63578063ffa1ad7414610b63576100ce565b80636ac24784146105ea578063a3f4df7e146106d9578063b2494df31461075c576100ce565b806223de29146100d357806301ffc9a71461020b5780630a1028c41461026e578063150b7a021461033d5780631626ba7e1461043357806320c13b0b146104e9575b600080fd5b610209600480360360c08110156100e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561017057600080fd5b82018360208201111561018257600080fd5b803590602001918460018302840111640100000000831117156101a457600080fd5b9091929391929390803590602001906401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b9091929391929390505050610be6565b005b6102566004803603602081101561022157600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bf0565b60405180821515815260200191505060405180910390f35b6103276004803603602081101561028457600080fd5b81019080803590602001906401000000008111156102a157600080fd5b8201836020820111156102b357600080fd5b803590602001918460018302840111640100000000831117156102d557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d2a565b6040518082815260200191505060405180910390f35b6103fe6004803603608081101561035357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460018302840111640100000000831117156103ee57600080fd5b9091929391929390505050610d3d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6104b46004803603604081101561044957600080fd5b81019080803590602001909291908035906020019064010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460018302840111640100000000831117156104a457600080fd5b9091929391929390505050610d52565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6105b5600480360360408110156104ff57600080fd5b810190808035906020019064010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184600183028401116401000000008311171561055057600080fd5b90919293919293908035906020019064010000000081111561057157600080fd5b82018360208201111561058357600080fd5b803590602001918460018302840111640100000000831117156105a557600080fd5b9091929391929390505050610f0a565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6106c36004803603604081101561060057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061115b565b6040518082815260200191505060405180910390f35b6106e16112cd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610721578082015181840152602081019050610706565b50505050905090810190601f16801561074e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610764611306565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107a757808201518184015260208101905061078c565b505050509050019250505060405180910390f35b61091c600480360360a08110156107d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561082e57600080fd5b82018360208201111561084057600080fd5b8035906020019184602083028401116401000000008311171561086257600080fd5b90919293919293908035906020019064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460208302840111640100000000831117156108b757600080fd5b9091929391929390803590602001906401000000008111156108d857600080fd5b8201836020820111156108ea57600080fd5b8035906020019184600183028401116401000000008311171561090c57600080fd5b909192939192939050505061146d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6109e86004803603604081101561096757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109a457600080fd5b8201836020820111156109b657600080fd5b803590602001918460018302840111640100000000831117156109d857600080fd5b9091929391929390505050611485565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a28578082015181840152602081019050610a0d565b50505050905090810190601f168015610a555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b2e600480360360a0811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610aea57600080fd5b820183602082011115610afc57600080fd5b80359060200191846001830284011164010000000083111715610b1e57600080fd5b90919293919293905050506114ef565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610b6b611505565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bab578082015181840152602081019050610b90565b50505050905090810190601f168015610bd85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cbb57507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d2357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610d36338361115b565b9050919050565b600063150b7a0260e01b905095945050505050565b60008033905060008173ffffffffffffffffffffffffffffffffffffffff166320c13b0b876040516020018082815260200191505060405160208183030381529060405287876040518463ffffffff1660e01b8152600401808060200180602001838103835286818151815260200191508051906020019080838360005b83811015610deb578082015181840152602081019050610dd0565b50505050905090810190601f168015610e185780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6020811015610e8d57600080fd5b810190808051906020019092919050505090506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ef657600060e01b610eff565b631626ba7e60e01b5b925050509392505050565b6000803390506000610f608288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061115b565b905060008585905014156110755760008273ffffffffffffffffffffffffffffffffffffffff16635ae6bd37836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fc157600080fd5b505afa158015610fd5573d6000803e3d6000fd5b505050506040513d6020811015610feb57600080fd5b81019080805190602001909291905050501415611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f48617368206e6f7420617070726f76656400000000000000000000000000000081525060200191505060405180910390fd5b611147565b8173ffffffffffffffffffffffffffffffffffffffff1663934f3a1182898989896040518663ffffffff1660e01b81526004018086815260200180602001806020018381038352878782818152602001925080828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505097505050505050505060006040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050505b6320c13b0b60e01b92505050949350505050565b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b8573ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561120957600080fd5b505afa15801561121d573d6000803e3d6000fd5b505050506040513d602081101561123357600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040528051906020012091505092915050565b6040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6060600033905060008173ffffffffffffffffffffffffffffffffffffffff1663cc2f84526001600a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060006040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156113be57600080fd5b81019080805160405193929190846401000000008211156113de57600080fd5b838201915060208201858111156113f457600080fd5b825186602082028301116401000000008211171561141157600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561144857808201518184015260208101905061142d565b5050505090500160405260200180519060200190929190505050509050809250505090565b600063bc197c8160e01b905098975050505050505050565b60606040517fb4faba09000000000000000000000000000000000000000000000000000000008152600436036004808301376020600036836000335af15060203d036040519250808301604052806020843e6000516114e657825160208401fd5b50509392505050565b600063f23a6e6160e01b90509695505050505050565b6040518060400160405280600581526020017f312e302e300000000000000000000000000000000000000000000000000000008152508156fea2646970667358221220e0f71f757b92645080b9075b29df8bd87ddc241891bf8ac5b71ec5daba8b7df064736f6c63430007060033";
|
|
10
|
+
const SAFE_CODE =
|
|
11
|
+
"0x608060405234801561001057600080fd5b506001600481905550615cf880620000296000396000f3fe6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506126fc565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b810190808035906020019092919080359060200190929190505050612732565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b81019080803590602001909291905050506127b9565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d1565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612b63565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c9d565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612edc565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612f01565b005b348015610d3457600080fd5b50610d3d612f90565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613139565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061313f565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613161565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff16906020019092919050505061331f565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613447565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613639565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137d8565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613805565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b96565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c1a565b005b34801561148957600080fd5b5061149261428c565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614296565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061443e565b005b3480156116a457600080fd5b506116ad61449f565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061451d565b005b34801561174a57600080fd5b50611753614950565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614989565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612b63565b5b5050565b611bd2604182614a2c90919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614a66565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614a2c90919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614a9590919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614a9590919063ffffffff16565b614a9590919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b60007fb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e3386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183600181111561266b57fe5b8152602001828103825284818151815260200191508051906020019080838360005b838110156126a857808201518184015260208101905061268d565b50505050905090810190601f1680156126d55780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16126f285858585614ab4565b9050949350505050565b6000606061270c868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561275057600080fd5b506040519080825280601f01601f1916602001820160405280156127835781602001600182028036833780820191505090505b50905060005b838110156127ae57808501548060208302602085010152508080600101915050612789565b508091505092915050565b60076020528060005260406000206000915090505481565b6127d9614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128435750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612b6b614989565b600354811115612be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000606060055433600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed8d8d8d8d8d8d8d8d8d8d8d8c604051808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612d5057fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528e8e82818152602001925080828437600081840152601f19601f820116905080830192505050848103835286818151815260200191508051906020019080838360005b83811015612e0a578082015181840152602081019050612def565b50505050905090810190601f168015612e375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612e70578082015181840152602081019050612e55565b50505050905090810190601f168015612e9d5780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390a1612eca8d8d8d8d8d8d8d8d8d8d8d614c9a565b9150509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111612f7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f8a84848484611bbe565b50505050565b6060600060035467ffffffffffffffff81118015612fad57600080fd5b50604051908082528060200260200182016040528015612fdc5781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613130578083838151811061308757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050613046565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6131ac8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050896151d7565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146131ea576131e9846156d7565b5b6132388787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615706565b60008211156132525761325082600060018685615941565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a9050613376878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a615b47565b61337f57600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561340c5780820151818401526020810190506133f1565b50505050905090810190601f1680156134395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561346257600080fd5b506040519080825280602002602001820160405280156134915781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156135645750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561356f57508482105b1561362a578084838151811061358157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506134fa565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561373b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b60006137ed8c8c8c8c8c8c8c8c8c8c8c614296565b8051906020012090509b9a5050505050505050505050565b61380d614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156138775750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6138e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613b9e614989565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613c22614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c8c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613cc457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613d36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613ea15750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613f13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614013576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561432757fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6143b361449f565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614446614989565b61444f816156d7565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6144cd6125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614525614989565b8060016003540310156145a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561460a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61467c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461477c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1806004541461494b5761494a81612b63565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614a3f5760009050614a60565b6000828402905082848281614a5057fe5b0414614a5b57600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614aaa57600080fd5b8091505092915050565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614b7f5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b614bf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b614bfe858585855a615b47565b90508015614c4e573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2614c92565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000806000614cb48e8e8e8e8e8e8e8e8e8e600554614296565b905060056000815480929190600101919050555080805190602001209150614cdd828286612f01565b506000614ce8615b93565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ece578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115614d8b57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015614e5d578082015181840152602081019050614e42565b50505050905090810190601f168015614e8a5780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015614eb557600080fd5b505af1158015614ec9573d6000803e3d6000fd5b505050505b6101f4614ef56109c48b01603f60408d0281614ee657fe5b04615bc490919063ffffffff16565b015a1015614f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a9050614fd48f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d14614fc9578e614fcf565b6109c45a035b615b47565b9350614fe95a82615bde90919063ffffffff16565b90508380614ff8575060008a14155b80615004575060008814155b615076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808911156150905761508d828b8b8b8b615941565b90505b84156150da577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a161511a565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146151c6578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b1580156151ad57600080fd5b505af11580156151c1573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b60006004541461524f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81518111156152c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600181101561533d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b835181101561564357600084828151811061535d57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153d15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561540957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561544157508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6154b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146155b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809250508080600101915050615346565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461593d576158ca8260008360015a615b47565b61593c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461597e5782615980565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a98576159ea3a86106159c7573a6159c9565b855b6159dc888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615b3d565b615abd85615aaf888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b9150615aca848284615bfe565b615b3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600180811115615b5557fe5b836001811115615b6157fe5b1415615b7a576000808551602087018986f49050615b8a565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015615bd45781615bd6565b825b905092915050565b600082821115615bed57600080fd5b600082840390508091505092915050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615ca55760208114615cad5760009350615cb8565b819350615cb8565b600051158215171593505b505050939250505056fea26469706673582212209bc196ae7eeafc1fe2d02315d042834c88f91e1cce96de55cba8d6e87605e80e64736f6c63430007060033";
|
|
12
|
+
|
|
13
|
+
const { name } = network;
|
|
14
|
+
|
|
15
|
+
export const deploySafe = async (defaultAdmin = null) => {
|
|
16
|
+
prompt.start();
|
|
17
|
+
|
|
18
|
+
let release: { [key: string]: any } = {};
|
|
19
|
+
|
|
20
|
+
let [root] = await ethers.getSigners();
|
|
21
|
+
if (
|
|
22
|
+
root.address.toLowerCase() !=
|
|
23
|
+
"0x837231138FAf8c8da4dAbfb047Fa7C10482A87a2".toLowerCase()
|
|
24
|
+
)
|
|
25
|
+
throw new Error(
|
|
26
|
+
"not gnosis deployer 0x837231138FAf8c8da4dAbfb047Fa7C10482A87a2"
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const { txType } = await prompt.get(["txType"]);
|
|
30
|
+
const type2 =
|
|
31
|
+
txType === "1"
|
|
32
|
+
? {
|
|
33
|
+
maxFeePerGas: 12e9,
|
|
34
|
+
maxPriorityFeePerGas: 2e9
|
|
35
|
+
}
|
|
36
|
+
: {};
|
|
37
|
+
|
|
38
|
+
console.log("got signers:", {
|
|
39
|
+
network,
|
|
40
|
+
root: root.address,
|
|
41
|
+
balance: await ethers.provider
|
|
42
|
+
.getBalance(root.address)
|
|
43
|
+
.then(_ => _.toString()),
|
|
44
|
+
type2
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// //1st dummy tx
|
|
48
|
+
// await (
|
|
49
|
+
// await root.sendTransaction({ to: root.address, value: 0, ...type2 })
|
|
50
|
+
// ).wait();
|
|
51
|
+
|
|
52
|
+
// const proxytx = await (
|
|
53
|
+
// await root.sendTransaction({
|
|
54
|
+
// value: 0,
|
|
55
|
+
// gasLimit: 1500000,
|
|
56
|
+
// data: PROXYFACTORY_CODE,
|
|
57
|
+
// ...type2
|
|
58
|
+
// })
|
|
59
|
+
// ).wait();
|
|
60
|
+
|
|
61
|
+
// console.log({ proxytx });
|
|
62
|
+
|
|
63
|
+
//2nd dummy tx
|
|
64
|
+
// await (
|
|
65
|
+
// await root.sendTransaction({ to: root.address, value: 0, ...type2 })
|
|
66
|
+
// ).wait();
|
|
67
|
+
|
|
68
|
+
const fallbacktx = await (
|
|
69
|
+
await root.sendTransaction({
|
|
70
|
+
value: 0,
|
|
71
|
+
gasLimit: 1600000,
|
|
72
|
+
data: FALLBACKHANDLER_CODE,
|
|
73
|
+
...type2
|
|
74
|
+
})
|
|
75
|
+
).wait();
|
|
76
|
+
|
|
77
|
+
console.log({ fallbacktx });
|
|
78
|
+
|
|
79
|
+
const safetx = await (
|
|
80
|
+
await root.sendTransaction({
|
|
81
|
+
value: 0,
|
|
82
|
+
gasLimit: 6800000,
|
|
83
|
+
data: SAFE_CODE,
|
|
84
|
+
...type2
|
|
85
|
+
})
|
|
86
|
+
).wait();
|
|
87
|
+
|
|
88
|
+
console.log({ safetx });
|
|
89
|
+
|
|
90
|
+
const safecreatetx = await (
|
|
91
|
+
await root.sendTransaction({
|
|
92
|
+
to: "0xD4e35689651CE5c57862FFC7c019eF3b5dd52c6d",
|
|
93
|
+
value: 0,
|
|
94
|
+
gasLimit: 330000,
|
|
95
|
+
data: "0x1688f0b90000000000000000000000003d2cb31f65eb89fe6cbc9bbfc493f4b5ad4a8a880000000000000000000000000000000000000000000000000000000000000060728428a4e10d3a2c8ea8e4ac37fb9b3cdd5ced14cfb797284d9e3dcd877f8d510000000000000000000000000000000000000000000000000000000000000164b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f2bd1ed66e931625b96a1e77ab7aea88d68f390e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000066582d24fead72555adac681cc621cacbb208324000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
96
|
+
...type2
|
|
97
|
+
})
|
|
98
|
+
).wait();
|
|
99
|
+
|
|
100
|
+
console.log(safecreatetx);
|
|
101
|
+
release = {
|
|
102
|
+
GuardiansSafe: "0x84c10b45fe51bfb4f86c19a47fdbc187d4572fb8"
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
await releaser(release, network.name, "deployment", false);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export const main = async (networkName = name) => {
|
|
109
|
+
await deploySafe().catch(console.log);
|
|
110
|
+
};
|
|
111
|
+
main();
|
package/yarn.lock
CHANGED
|
@@ -1035,6 +1035,11 @@
|
|
|
1035
1035
|
"@babel/helper-validator-identifier" "^7.14.8"
|
|
1036
1036
|
to-fast-properties "^2.0.0"
|
|
1037
1037
|
|
|
1038
|
+
"@colors/colors@1.5.0":
|
|
1039
|
+
version "1.5.0"
|
|
1040
|
+
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
|
|
1041
|
+
integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
|
|
1042
|
+
|
|
1038
1043
|
"@consento/sync-randombytes@^1.0.4", "@consento/sync-randombytes@^1.0.5":
|
|
1039
1044
|
version "1.0.5"
|
|
1040
1045
|
resolved "https://registry.yarnpkg.com/@consento/sync-randombytes/-/sync-randombytes-1.0.5.tgz#5be6bc58c6a6fa6e09f04cc684d037e29e6c28d5"
|
|
@@ -4270,6 +4275,11 @@ async@2.6.2:
|
|
|
4270
4275
|
dependencies:
|
|
4271
4276
|
lodash "^4.17.11"
|
|
4272
4277
|
|
|
4278
|
+
async@3.2.3:
|
|
4279
|
+
version "3.2.3"
|
|
4280
|
+
resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9"
|
|
4281
|
+
integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==
|
|
4282
|
+
|
|
4273
4283
|
async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1:
|
|
4274
4284
|
version "2.6.3"
|
|
4275
4285
|
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
|
|
@@ -4277,6 +4287,11 @@ async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1:
|
|
|
4277
4287
|
dependencies:
|
|
4278
4288
|
lodash "^4.17.14"
|
|
4279
4289
|
|
|
4290
|
+
async@^3.2.3:
|
|
4291
|
+
version "3.2.4"
|
|
4292
|
+
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
|
|
4293
|
+
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
|
|
4294
|
+
|
|
4280
4295
|
asynckit@^0.4.0:
|
|
4281
4296
|
version "0.4.0"
|
|
4282
4297
|
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
|
@@ -6072,6 +6087,11 @@ colorette@^1.2.2:
|
|
|
6072
6087
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
|
|
6073
6088
|
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
|
|
6074
6089
|
|
|
6090
|
+
colors@1.0.x:
|
|
6091
|
+
version "1.0.3"
|
|
6092
|
+
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
|
|
6093
|
+
integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==
|
|
6094
|
+
|
|
6075
6095
|
colors@1.4.0, colors@^1.1.2:
|
|
6076
6096
|
version "1.4.0"
|
|
6077
6097
|
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
|
|
@@ -6465,6 +6485,11 @@ cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0":
|
|
|
6465
6485
|
dependencies:
|
|
6466
6486
|
cssom "0.3.x"
|
|
6467
6487
|
|
|
6488
|
+
cycle@1.0.x:
|
|
6489
|
+
version "1.0.3"
|
|
6490
|
+
resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
|
|
6491
|
+
integrity sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==
|
|
6492
|
+
|
|
6468
6493
|
d@1, d@^1.0.1:
|
|
6469
6494
|
version "1.0.1"
|
|
6470
6495
|
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
|
|
@@ -8379,6 +8404,11 @@ extsprintf@^1.2.0:
|
|
|
8379
8404
|
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
|
8380
8405
|
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
|
|
8381
8406
|
|
|
8407
|
+
eyes@0.1.x:
|
|
8408
|
+
version "0.1.8"
|
|
8409
|
+
resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
|
|
8410
|
+
integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==
|
|
8411
|
+
|
|
8382
8412
|
fake-merkle-patricia-tree@^1.0.1:
|
|
8383
8413
|
version "1.0.1"
|
|
8384
8414
|
resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3"
|
|
@@ -10692,7 +10722,7 @@ isomorphic-ws@4.0.1, isomorphic-ws@^4.0.1:
|
|
|
10692
10722
|
resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc"
|
|
10693
10723
|
integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==
|
|
10694
10724
|
|
|
10695
|
-
isstream@~0.1.2:
|
|
10725
|
+
isstream@0.1.x, isstream@~0.1.2:
|
|
10696
10726
|
version "0.1.2"
|
|
10697
10727
|
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
|
10698
10728
|
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
|
@@ -12502,6 +12532,11 @@ mute-stream@0.0.7:
|
|
|
12502
12532
|
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
|
|
12503
12533
|
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
|
|
12504
12534
|
|
|
12535
|
+
mute-stream@~0.0.4:
|
|
12536
|
+
version "0.0.8"
|
|
12537
|
+
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
|
12538
|
+
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
|
12539
|
+
|
|
12505
12540
|
nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.14.2:
|
|
12506
12541
|
version "2.14.2"
|
|
12507
12542
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
|
|
@@ -14001,6 +14036,17 @@ promise@^8.0.0:
|
|
|
14001
14036
|
dependencies:
|
|
14002
14037
|
asap "~2.0.6"
|
|
14003
14038
|
|
|
14039
|
+
prompt@^1.3.0:
|
|
14040
|
+
version "1.3.0"
|
|
14041
|
+
resolved "https://registry.yarnpkg.com/prompt/-/prompt-1.3.0.tgz#b1f6d47cb1b6beed4f0660b470f5d3ec157ad7ce"
|
|
14042
|
+
integrity sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==
|
|
14043
|
+
dependencies:
|
|
14044
|
+
"@colors/colors" "1.5.0"
|
|
14045
|
+
async "3.2.3"
|
|
14046
|
+
read "1.0.x"
|
|
14047
|
+
revalidator "0.1.x"
|
|
14048
|
+
winston "2.x"
|
|
14049
|
+
|
|
14004
14050
|
prop-types@^15.7.2:
|
|
14005
14051
|
version "15.7.2"
|
|
14006
14052
|
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
|
@@ -14296,6 +14342,13 @@ read-pkg@^1.0.0:
|
|
|
14296
14342
|
normalize-package-data "^2.3.2"
|
|
14297
14343
|
path-type "^1.0.0"
|
|
14298
14344
|
|
|
14345
|
+
read@1.0.x:
|
|
14346
|
+
version "1.0.7"
|
|
14347
|
+
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
|
|
14348
|
+
integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==
|
|
14349
|
+
dependencies:
|
|
14350
|
+
mute-stream "~0.0.4"
|
|
14351
|
+
|
|
14299
14352
|
readable-stream@1.0.33:
|
|
14300
14353
|
version "1.0.33"
|
|
14301
14354
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.33.tgz#3a360dd66c1b1d7fd4705389860eda1d0f61126c"
|
|
@@ -14839,6 +14892,11 @@ reusify@^1.0.4:
|
|
|
14839
14892
|
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
|
|
14840
14893
|
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
|
14841
14894
|
|
|
14895
|
+
revalidator@0.1.x:
|
|
14896
|
+
version "0.1.8"
|
|
14897
|
+
resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b"
|
|
14898
|
+
integrity sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==
|
|
14899
|
+
|
|
14842
14900
|
rimraf@2.6.3:
|
|
14843
14901
|
version "2.6.3"
|
|
14844
14902
|
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
|
|
@@ -15670,6 +15728,11 @@ stable@^0.1.8:
|
|
|
15670
15728
|
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
|
|
15671
15729
|
integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
|
|
15672
15730
|
|
|
15731
|
+
stack-trace@0.0.x:
|
|
15732
|
+
version "0.0.10"
|
|
15733
|
+
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
|
|
15734
|
+
integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==
|
|
15735
|
+
|
|
15673
15736
|
stacktrace-parser@^0.1.10:
|
|
15674
15737
|
version "0.1.10"
|
|
15675
15738
|
resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a"
|
|
@@ -18123,6 +18186,18 @@ window-size@^0.2.0:
|
|
|
18123
18186
|
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
|
|
18124
18187
|
integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=
|
|
18125
18188
|
|
|
18189
|
+
winston@2.x:
|
|
18190
|
+
version "2.4.6"
|
|
18191
|
+
resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.6.tgz#da616f332928f70aac482f59b43d62228f29e478"
|
|
18192
|
+
integrity sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==
|
|
18193
|
+
dependencies:
|
|
18194
|
+
async "^3.2.3"
|
|
18195
|
+
colors "1.0.x"
|
|
18196
|
+
cycle "1.0.x"
|
|
18197
|
+
eyes "0.1.x"
|
|
18198
|
+
isstream "0.1.x"
|
|
18199
|
+
stack-trace "0.0.x"
|
|
18200
|
+
|
|
18126
18201
|
word-wrap@~1.2.3:
|
|
18127
18202
|
version "1.2.3"
|
|
18128
18203
|
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { range, chunk, uniq } from "lodash";
|
|
2
|
-
import { ethers as Ethers } from "hardhat";
|
|
3
|
-
import fetch from "node-fetch";
|
|
4
|
-
|
|
5
|
-
const ONE_DAY = 24 * 60 * 60;
|
|
6
|
-
|
|
7
|
-
const main = async () => {
|
|
8
|
-
const signer = (await Ethers.getSigners())[0];
|
|
9
|
-
console.log("signer:", signer.address);
|
|
10
|
-
const ubiScheme = new Ethers.Contract(
|
|
11
|
-
"0xD7aC544F8A570C4d8764c3AAbCF6870CBD960D0D",
|
|
12
|
-
["function fishMulti(address[] tofish)"]
|
|
13
|
-
).connect(signer);
|
|
14
|
-
const twoWeeksAgo = parseInt((Date.now() / 1000).toFixed(0)); //
|
|
15
|
-
//parseInt((Date.now() / 1000).toFixed(0)) - 24 * 60 * 60 * 14;
|
|
16
|
-
|
|
17
|
-
const daysAgo: number[] = range(0, 180, 1);
|
|
18
|
-
let curDay = twoWeeksAgo;
|
|
19
|
-
const allActive = [];
|
|
20
|
-
for (let day of daysAgo) {
|
|
21
|
-
const query = `
|
|
22
|
-
{
|
|
23
|
-
walletStats(first:1000, where: { lastClaimed_lte: ${curDay},lastClaimed_gt: ${
|
|
24
|
-
curDay - ONE_DAY
|
|
25
|
-
} isActiveUser: true }) {
|
|
26
|
-
id
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
`;
|
|
30
|
-
|
|
31
|
-
console.log(
|
|
32
|
-
"fetching inactive users since:",
|
|
33
|
-
{ curDay, day },
|
|
34
|
-
JSON.stringify({ query })
|
|
35
|
-
);
|
|
36
|
-
const {
|
|
37
|
-
data: { walletStats }
|
|
38
|
-
} = await fetch(
|
|
39
|
-
"https://api.thegraph.com/subgraphs/name/gooddollar/gooddollarfuse",
|
|
40
|
-
{
|
|
41
|
-
method: "post",
|
|
42
|
-
body: JSON.stringify({ query }),
|
|
43
|
-
headers: { "Content-Type": "application/json" }
|
|
44
|
-
}
|
|
45
|
-
).then(_ => _.json());
|
|
46
|
-
|
|
47
|
-
console.log("got inactive wallets:", walletStats.length);
|
|
48
|
-
if (walletStats) {
|
|
49
|
-
const accounts = walletStats.map(_ => _.id);
|
|
50
|
-
allActive.push(...accounts);
|
|
51
|
-
}
|
|
52
|
-
// for (let tofish of chunk(accounts, 50)) {
|
|
53
|
-
// const tx = await ubiScheme.fishMulti(tofish, { gasLimit: 2000000 });
|
|
54
|
-
// console.log("fishing tx:", tx, tofish);
|
|
55
|
-
// const res = await tx.wait();
|
|
56
|
-
// console.log("fishing tx result:", res);
|
|
57
|
-
// }
|
|
58
|
-
|
|
59
|
-
curDay = curDay - ONE_DAY;
|
|
60
|
-
}
|
|
61
|
-
const unique = uniq(allActive);
|
|
62
|
-
console.log("active claimers:", unique.length);
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
main();
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { range, sortBy } from "lodash";
|
|
2
|
-
import fetch from "node-fetch";
|
|
3
|
-
import PromisePool from "async-promise-pool";
|
|
4
|
-
import fs from "fs";
|
|
5
|
-
import { ethers } from "hardhat";
|
|
6
|
-
|
|
7
|
-
const main = async () => {
|
|
8
|
-
let result = [];
|
|
9
|
-
let balances = {};
|
|
10
|
-
let curPage = 1;
|
|
11
|
-
let maxResult;
|
|
12
|
-
// do {
|
|
13
|
-
// const pages = range(curPage, curPage + 5, 1);
|
|
14
|
-
// curPage += 5;
|
|
15
|
-
// const ps = pages.map(p =>
|
|
16
|
-
// fetch(
|
|
17
|
-
// `https://explorer.fuse.io/api?module=token&action=getTokenHolders&contractaddress=0x495d133B938596C9984d462F007B676bDc57eCEC&page=${p}&offset=10000`
|
|
18
|
-
// )
|
|
19
|
-
// .then(_ => _.json())
|
|
20
|
-
// .then(_ => _.result)
|
|
21
|
-
// );
|
|
22
|
-
// const results = await Promise.all(ps);
|
|
23
|
-
// result = result.concat(...results);
|
|
24
|
-
// maxResult = maxBy(results, "length");
|
|
25
|
-
// console.log(maxResult.length, result.length);
|
|
26
|
-
// } while (maxResult.length === 10000);
|
|
27
|
-
// result.forEach(
|
|
28
|
-
// r => (balances[r.address.toLowerCase()] = { balance: r.value, lastSeen: 0 })
|
|
29
|
-
// );
|
|
30
|
-
// fs.writeFileSync("activeWalletsBalances.json", JSON.stringify(balances));
|
|
31
|
-
|
|
32
|
-
balances = JSON.parse(
|
|
33
|
-
fs.readFileSync("activeWalletsBalances.json").toString()
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
const EPOCH = 60 * 60 * 6;
|
|
37
|
-
const pool = new PromisePool({ concurrency: 30 });
|
|
38
|
-
const lastUsed = {};
|
|
39
|
-
const epochs = range(1596045730, (Date.now() / 1000).toFixed(0), EPOCH);
|
|
40
|
-
|
|
41
|
-
const graphQuery = async (start, skip) => {
|
|
42
|
-
const query = `{
|
|
43
|
-
walletStats(first: 1000 skip:${skip} where: { dateAppeared_gte: ${start} dateAppeared_lt:${
|
|
44
|
-
start + EPOCH
|
|
45
|
-
} }) {
|
|
46
|
-
id
|
|
47
|
-
dateAppeared
|
|
48
|
-
balance
|
|
49
|
-
lastTransactionTo
|
|
50
|
-
lastTransactionFrom
|
|
51
|
-
lastClaimed
|
|
52
|
-
}
|
|
53
|
-
}`;
|
|
54
|
-
// console.log({ query });
|
|
55
|
-
try {
|
|
56
|
-
const { data = {}, errors } = await fetch(
|
|
57
|
-
"https://api.thegraph.com/subgraphs/name/gooddollar/gooddollarfuse",
|
|
58
|
-
{
|
|
59
|
-
method: "POST",
|
|
60
|
-
headers: {
|
|
61
|
-
"Content-Type": "application/json"
|
|
62
|
-
},
|
|
63
|
-
body: JSON.stringify({ query })
|
|
64
|
-
}
|
|
65
|
-
).then(_ => _.json());
|
|
66
|
-
errors && console.log({ errors });
|
|
67
|
-
if (data?.walletStats?.length === 1000) {
|
|
68
|
-
return data.walletStats.concat(await graphQuery(start, skip + 1000));
|
|
69
|
-
}
|
|
70
|
-
return data.walletStats || [];
|
|
71
|
-
} catch (error) {
|
|
72
|
-
console.log({ query, error });
|
|
73
|
-
return [];
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
epochs.forEach(e => {
|
|
77
|
-
pool.add(async () => {
|
|
78
|
-
const walletStats = await graphQuery(e, 0);
|
|
79
|
-
walletStats.forEach(w => {
|
|
80
|
-
balances[w.id.toLowerCase()] = {
|
|
81
|
-
lastSeen: Math.max(
|
|
82
|
-
Number(w.lastClaimed),
|
|
83
|
-
Number(w.lastTransactionFrom),
|
|
84
|
-
Number(w.lastTransactionTo),
|
|
85
|
-
Number(w.dateAppeared)
|
|
86
|
-
),
|
|
87
|
-
balance: balances[w.id.toLowerCase()]?.balance || w.balance
|
|
88
|
-
};
|
|
89
|
-
});
|
|
90
|
-
console.log({ curDate: e, records: walletStats.length });
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
await pool.all();
|
|
95
|
-
fs.writeFileSync("activeWalletsLastUsed.json", JSON.stringify(balances));
|
|
96
|
-
// console.log({ lastUsed });
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const etl = async () => {
|
|
100
|
-
/** Convert a 2D array into a CSV string
|
|
101
|
-
*/
|
|
102
|
-
function arrayToCsv(data) {
|
|
103
|
-
return data
|
|
104
|
-
.map(
|
|
105
|
-
row =>
|
|
106
|
-
row
|
|
107
|
-
.map(String) // convert every value to String
|
|
108
|
-
.map(v => v.replaceAll('"', '""')) // escape double colons
|
|
109
|
-
.map(v => `"${v}"`) // quote it
|
|
110
|
-
.join(",") // comma-separated
|
|
111
|
-
)
|
|
112
|
-
.join("\r\n"); // rows starting on new lines
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const balances = JSON.parse(
|
|
116
|
-
fs.readFileSync("activeWalletsLastUsed.json").toString()
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
let result = [];
|
|
120
|
-
|
|
121
|
-
for (let addr in balances) {
|
|
122
|
-
const r = balances[addr];
|
|
123
|
-
if (!r.balance) {
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
result.push([addr, r.balance / 100, r.lastSeen, false]);
|
|
127
|
-
}
|
|
128
|
-
const top100 = result.slice(0, 100);
|
|
129
|
-
const pool = new PromisePool({ concurrency: 30 });
|
|
130
|
-
const provider = new ethers.providers.JsonRpcBatchProvider(
|
|
131
|
-
"https://rpc.fuse.io"
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
for (let idx in top100) {
|
|
135
|
-
pool.add(async () => {
|
|
136
|
-
const record = top100[idx];
|
|
137
|
-
let isContract =
|
|
138
|
-
(await provider.getCode(record[0]).catch(e => "0x")) !== "0x";
|
|
139
|
-
record[3] = isContract;
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
await pool.all();
|
|
143
|
-
console.log({ top100 });
|
|
144
|
-
fs.writeFileSync(
|
|
145
|
-
"activeWalletsLastUsed.csv",
|
|
146
|
-
arrayToCsv(sortBy(result, _ => -Number(_[1])))
|
|
147
|
-
);
|
|
148
|
-
};
|
|
149
|
-
// main().catch(e => console.log(e));
|
|
150
|
-
etl();
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { countBy, chunk, difference, flatten, sortBy } from "lodash";
|
|
2
|
-
import fs from "fs";
|
|
3
|
-
import fetch from "node-fetch";
|
|
4
|
-
import { network, ethers, upgrades } from "hardhat";
|
|
5
|
-
import { Contract, Provider, setMulticallAddress } from "ethers-multicall";
|
|
6
|
-
import Identity from "../../artifacts/contracts/Interfaces.sol/IIdentity.json";
|
|
7
|
-
|
|
8
|
-
setMulticallAddress(122, "0x3CE6158b7278Bf6792e014FA7B4f3c6c46fe9410");
|
|
9
|
-
const CLAIM_START_BLOCK = 17896430;
|
|
10
|
-
|
|
11
|
-
const fuseProvider = new ethers.providers.JsonRpcBatchProvider(
|
|
12
|
-
"https://explorer-node.fuse.io/"
|
|
13
|
-
// "https://rpc.fuse.io"
|
|
14
|
-
);
|
|
15
|
-
const ethcallProvider = new Provider(fuseProvider, 122);
|
|
16
|
-
|
|
17
|
-
const GD_FUSE = "0x495d133b938596c9984d462f007b676bdc57ecec";
|
|
18
|
-
const IDENTITY_FUSE = "0xFa8d865A962ca8456dF331D78806152d3aC5B84F";
|
|
19
|
-
|
|
20
|
-
let gd = new ethers.Contract(
|
|
21
|
-
GD_FUSE,
|
|
22
|
-
[
|
|
23
|
-
"event Transfer(address indexed from, address indexed to, uint amount)",
|
|
24
|
-
"function balanceOf(address) view returns(uint256)"
|
|
25
|
-
],
|
|
26
|
-
fuseProvider
|
|
27
|
-
);
|
|
28
|
-
const gdMulti = new Contract(GD_FUSE, [
|
|
29
|
-
"event Transfer(address indexed from, address indexed to, uint amount)",
|
|
30
|
-
"function balanceOf(address) view returns(uint256)"
|
|
31
|
-
]);
|
|
32
|
-
|
|
33
|
-
const hasBalanceToRefund = async wallets => {
|
|
34
|
-
const chunks = chunk(wallets, 1000);
|
|
35
|
-
let balances = {};
|
|
36
|
-
for (let batch of chunks) {
|
|
37
|
-
const calls = batch.map(a => gdMulti.balanceOf(a));
|
|
38
|
-
const result = await ethcallProvider.all(calls);
|
|
39
|
-
console.log("batch:", batch.length, calls.length, result.length);
|
|
40
|
-
batch.forEach((d, i) => (balances[d] = result[i]));
|
|
41
|
-
}
|
|
42
|
-
console.log("got balances for:", Object.entries(balances).length);
|
|
43
|
-
const hasBalance = countBy(balances, v => v >= 9622260);
|
|
44
|
-
const noBalance = Object.entries(balances).filter(([k, v]) => v < 9622260);
|
|
45
|
-
console.log({ hasBalance });
|
|
46
|
-
return noBalance.map(_ => _[0]);
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const hasRefunded = async wallets => {
|
|
50
|
-
const curBlock = (await gd.provider.getBlockNumber()) - 1;
|
|
51
|
-
console.log({ curBlock });
|
|
52
|
-
let toBlock = CLAIM_START_BLOCK + 50000;
|
|
53
|
-
let refunded = [];
|
|
54
|
-
let startBlock = CLAIM_START_BLOCK;
|
|
55
|
-
while (startBlock <= curBlock) {
|
|
56
|
-
const events = await gd.queryFilter(
|
|
57
|
-
gd.filters.Transfer(
|
|
58
|
-
undefined,
|
|
59
|
-
"0xd253A5203817225e9768C05E5996d642fb96bA86"
|
|
60
|
-
),
|
|
61
|
-
startBlock,
|
|
62
|
-
toBlock
|
|
63
|
-
);
|
|
64
|
-
const accounts = events
|
|
65
|
-
.filter(e => e.args.amount >= 9622260)
|
|
66
|
-
.map(_ => _.args.from.toLowerCase());
|
|
67
|
-
refunded.push(...accounts);
|
|
68
|
-
console.log("has refunded:", {
|
|
69
|
-
startBlock,
|
|
70
|
-
toBlock,
|
|
71
|
-
accounts: accounts.length
|
|
72
|
-
});
|
|
73
|
-
toBlock = Math.min(curBlock, toBlock + 50000);
|
|
74
|
-
startBlock += 50000;
|
|
75
|
-
}
|
|
76
|
-
return refunded;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
const whereIsTheMoney = async noBalance => {
|
|
80
|
-
let targets = [];
|
|
81
|
-
for (let batch of chunk(noBalance, 100)) {
|
|
82
|
-
const tos = await Promise.all(
|
|
83
|
-
batch.map(async a => {
|
|
84
|
-
const e = await gd.queryFilter(
|
|
85
|
-
gd.filters.Transfer(a),
|
|
86
|
-
CLAIM_START_BLOCK
|
|
87
|
-
);
|
|
88
|
-
const tos = e.filter(_ => _.args.amount > 1000000).map(_ => _.args.to);
|
|
89
|
-
return tos;
|
|
90
|
-
})
|
|
91
|
-
);
|
|
92
|
-
targets.push(...flatten(tos));
|
|
93
|
-
}
|
|
94
|
-
const targetCounter = countBy(targets, _ => _);
|
|
95
|
-
console.log(
|
|
96
|
-
"transfer targets:",
|
|
97
|
-
sortBy(Object.entries(targetCounter), "1").reverse()
|
|
98
|
-
);
|
|
99
|
-
};
|
|
100
|
-
const main = async () => {
|
|
101
|
-
const wallets = JSON.parse(fs.readFileSync("torefund.json").toString()).map(
|
|
102
|
-
_ => _.toLowerCase()
|
|
103
|
-
);
|
|
104
|
-
console.log("Total Claimed:", wallets.length);
|
|
105
|
-
const refunded = await hasRefunded(wallets);
|
|
106
|
-
const notRefunded = difference(wallets, refunded);
|
|
107
|
-
console.log(
|
|
108
|
-
"refunded:",
|
|
109
|
-
refunded.length,
|
|
110
|
-
"not refunded:",
|
|
111
|
-
notRefunded.length
|
|
112
|
-
);
|
|
113
|
-
|
|
114
|
-
const noBalanceToRefund = await hasBalanceToRefund(notRefunded);
|
|
115
|
-
await whereIsTheMoney(noBalanceToRefund);
|
|
116
|
-
};
|
|
117
|
-
main().catch(e => console.log(e));
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { range, sortBy, toPairs } from "lodash";
|
|
2
|
-
import fetch from "node-fetch";
|
|
3
|
-
import PromisePool from "async-promise-pool";
|
|
4
|
-
import fs from "fs";
|
|
5
|
-
import { ethers } from "hardhat";
|
|
6
|
-
import { start } from "repl";
|
|
7
|
-
import { JsonRpcProvider } from "@ethersproject/providers";
|
|
8
|
-
import { off } from "process";
|
|
9
|
-
|
|
10
|
-
function arrayToCsv(data) {
|
|
11
|
-
return data
|
|
12
|
-
.map(
|
|
13
|
-
row =>
|
|
14
|
-
row
|
|
15
|
-
.map(String) // convert every value to String
|
|
16
|
-
.map(v => v.replaceAll('"', '""')) // escape double colons
|
|
17
|
-
.map(v => `"${v}"`) // quote it
|
|
18
|
-
.join(",") // comma-separated
|
|
19
|
-
)
|
|
20
|
-
.join("\r\n"); // rows starting on new lines
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const main = async () => {
|
|
24
|
-
const archive = new JsonRpcProvider("https://explorer-node.fuse.io");
|
|
25
|
-
const blockStep = 10000;
|
|
26
|
-
const pool = new PromisePool({ concurrency: 10 });
|
|
27
|
-
|
|
28
|
-
let faucet = await ethers.getContractAt(
|
|
29
|
-
["event WalletTopped(address indexed user, uint256 amount)"],
|
|
30
|
-
"0x01ab5966C1d742Ae0CFF7f14cC0F4D85156e83d9"
|
|
31
|
-
);
|
|
32
|
-
const endBlock = Number(await ethers.provider.getBlockNumber());
|
|
33
|
-
const daysBack = 30;
|
|
34
|
-
const dayBlocks = 12 * 60 * 24;
|
|
35
|
-
const startBlock = endBlock - dayBlocks * daysBack;
|
|
36
|
-
const days = range(startBlock, endBlock, dayBlocks);
|
|
37
|
-
const dailyBalance = [];
|
|
38
|
-
for (let day of days) {
|
|
39
|
-
dailyBalance.push(
|
|
40
|
-
(
|
|
41
|
-
await archive.getBalance(
|
|
42
|
-
"0x01ab5966C1d742Ae0CFF7f14cC0F4D85156e83d9",
|
|
43
|
-
day
|
|
44
|
-
)
|
|
45
|
-
)
|
|
46
|
-
.div(1e10)
|
|
47
|
-
.toNumber() / 1e8
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
let curBlock = startBlock;
|
|
51
|
-
|
|
52
|
-
const toppingsByAddress = {};
|
|
53
|
-
const toppingsByAmount = {};
|
|
54
|
-
let totalToppings = 0;
|
|
55
|
-
let totalAmount = 0;
|
|
56
|
-
console.log({ dailyBalance });
|
|
57
|
-
console.log({ startBlock, endBlock });
|
|
58
|
-
while (curBlock <= endBlock) {
|
|
59
|
-
const fromBlock = curBlock;
|
|
60
|
-
const toBlock = Math.min(fromBlock + blockStep, endBlock);
|
|
61
|
-
pool.add(async () => {
|
|
62
|
-
const f = faucet.filters.WalletTopped();
|
|
63
|
-
const events = await faucet
|
|
64
|
-
.queryFilter(f, fromBlock, toBlock)
|
|
65
|
-
.catch(e => {
|
|
66
|
-
console.log("failed", { fromBlock, toBlock });
|
|
67
|
-
return [];
|
|
68
|
-
});
|
|
69
|
-
events.forEach(e => {
|
|
70
|
-
totalToppings += 1;
|
|
71
|
-
totalAmount += Number(e.args.amount);
|
|
72
|
-
toppingsByAddress[e.args.user] =
|
|
73
|
-
(toppingsByAddress[e.args.user] || 0) + 1;
|
|
74
|
-
toppingsByAmount[e.args.amount] =
|
|
75
|
-
(toppingsByAmount[e.args.amount] || 0) + 1;
|
|
76
|
-
});
|
|
77
|
-
console.log("fetched events", {
|
|
78
|
-
fromBlock,
|
|
79
|
-
toBlock,
|
|
80
|
-
events: events.length
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
curBlock += blockStep;
|
|
84
|
-
}
|
|
85
|
-
await pool.all();
|
|
86
|
-
|
|
87
|
-
const topToppers = sortBy(toPairs(toppingsByAddress), "1").reverse();
|
|
88
|
-
const topAmounts = sortBy(toPairs(toppingsByAmount), "1").reverse();
|
|
89
|
-
const totalWallets = topToppers.length;
|
|
90
|
-
|
|
91
|
-
const avgToppingsPerWallet = totalToppings / totalWallets;
|
|
92
|
-
const avgToppingAmount = totalAmount / totalToppings;
|
|
93
|
-
|
|
94
|
-
fs.writeFileSync("topToppers.csv", arrayToCsv(topToppers));
|
|
95
|
-
fs.writeFileSync("topAmounts.csv", arrayToCsv(topAmounts));
|
|
96
|
-
console.log({
|
|
97
|
-
totalAmount,
|
|
98
|
-
totalToppings,
|
|
99
|
-
avgToppingsPerWallet,
|
|
100
|
-
avgToppingAmount
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
main().catch(e => console.log(e));
|