erc20-demurrage-token

ERC20 token with redistributed continual demurrage
Log | Files | Refs | README

commit 4ec1ea8b45ee8dbd1799f4ef79c500473d0a9da0
parent f9cd542e7416a1c77e58fff5a2e1273df1c4d949
Author: lash <dev@holbrook.no>
Date:   Sun, 19 Feb 2023 10:41:54 +0000

rename to decaylevel

Diffstat:
Mpython/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin | 4++--
Mpython/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json | 2+-
Mpython/erc20_demurrage_token/token.py | 6+++---
Msolidity/DemurrageTokenSingleNocap.sol | 18+++++++++---------
4 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin @@ -1 +1 @@ -6101006040523480156200001257600080fd5b506040516200626e3803806200626e833981810160405281019062000038919062000863565b6801000000000000000083600f0b126200005157600080fd5b6200005b62000578565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660069081620000ad919062000b84565b508560079081620000bf919062000b84565b508460ff16608081815250504260038190555060035460a08181525050603c83620000eb919062000c9a565b60c08181525050620001126001620002a96401000000000262002f33176401000000009004565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506200016c84620002d06401000000000262002f59176401000000009004565b600f0b60e081600f0b81525050620001a86000600260009054906101000a9004600f0b6000600162000324640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000ce5565b6000677fffffffffffffff821115620002c157600080fd5b6040829060020a029050919050565b60008082600f0b13620002e257600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af6200030f84620003a8640100000000026401000000009004565b600f0b02908060020a82049150509050919050565b6200032e62000578565b6200033862000578565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b60008082600f0b13620003ba57600080fd5b60008083600f0b9050680100000000000000008112620003f6576040819060008212600003808260020a82851804189250505090506040820191505b640100000000811262000425576020819060008212600003808260020a82851804189250505090506020820191505b62010000811262000452576010819060008212600003808260020a82851804189250505090506010820191505b61010081126200047e576008819060008212600003808260020a82851804189250505090506008820191505b60108112620004a9576004819060008212600003808260020a82851804189250505090506004820191505b60048112620004d4576002819060008212600003808260020a82851804189250505090506002820191505b60028112620004e4576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b60008113156200056b578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a828518041892505050905062000511565b5081945050505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061d82620005d2565b810181811067ffffffffffffffff821117156200063f576200063e620005e3565b5b80604052505050565b600062000654620005b4565b905062000662828262000612565b919050565b600067ffffffffffffffff821115620006855762000684620005e3565b5b6200069082620005d2565b9050602081019050919050565b60005b83811015620006bd578082015181840152602081019050620006a0565b60008484015250505050565b6000620006e0620006da8462000667565b62000648565b905082815260208101848484011115620006ff57620006fe620005cd565b5b6200070c8482856200069d565b509392505050565b600082601f8301126200072c576200072b620005c8565b5b81516200073e848260208601620006c9565b91505092915050565b600060ff82169050919050565b6200075f8162000747565b81146200076b57600080fd5b50565b6000815190506200077f8162000754565b92915050565b600081600f0b9050919050565b6200079d8162000785565b8114620007a957600080fd5b50565b600081519050620007bd8162000792565b92915050565b6000819050919050565b620007d881620007c3565b8114620007e457600080fd5b50565b600081519050620007f881620007cd565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082b82620007fe565b9050919050565b6200083d816200081e565b81146200084957600080fd5b50565b6000815190506200085d8162000832565b92915050565b60008060008060008060c08789031215620008835762000882620005be565b5b600087015167ffffffffffffffff811115620008a457620008a3620005c3565b5b620008b289828a0162000714565b965050602087015167ffffffffffffffff811115620008d657620008d5620005c3565b5b620008e489828a0162000714565b9550506040620008f789828a016200076e565b94505060606200090a89828a01620007ac565b93505060806200091d89828a01620007e7565b92505060a06200093089828a016200084c565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099057607f821691505b602082108103620009a657620009a562000948565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830262000a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009d1565b62000a1f8683620009d1565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a6262000a5c62000a5684620007c3565b62000a37565b620007c3565b9050919050565b6000819050919050565b62000a7e8362000a41565b62000a9662000a8d8262000a69565b848454620009e1565b825550505050565b600090565b62000aad62000a9e565b62000aba81848462000a73565b505050565b5b8181101562000ae25762000ad660008262000aa3565b60018101905062000ac0565b5050565b601f82111562000b315762000afb81620009ac565b62000b0684620009c1565b8101602085101562000b16578190505b62000b2e62000b2585620009c1565b83018262000abf565b50505b505050565b60008160020a8304905092915050565b600062000b596000198460080262000b36565b1980831691505092915050565b600062000b74838362000b46565b9150826002028217905092915050565b62000b8f826200093d565b67ffffffffffffffff81111562000bab5762000baa620005e3565b5b62000bb7825462000977565b62000bc482828562000ae6565b600060209050601f83116001811462000bfc576000841562000be7578287015190505b62000bf3858262000b66565b86555062000c63565b601f19841662000c0c86620009ac565b60005b8281101562000c365784890151825560018201915060208501945060208101905062000c0f565b8683101562000c56578489015162000c52601f89168262000b46565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca782620007c3565b915062000cb483620007c3565b925082820262000cc481620007c3565b9150828204841483151762000cde5762000cdd62000c6b565b5b5092915050565b60805160a05160c05160e05161550962000d656000396000818161127f015281816115b3015281816124db0152612a85015260008181611b9e0152818161249e015281816129dd01528181612c210152612e09015260008181611bca01528181612c4d01528181612e2a0152612e6f0152600061161101526155096000f3fe608060405234801561001057600080fd5b50600436106103ab576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e116101fb578063a457c2d71161012c578063d7a52fa9116100ca578063e69571af11610099578063e69571af14610be4578063e809529514610c14578063eda4e6d614610c32578063f2fde38b14610c50576103ab565b8063d7a52fa914610b4a578063d89135cd14610b66578063da2824a814610b84578063e54063a614610bb4576103ab565b8063b470aade11610106578063b470aade14610ac0578063c0ab707714610ade578063d340ef8a14610b0e578063d5abeb0114610b2c576103ab565b8063a457c2d714610a42578063a9059cbb14610a72578063b1cb0db314610aa2576103ab565b806379ba5097116101995780638da5cb5b116101735780638da5cb5b146109cc5780638f0b2d5d146109ea5780638f1df6bc14610a0657806395d89b4114610a24576103ab565b806379ba50971461096057806384dde4af1461097e57806386fe212d1461099c576103ab565b8063731f237c116101d5578063731f237c146108d657806373f42561146108f45780637445e33a1461091257806374bedb9514610942576103ab565b80636a2d094e1461085a5780636f8b44b01461088a57806370a08231146108a6576103ab565b80632c1758c1116102e0578063449a52f81161027e57806358b2833b1161024d57806358b2833b146107be5780635ae06f7e146107dc5780635f408c041461080c5780636787a9be1461082a576103ab565b8063449a52f8146106fe57806347a505171461072e5780634abfbba21461075e57806351b4541c1461078e576103ab565b806331a5995d116102ba57806331a5995d14610662578063395093511461068057806340452d91146106b057806342966c68146106e2576103ab565b80632c1758c1146105e45780633133348714610614578063313ce56714610644576103ab565b806318cbbcfc1161034d578063229ba19711610327578063229ba1971461053657806323a859441461055457806323b872dd146105845780632a7aec09146105b4576103ab565b806318cbbcfc146104ca5780631989c6a8146104e8578063213d1e1e14610506576103ab565b8063095ea7b311610389578063095ea7b31461042e57806309f28f3c1461045e57806311c566151461047c57806318160ddd146104ac576103ab565b806301681a62146103b057806301ffc9a7146103e057806306fdde0314610410575b600080fd5b6103ca60048036038101906103c591906148c3565b610c80565b6040516103d79190614909565b60405180910390f35b6103fa60048036038101906103f5919061497c565b610d69565b60405161040791906149c4565b60405180910390f35b610418610f0f565b6040516104259190614a6f565b60405180910390f35b61044860048036038101906104439190614abd565b610f9d565b60405161045591906149c4565b60405180910390f35b6104666111d9565b6040516104739190614b19565b60405180910390f35b61049660048036038101906104919190614b60565b6111ec565b6040516104a39190614909565b60405180910390f35b6104b461123c565b6040516104c19190614909565b60405180910390f35b6104d2611253565b6040516104df9190614909565b60405180910390f35b6104f0611258565b6040516104fd9190614909565b60405180910390f35b610520600480360381019061051b9190614d41565b611264565b60405161052d9190614909565b60405180910390f35b61053e61127d565b60405161054b9190614b19565b60405180910390f35b61056e60048036038101906105699190614d41565b6112a1565b60405161057b91906149c4565b60405180910390f35b61059e60048036038101906105999190614d6e565b611309565b6040516105ab91906149c4565b60405180910390f35b6105ce60048036038101906105c99190614d41565b611527565b6040516105db9190614b19565b60405180910390f35b6105fe60048036038101906105f99190614dc1565b61155f565b60405161060b91906149c4565b60405180910390f35b61062e60048036038101906106299190614dee565b611592565b60405161063b9190614909565b60405180910390f35b61064c61160f565b6040516106599190614909565b60405180910390f35b61066a611633565b6040516106779190614909565b60405180910390f35b61069a60048036038101906106959190614abd565b611639565b6040516106a791906149c4565b60405180910390f35b6106ca60048036038101906106c59190614dc1565b6117cf565b6040516106d993929190614e5b565b60405180910390f35b6106fc60048036038101906106f79190614dc1565b61183e565b005b61071860048036038101906107139190614abd565b61197a565b60405161072591906149c4565b60405180910390f35b610748600480360381019061074391906148c3565b611b51565b6040516107559190614909565b60405180910390f35b61077860048036038101906107739190614dc1565b611b9a565b6040516107859190614909565b60405180910390f35b6107a860048036038101906107a39190614dc1565b611bfa565b6040516107b59190614909565b60405180910390f35b6107c6611c1b565b6040516107d39190614909565b60405180910390f35b6107f660048036038101906107f191906148c3565b611c21565b60405161080391906149c4565b60405180910390f35b610814611d2b565b6040516108219190614eae565b60405180910390f35b610844600480360381019061083f9190614dc1565b611df8565b6040516108519190614909565b60405180910390f35b610874600480360381019061086f9190614dc1565b611e39565b6040516108819190614909565b60405180910390f35b6108a4600480360381019061089f9190614dc1565b611e5a565b005b6108c060048036038101906108bb91906148c3565b611f22565b6040516108cd9190614909565b60405180910390f35b6108de611f8c565b6040516108eb9190614909565b60405180910390f35b6108fc611f9d565b6040516109099190614909565b60405180910390f35b61092c60048036038101906109279190614d41565b611fa3565b6040516109399190614909565b60405180910390f35b61094a611fd1565b6040516109579190614909565b60405180910390f35b610968611fd7565b60405161097591906149c4565b60405180910390f35b61098661217e565b6040516109939190614ed8565b60405180910390f35b6109b660048036038101906109b19190614dc1565b6121a4565b6040516109c39190614909565b60405180910390f35b6109d461228b565b6040516109e19190614ed8565b60405180910390f35b610a0460048036038101906109ff91906148c3565b6122b1565b005b610a0e612366565b604051610a1b91906149c4565b60405180910390f35b610a2c612627565b604051610a399190614a6f565b60405180910390f35b610a5c6004803603810190610a579190614abd565b6126b5565b604051610a6991906149c4565b60405180910390f35b610a8c6004803603810190610a879190614abd565b6128d4565b604051610a9991906149c4565b60405180910390f35b610aaa6129d5565b604051610ab79190614909565b60405180910390f35b610ac86129db565b604051610ad59190614909565b60405180910390f35b610af86004803603810190610af39190614dc1565b6129ff565b604051610b059190614909565b60405180910390f35b610b16612b86565b604051610b239190614909565b60405180910390f35b610b34612b8c565b604051610b419190614909565b60405180910390f35b610b646004803603810190610b5f9190614dc1565b612b92565b005b610b6e612c91565b604051610b7b9190614909565b60405180910390f35b610b9e6004803603810190610b9991906148c3565b612c9b565b604051610bab91906149c4565b60405180910390f35b610bce6004803603810190610bc99190614d41565b612d6f565b604051610bdb9190614909565b60405180910390f35b610bfe6004803603810190610bf99190614ef3565b612d83565b604051610c0b9190614fc9565b60405180910390f35b610c1c612e03565b604051610c29919061500f565b60405180910390f35b610c3a612e6d565b604051610c479190614909565b60405180910390f35b610c6a6004803603810190610c6591906148c3565b612e91565b604051610c7791906149c4565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d599190615059565b9250508190555080915050919050565b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610dbd5760019050610f0a565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610e0f5760019050610f0a565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610e615760019050610f0a565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610eb35760019050610f0a565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f055760019050610f0a565b600090505b919050565b60068054610f1c906150bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610f48906150bc565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b505050505081565b6000806000610faa611d2b565b905060028160ff1603610fc2576000925050506111d3565b60008160ff161115611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090615139565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110d257600084146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c8906151a5565b60405180910390fd5b5b6110da612366565b506110e484611df8565b915081600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516111c49190614909565b60405180910390a36001925050505b92915050565b600260009054906101000a9004600f0b81565b6000806112136111fb85612f33565b61120e6112086001612f33565b86612f9b565b613002565b905061121e81613081565b67ffffffffffffffff168461123391906151c5565b91505092915050565b6000600b5460085461124e91906151c5565b905090565b600f81565b60008080549050905090565b6000816020015168ffffffffffffffffff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080826000015163ffffffff1611156112be5760009050611304565b6000826020015168ffffffffffffffffff1611156112df5760009050611304565b6000826040015167ffffffffffffffff1611156112ff5760009050611304565b600190505b919050565b600080600080611317611d2b565b905060028160ff16036113305760009350505050611520565b60008160ff161115611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136e90615139565b60405180910390fd5b61137f612366565b5061138985611df8565b925082600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561141457600080fd5b82600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114a091906151c5565b925050819055506114b28787856130b6565b91508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516115119190614909565b60405180910390a38193505050505b9392505050565b60008067ffffffffffffffff836040015160070b169050600081600f0b03611556576115536001612f33565b90505b80915050919050565b6000600f821061156e57600080fd5b6000820361158357600f60125414905061158d565b8160125483161490505b919050565b6000806000806115a186612f33565b92506115ac85612f33565b91506115d87f000000000000000000000000000000000000000000000000000000000000000083613002565b90506115e3816130db565b90506115ef8382613002565b90506115fa81613081565b67ffffffffffffffff16935050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b600080611644612366565b5061164e83611df8565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116dc9190615059565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516117bc9190614909565b60405180910390a3600191505092915050565b600081815481106117df57600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a900467ffffffffffffffff16905083565b6000611848611d2b565b60ff161461185557600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118ab57600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156118f757600080fd5b600061190282611df8565b905061190e3382613168565b5081600b60008282546119219190615059565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405161196e9190614909565b60405180910390a25050565b6000806000611987611d2b565b60ff161461199457600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a395750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90615245565b60405180910390fd5b611a80612366565b5060006011541115611aa95760115483600854611a9d9190615059565b1115611aa857600080fd5b5b8260086000828254611abb9190615059565b92505081905550611acb83611df8565b9050611ad7848261326f565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051611b359190614909565b60405180910390a3611b45613333565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000082611bc89190615265565b7f0000000000000000000000000000000000000000000000000000000000000000611bf39190615059565b9050919050565b6000603c8242611c0a91906151c5565b611c1491906152d6565b9050919050565b60035481565b6000611c30600160ff1661155f565b15611c3a57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cc157503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611cca57600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000601060009054906101000a900460ff1615611d4b5760019050611df5565b6000600f5403611d5e5760009050611df5565b600f544210611df057611d8b603c600354611d7991906152d6565b600f54611d8691906151c5565b6129ff565b506001601060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe942604051611dd69190614909565b60405180910390a1611de6612366565b5060029050611df5565b600090505b90565b600080611e1c611e0784612f33565b600260009054906101000a9004600f0b6134f7565b9050611e2781613081565b67ffffffffffffffff16915050919050565b6000603c8242611e4991906151c5565b611e5391906152d6565b9050919050565b611e67600860ff1661155f565b15611e7157600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ecb57600080fd5b611ed361123c565b8111611ede57600080fd5b6011547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe682604051611f109190614909565b60405180910390a28060118190555050565b6000806000806000611f3b611f3687611b51565b612f33565b9350611f48600354611bfa565b9150611f6384600260009054906101000a9004600f0b613002565b9250611f81611f7184613081565b67ffffffffffffffff1683611592565b945050505050919050565b6000611f9860006129ff565b905090565b600b5481565b6000806000611fb184611264565b9150611fbc84611527565b9050611fc882826111ec565b92505050919050565b600a5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461203457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601082106121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090615353565b60405180910390fd5b6000601254831614612230576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612227906153bf565b60405180910390fd5b81601260008282541792505081905550600f6012541415157f6b7e2e653f93b645d4ed7292d6429f96637084363e477c8aaea1a43ed13c284e6012546040516122799190614909565b60405180910390a26012549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122be600260ff1661155f565b156122c857600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461232257600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061237061481a565b61237861481a565b61238061481a565b6000806000806000612390611f8c565b50612399613583565b97506123a4886112a1565b156123ba57600098505050505050505050612624565b6000600954815481106123d0576123cf6153df565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050955061247d88612d6f565b945060018561248c9190615059565b905061249786611527565b9350603c857f00000000000000000000000000000000000000000000000000000000000000006124c79190615265565b6124d191906152d6565b915061250d6125087f000000000000000000000000000000000000000000000000000000000000000061250385612f33565b613002565b6130db565b925061252360008461251d61123c565b84612d83565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050506125df87613719565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d6758160405161260f9190614909565b60405180910390a16001985050505050505050505b90565b60078054612634906150bc565b80601f0160208091040260200160405190810160405280929190818152602001828054612660906150bc565b80156126ad5780601f10612682576101008083540402835291602001916126ad565b820191906000526020600020905b81548152906001019060200180831161269057829003601f168201915b505050505081565b6000806126c183611df8565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561274c57600080fd5b612754612366565b5080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e191906151c5565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516128c19190614909565b60405180910390a3600191505092915050565b6000806000806128e2611d2b565b905060028160ff16036128fb57600093505050506129cf565b60008160ff161115612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990615139565b60405180910390fd5b61294a612366565b5061295485611df8565b92506129613387856130b6565b91508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516129c09190614909565b60405180910390a38193505050505b92915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000601060009054906101000a900460ff1615612a29576000945050505050612b81565b612a34600354611bfa565b925060008303612a4b576000945050505050612b81565b600260009054906101000a9004600f0b9050600086118015612a6c57508286105b15612a75578592505b612a7e83612f33565b9150612aaa7f000000000000000000000000000000000000000000000000000000000000000083613002565b9350612ab5846130db565b9350612ad0600260009054906101000a9004600f0b85613002565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550603c83612b189190615265565b600354612b259190615059565b60038190555080600f0b836003547f1c9c74563c32efd114cb36fb5e432d9386c8254d08456614804a33a3088ab736600260009054906101000a9004600f0b604051612b719190614b19565b60405180910390a4829450505050505b919050565b60095481565b60115481565b6000612ba1600460ff1661155f565b15612bab57600080fd5b601060009054906101000a900460ff1615612bc557600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c1f57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000082612c4b9190615265565b7f0000000000000000000000000000000000000000000000000000000000000000612c769190615059565b9050600f548111612c8657600080fd5b80600f819055505050565b6000600b54905090565b6000612caa600160ff1661155f565b15612cb457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d0e57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000816000015163ffffffff169050919050565b612d8b61481a565b612d9361481a565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042612e5491906151c5565b612e5e91906152d6565b612e689190615059565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612eed57600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000677fffffffffffffff821115612f4a57600080fd5b6040829060020a029050919050565b60008082600f0b13612f6a57600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af612f8684613838565b600f0b02908060020a82049150509050919050565b60008082600f0b84600f0b0390507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612fef57506f7fffffffffffffffffffffffffffffff600f0b8113155b612ff857600080fd5b8091505092915050565b600080604083600f0b85600f0b029060008212600003808260020a82851804189250505090507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561306e57506f7fffffffffffffffffffffffffffffff600f0b8113155b61307757600080fd5b8091505092915050565b60008082600f0b121561309357600080fd5b604082600f0b9060008212600003808260020a8285180418925050509050919050565b6000806130c38584613168565b506130ce848461326f565b5060019150509392505050565b60006840000000000000000082600f0b126130f557600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b12156131295760009050613163565b6131606080700171547652b82fe1777d0ffda0d23a7d1284600f0b029060008212600003808260020a8285180418925050506139fe565b90505b919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036131c45760009350505050613269565b6131cd86611b51565b925084831015613212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132099061545a565b60405180910390fd5b848361321e91906151c5565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036132cb576000935050505061332d565b6132d486611b51565b925084836132e29190615059565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600061333d61481a565b600061334761123c565b90506000600160008054905061335d91906151c5565b8154811061336e5761336d6153df565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff1681525050816000600160008054905061344991906151c5565b8154811061345a576134596153df565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060019250505090565b60008082600f0b0361350857600080fd5b600082600f0b604085600f0b9060020a0281613527576135266152a7565b5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561357057506f7fffffffffffffffffffffffffffffff600f0b8113155b61357957600080fd5b8091505092915050565b61358b61481a565b61359361481a565b61359b61481a565b600080600954815481106135b2576135b16153df565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156136bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e191906154a6565b6fffffffffffffffffffffffffffffffff1690506136fe83612d6f565b811161370f57819350505050613716565b8293505050505b90565b600080600061372784611fa3565b61372f61123c565b61373991906151c5565b9150600a5461374783611df8565b61375191906151c5565b905061377f600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261326f565b50836000015163ffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d3846040516137f39190614909565b60405180910390a360016009600082825461380e9190615059565b9250508190555080600a60008282546138279190615059565b925050819055508192505050919050565b60008082600f0b1361384957600080fd5b60008083600f0b9050680100000000000000008112613884576040819060008212600003808260020a82851804189250505090506040820191505b64010000000081126138b2576020819060008212600003808260020a82851804189250505090506020820191505b6201000081126138de576010819060008212600003808260020a82851804189250505090506010820191505b6101008112613909576008819060008212600003808260020a82851804189250505090506008820191505b60108112613933576004819060008212600003808260020a82851804189250505090506004820191505b6004811261395d576002819060008212600003808260020a82851804189250505090506002820191505b6002811261396c576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b60008113156139f1578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a8285180418925050509050613999565b5081945050505050919050565b60006840000000000000000082600f0b12613a1857600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215613a4c5760009050614815565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b1315613a9a57608070016a09e667f3bcc908b2fb1366ea957d3e8202908060020a820491505090505b60006740000000000000008416600f0b1315613ad35760807001306fe0a31b7152de8d5a46305c85edec8202908060020a820491505090505b60006720000000000000008416600f0b1315613b0c5760807001172b83c7d517adcdf7c8c50eb14a791f8202908060020a820491505090505b60006710000000000000008416600f0b1315613b4557608070010b5586cf9890f6298b92b71842a983638202908060020a820491505090505b60006708000000000000008416600f0b1315613b7e5760807001059b0d31585743ae7c548eb68ca417fd8202908060020a820491505090505b60006704000000000000008416600f0b1315613bb7576080700102c9a3e778060ee6f7caca4f7a29bde88202908060020a820491505090505b60006702000000000000008416600f0b1315613bf057608070010163da9fb33356d84a66ae336dcdfa3f8202908060020a820491505090505b60006701000000000000008416600f0b1315613c29576080700100b1afa5abcbed6129ab13ec11dc95438202908060020a820491505090505b600066800000000000008416600f0b1315613c6157608070010058c86da1c09ea1ff19d294cf2f679b8202908060020a820491505090505b600066400000000000008416600f0b1315613c995760807001002c605e2e8cec506d21bfc89a23a00f8202908060020a820491505090505b600066200000000000008416600f0b1315613cd1576080700100162f3904051fa128bca9c55c31e5df8202908060020a820491505090505b600066100000000000008416600f0b1315613d095760807001000b175effdc76ba38e31671ca9397258202908060020a820491505090505b600066080000000000008416600f0b1315613d41576080700100058ba01fb9f96d6cacd4b180917c3d8202908060020a820491505090505b600066040000000000008416600f0b1315613d7957608070010002c5cc37da9491d0985c348c68e7b38202908060020a820491505090505b600066020000000000008416600f0b1315613db15760807001000162e525ee054754457d59952920268202908060020a820491505090505b600066010000000000008416600f0b1315613de957608070010000b17255775c040618bf4a4ade83fc8202908060020a820491505090505b6000658000000000008416600f0b1315613e205760807001000058b91b5bc9ae2eed81e9b7d4cfab8202908060020a820491505090505b6000654000000000008416600f0b1315613e57576080700100002c5c89d5ec6ca4d7c8acc017b7c98202908060020a820491505090505b6000652000000000008416600f0b1315613e8e57608070010000162e43f4f831060e02d839a9d16d8202908060020a820491505090505b6000651000000000008416600f0b1315613ec5576080700100000b1721bcfc99d9f890ea069117638202908060020a820491505090505b6000650800000000008416600f0b1315613efc57608070010000058b90cf1e6d97f9ca14dbcc16288202908060020a820491505090505b6000650400000000008416600f0b1315613f335760807001000002c5c863b73f016468f6bac5ca2b8202908060020a820491505090505b6000650200000000008416600f0b1315613f6a576080700100000162e430e5a18f6119e3c02282a58202908060020a820491505090505b6000650100000000008416600f0b1315613fa15760807001000000b1721835514b86e6d96efd1bfe8202908060020a820491505090505b60006480000000008416600f0b1315613fd7576080700100000058b90c0b48c6be5df846c5b2ef8202908060020a820491505090505b60006440000000008416600f0b131561400d57608070010000002c5c8601cc6b9e94213c72737a8202908060020a820491505090505b60006420000000008416600f0b13156140435760807001000000162e42fff037df38aa2b219f068202908060020a820491505090505b60006410000000008416600f0b131561407957608070010000000b17217fba9c739aa5819f44f98202908060020a820491505090505b60006408000000008416600f0b13156140af5760807001000000058b90bfcdee5acd3c1cedc8238202908060020a820491505090505b60006404000000008416600f0b13156140e5576080700100000002c5c85fe31f35a6a30da1be508202908060020a820491505090505b60006402000000008416600f0b131561411b57608070010000000162e42ff0999ce3541b9fffcf8202908060020a820491505090505b60006401000000008416600f0b1315614151576080700100000000b17217f80f4ef5aadda455548202908060020a820491505090505b600063800000008416600f0b131561418657608070010000000058b90bfbf8479bd5a81b51ad8202908060020a820491505090505b600063400000008416600f0b13156141bb5760807001000000002c5c85fdf84bd62ae30a74cc8202908060020a820491505090505b600063200000008416600f0b13156141f0576080700100000000162e42fefb2fed257559bdaa8202908060020a820491505090505b600063100000008416600f0b13156142255760807001000000000b17217f7d5a7716bba4a9ae8202908060020a820491505090505b600063080000008416600f0b131561425a576080700100000000058b90bfbe9ddbac5e109cce8202908060020a820491505090505b600063040000008416600f0b131561428f57608070010000000002c5c85fdf4b15de6f17eb0d8202908060020a820491505090505b600063020000008416600f0b13156142c45760807001000000000162e42fefa494f1478fde058202908060020a820491505090505b600063010000008416600f0b13156142f957608070010000000000b17217f7d20cf927c8e94c8202908060020a820491505090505b6000628000008416600f0b131561432d5760807001000000000058b90bfbe8f71cb4e4b33d8202908060020a820491505090505b6000624000008416600f0b1315614361576080700100000000002c5c85fdf477b662b269458202908060020a820491505090505b6000622000008416600f0b131561439557608070010000000000162e42fefa3ae53369388c8202908060020a820491505090505b6000621000008416600f0b13156143c9576080700100000000000b17217f7d1d351a389d408202908060020a820491505090505b6000620800008416600f0b13156143fd57608070010000000000058b90bfbe8e8b2d3d4ede8202908060020a820491505090505b6000620400008416600f0b13156144315760807001000000000002c5c85fdf4741bea6e77e8202908060020a820491505090505b6000620200008416600f0b1315614465576080700100000000000162e42fefa39fe95583c28202908060020a820491505090505b6000620100008416600f0b13156144995760807001000000000000b17217f7d1cfb72b45e18202908060020a820491505090505b60006180008416600f0b13156144cc576080700100000000000058b90bfbe8e7cc35c3f08202908060020a820491505090505b60006140008416600f0b13156144ff57608070010000000000002c5c85fdf473e242ea388202908060020a820491505090505b60006120008416600f0b13156145325760807001000000000000162e42fefa39f02b772c8202908060020a820491505090505b60006110008416600f0b131561456557608070010000000000000b17217f7d1cf7d83c1a8202908060020a820491505090505b60006108008416600f0b13156145985760807001000000000000058b90bfbe8e7bdcbe2e8202908060020a820491505090505b60006104008416600f0b13156145cb576080700100000000000002c5c85fdf473dea871f8202908060020a820491505090505b60006102008416600f0b13156145fe57608070010000000000000162e42fefa39ef44d918202908060020a820491505090505b60006101008416600f0b1315614631576080700100000000000000b17217f7d1cf79e9498202908060020a820491505090505b600060808416600f0b131561466357608070010000000000000058b90bfbe8e7bce5448202908060020a820491505090505b600060408416600f0b13156146955760807001000000000000002c5c85fdf473de6eca8202908060020a820491505090505b600060208416600f0b13156146c7576080700100000000000000162e42fefa39ef366f8202908060020a820491505090505b600060108416600f0b13156146f95760807001000000000000000b17217f7d1cf79afa8202908060020a820491505090505b600060088416600f0b131561472b576080700100000000000000058b90bfbe8e7bcd6d8202908060020a820491505090505b600060048416600f0b131561475d57608070010000000000000002c5c85fdf473de6b28202908060020a820491505090505b600060028416600f0b131561478f5760807001000000000000000162e42fefa39ef3588202908060020a820491505090505b600060018416600f0b13156147c157608070010000000000000000b17217f7d1cf79ab8202908060020a820491505090505b604083600f0b9060008212600003808260020a828518041892505050603f03600f0b81908060020a820491505090506f7fffffffffffffffffffffffffffffff600f0b81111561481057600080fd5b809150505b919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061489082614865565b9050919050565b6148a081614885565b81146148ab57600080fd5b50565b6000813590506148bd81614897565b92915050565b6000602082840312156148d9576148d8614860565b5b60006148e7848285016148ae565b91505092915050565b6000819050919050565b614903816148f0565b82525050565b600060208201905061491e60008301846148fa565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61495981614924565b811461496457600080fd5b50565b60008135905061497681614950565b92915050565b60006020828403121561499257614991614860565b5b60006149a084828501614967565b91505092915050565b60008115159050919050565b6149be816149a9565b82525050565b60006020820190506149d960008301846149b5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a195780820151818401526020810190506149fe565b60008484015250505050565b6000601f19601f8301169050919050565b6000614a41826149df565b614a4b81856149ea565b9350614a5b8185602086016149fb565b614a6481614a25565b840191505092915050565b60006020820190508181036000830152614a898184614a36565b905092915050565b614a9a816148f0565b8114614aa557600080fd5b50565b600081359050614ab781614a91565b92915050565b60008060408385031215614ad457614ad3614860565b5b6000614ae2858286016148ae565b9250506020614af385828601614aa8565b9150509250929050565b600081600f0b9050919050565b614b1381614afd565b82525050565b6000602082019050614b2e6000830184614b0a565b92915050565b614b3d81614afd565b8114614b4857600080fd5b50565b600081359050614b5a81614b34565b92915050565b60008060408385031215614b7757614b76614860565b5b6000614b8585828601614aa8565b9250506020614b9685828601614b4b565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614bdd82614a25565b810181811067ffffffffffffffff82111715614bfc57614bfb614ba5565b5b80604052505050565b6000614c0f614856565b9050614c1b8282614bd4565b919050565b600063ffffffff82169050919050565b614c3981614c20565b8114614c4457600080fd5b50565b600081359050614c5681614c30565b92915050565b600068ffffffffffffffffff82169050919050565b614c7a81614c5c565b8114614c8557600080fd5b50565b600081359050614c9781614c71565b92915050565b600067ffffffffffffffff82169050919050565b614cba81614c9d565b8114614cc557600080fd5b50565b600081359050614cd781614cb1565b92915050565b600060608284031215614cf357614cf2614ba0565b5b614cfd6060614c05565b90506000614d0d84828501614c47565b6000830152506020614d2184828501614c88565b6020830152506040614d3584828501614cc8565b60408301525092915050565b600060608284031215614d5757614d56614860565b5b6000614d6584828501614cdd565b91505092915050565b600080600060608486031215614d8757614d86614860565b5b6000614d95868287016148ae565b9350506020614da6868287016148ae565b9250506040614db786828701614aa8565b9150509250925092565b600060208284031215614dd757614dd6614860565b5b6000614de584828501614aa8565b91505092915050565b60008060408385031215614e0557614e04614860565b5b6000614e1385828601614aa8565b9250506020614e2485828601614aa8565b9150509250929050565b614e3781614c20565b82525050565b614e4681614c5c565b82525050565b614e5581614c9d565b82525050565b6000606082019050614e706000830186614e2e565b614e7d6020830185614e3d565b614e8a6040830184614e4c565b949350505050565b600060ff82169050919050565b614ea881614e92565b82525050565b6000602082019050614ec36000830184614e9f565b92915050565b614ed281614885565b82525050565b6000602082019050614eed6000830184614ec9565b92915050565b60008060008060808587031215614f0d57614f0c614860565b5b6000614f1b87828801614aa8565b9450506020614f2c87828801614b4b565b9350506040614f3d87828801614aa8565b9250506060614f4e87828801614aa8565b91505092959194509250565b614f6381614c20565b82525050565b614f7281614c5c565b82525050565b614f8181614c9d565b82525050565b606082016000820151614f9d6000850182614f5a565b506020820151614fb06020850182614f69565b506040820151614fc36040850182614f78565b50505050565b6000606082019050614fde6000830184614f87565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61500981614fe4565b82525050565b60006020820190506150246000830184615000565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615064826148f0565b915061506f836148f0565b92508282019050808211156150875761508661502a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806150d457607f821691505b6020821081036150e7576150e661508d565b5b50919050565b7f4558504952454400000000000000000000000000000000000000000000000000600082015250565b60006151236007836149ea565b915061512e826150ed565b602082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b600061518f600a836149ea565b915061519a82615159565b602082019050919050565b600060208201905081810360008301526151be81615182565b9050919050565b60006151d0826148f0565b91506151db836148f0565b92508282039050818111156151f3576151f261502a565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b600061522f600a836149ea565b915061523a826151f9565b602082019050919050565b6000602082019050818103600083015261525e81615222565b9050919050565b6000615270826148f0565b915061527b836148f0565b9250828202615289816148f0565b915082820484148315176152a05761529f61502a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152e1826148f0565b91506152ec836148f0565b9250826152fc576152fb6152a7565b5b828204905092915050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b600061533d6011836149ea565b915061534882615307565b602082019050919050565b6000602082019050818103600083015261536c81615330565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b60006153a96012836149ea565b91506153b482615373565b602082019050919050565b600060208201905081810360008301526153d88161539c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b6000615444600d836149ea565b915061544f8261540e565b602082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b61548381614fe4565b811461548e57600080fd5b50565b6000815190506154a08161547a565b92915050565b6000602082840312156154bc576154bb614860565b5b60006154ca84828501615491565b9150509291505056fea2646970667358221220e513c18e024f61f7df896fc073669e7f70fe7cc019a4c2107ebd579df21546ae64736f6c63430008110033 -\ No newline at end of file +6101006040523480156200001257600080fd5b506040516200626e3803806200626e833981810160405281019062000038919062000863565b6801000000000000000083600f0b126200005157600080fd5b6200005b62000578565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660069081620000ad919062000b84565b508560079081620000bf919062000b84565b508460ff16608081815250504260038190555060035460a08181525050603c83620000eb919062000c9a565b60c08181525050620001126001620002a96401000000000262002f33176401000000009004565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506200016c84620002d06401000000000262002f59176401000000009004565b600f0b60e081600f0b81525050620001a86000600260009054906101000a9004600f0b6000600162000324640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000ce5565b6000677fffffffffffffff821115620002c157600080fd5b6040829060020a029050919050565b60008082600f0b13620002e257600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af6200030f84620003a8640100000000026401000000009004565b600f0b02908060020a82049150509050919050565b6200032e62000578565b6200033862000578565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b60008082600f0b13620003ba57600080fd5b60008083600f0b9050680100000000000000008112620003f6576040819060008212600003808260020a82851804189250505090506040820191505b640100000000811262000425576020819060008212600003808260020a82851804189250505090506020820191505b62010000811262000452576010819060008212600003808260020a82851804189250505090506010820191505b61010081126200047e576008819060008212600003808260020a82851804189250505090506008820191505b60108112620004a9576004819060008212600003808260020a82851804189250505090506004820191505b60048112620004d4576002819060008212600003808260020a82851804189250505090506002820191505b60028112620004e4576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b60008113156200056b578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a828518041892505050905062000511565b5081945050505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061d82620005d2565b810181811067ffffffffffffffff821117156200063f576200063e620005e3565b5b80604052505050565b600062000654620005b4565b905062000662828262000612565b919050565b600067ffffffffffffffff821115620006855762000684620005e3565b5b6200069082620005d2565b9050602081019050919050565b60005b83811015620006bd578082015181840152602081019050620006a0565b60008484015250505050565b6000620006e0620006da8462000667565b62000648565b905082815260208101848484011115620006ff57620006fe620005cd565b5b6200070c8482856200069d565b509392505050565b600082601f8301126200072c576200072b620005c8565b5b81516200073e848260208601620006c9565b91505092915050565b600060ff82169050919050565b6200075f8162000747565b81146200076b57600080fd5b50565b6000815190506200077f8162000754565b92915050565b600081600f0b9050919050565b6200079d8162000785565b8114620007a957600080fd5b50565b600081519050620007bd8162000792565b92915050565b6000819050919050565b620007d881620007c3565b8114620007e457600080fd5b50565b600081519050620007f881620007cd565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082b82620007fe565b9050919050565b6200083d816200081e565b81146200084957600080fd5b50565b6000815190506200085d8162000832565b92915050565b60008060008060008060c08789031215620008835762000882620005be565b5b600087015167ffffffffffffffff811115620008a457620008a3620005c3565b5b620008b289828a0162000714565b965050602087015167ffffffffffffffff811115620008d657620008d5620005c3565b5b620008e489828a0162000714565b9550506040620008f789828a016200076e565b94505060606200090a89828a01620007ac565b93505060806200091d89828a01620007e7565b92505060a06200093089828a016200084c565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099057607f821691505b602082108103620009a657620009a562000948565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830262000a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009d1565b62000a1f8683620009d1565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a6262000a5c62000a5684620007c3565b62000a37565b620007c3565b9050919050565b6000819050919050565b62000a7e8362000a41565b62000a9662000a8d8262000a69565b848454620009e1565b825550505050565b600090565b62000aad62000a9e565b62000aba81848462000a73565b505050565b5b8181101562000ae25762000ad660008262000aa3565b60018101905062000ac0565b5050565b601f82111562000b315762000afb81620009ac565b62000b0684620009c1565b8101602085101562000b16578190505b62000b2e62000b2585620009c1565b83018262000abf565b50505b505050565b60008160020a8304905092915050565b600062000b596000198460080262000b36565b1980831691505092915050565b600062000b74838362000b46565b9150826002028217905092915050565b62000b8f826200093d565b67ffffffffffffffff81111562000bab5762000baa620005e3565b5b62000bb7825462000977565b62000bc482828562000ae6565b600060209050601f83116001811462000bfc576000841562000be7578287015190505b62000bf3858262000b66565b86555062000c63565b601f19841662000c0c86620009ac565b60005b8281101562000c365784890151825560018201915060208501945060208101905062000c0f565b8683101562000c56578489015162000c52601f89168262000b46565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca782620007c3565b915062000cb483620007c3565b925082820262000cc481620007c3565b9150828204841483151762000cde5762000cdd62000c6b565b5b5092915050565b60805160a05160c05160e05161550962000d656000396000818161158f015281816124b7015281816126930152612a85015260008181611b7a0152818161247a015281816129dd01528181612c210152612e09015260008181611ba601528181612c4d01528181612e2a0152612e6f015260006115ed01526155096000f3fe608060405234801561001057600080fd5b50600436106103ab576000357c0100000000000000000000000000000000000000000000000000000000900480636f8b44b0116101fb578063a457c2d71161012c578063d7a52fa9116100ca578063e69571af11610099578063e69571af14610be4578063e809529514610c14578063eda4e6d614610c32578063f2fde38b14610c50576103ab565b8063d7a52fa914610b4a578063d89135cd14610b66578063da2824a814610b84578063e54063a614610bb4576103ab565b8063b470aade11610106578063b470aade14610ac0578063c0ab707714610ade578063d340ef8a14610b0e578063d5abeb0114610b2c576103ab565b8063a457c2d714610a42578063a9059cbb14610a72578063b1cb0db314610aa2576103ab565b806384dde4af116101995780638f0b2d5d116101735780638f0b2d5d146109cc5780638f1df6bc146109e857806395d89b4114610a065780639f24880814610a24576103ab565b806384dde4af1461096057806386fe212d1461097e5780638da5cb5b146109ae576103ab565b806373f42561116101d557806373f42561146108d65780637445e33a146108f457806374bedb951461092457806379ba509714610942576103ab565b80636f8b44b01461086c57806370a0823114610888578063731f237c146108b8576103ab565b806331333487116102e057806347a505171161027e5780635ae06f7e1161024d5780635ae06f7e146107be5780635f408c04146107ee5780636787a9be1461080c5780636a2d094e1461083c576103ab565b806347a50517146107105780634abfbba21461074057806351b4541c1461077057806358b2833b146107a0576103ab565b806339509351116102ba578063395093511461066257806340452d911461069257806342966c68146106c4578063449a52f8146106e0576103ab565b806331333487146105f6578063313ce5671461062657806331a5995d14610644576103ab565b806318cbbcfc1161034d57806323a859441161032757806323a859441461053657806323b872dd146105665780632a7aec09146105965780632c1758c1146105c6576103ab565b806318cbbcfc146104ca5780631989c6a8146104e8578063213d1e1e14610506576103ab565b8063095ea7b311610389578063095ea7b31461042e57806309f28f3c1461045e57806311c566151461047c57806318160ddd146104ac576103ab565b806301681a62146103b057806301ffc9a7146103e057806306fdde0314610410575b600080fd5b6103ca60048036038101906103c591906148c3565b610c80565b6040516103d79190614909565b60405180910390f35b6103fa60048036038101906103f5919061497c565b610d69565b60405161040791906149c4565b60405180910390f35b610418610f0f565b6040516104259190614a6f565b60405180910390f35b61044860048036038101906104439190614abd565b610f9d565b60405161045591906149c4565b60405180910390f35b6104666111d9565b6040516104739190614b19565b60405180910390f35b61049660048036038101906104919190614b60565b6111ec565b6040516104a39190614909565b60405180910390f35b6104b461123c565b6040516104c19190614909565b60405180910390f35b6104d2611253565b6040516104df9190614909565b60405180910390f35b6104f0611258565b6040516104fd9190614909565b60405180910390f35b610520600480360381019061051b9190614d41565b611264565b60405161052d9190614909565b60405180910390f35b610550600480360381019061054b9190614d41565b61127d565b60405161055d91906149c4565b60405180910390f35b610580600480360381019061057b9190614d6e565b6112e5565b60405161058d91906149c4565b60405180910390f35b6105b060048036038101906105ab9190614d41565b611503565b6040516105bd9190614b19565b60405180910390f35b6105e060048036038101906105db9190614dc1565b61153b565b6040516105ed91906149c4565b60405180910390f35b610610600480360381019061060b9190614dee565b61156e565b60405161061d9190614909565b60405180910390f35b61062e6115eb565b60405161063b9190614909565b60405180910390f35b61064c61160f565b6040516106599190614909565b60405180910390f35b61067c60048036038101906106779190614abd565b611615565b60405161068991906149c4565b60405180910390f35b6106ac60048036038101906106a79190614dc1565b6117ab565b6040516106bb93929190614e5b565b60405180910390f35b6106de60048036038101906106d99190614dc1565b61181a565b005b6106fa60048036038101906106f59190614abd565b611956565b60405161070791906149c4565b60405180910390f35b61072a600480360381019061072591906148c3565b611b2d565b6040516107379190614909565b60405180910390f35b61075a60048036038101906107559190614dc1565b611b76565b6040516107679190614909565b60405180910390f35b61078a60048036038101906107859190614dc1565b611bd6565b6040516107979190614909565b60405180910390f35b6107a8611bf7565b6040516107b59190614909565b60405180910390f35b6107d860048036038101906107d391906148c3565b611bfd565b6040516107e591906149c4565b60405180910390f35b6107f6611d07565b6040516108039190614eae565b60405180910390f35b61082660048036038101906108219190614dc1565b611dd4565b6040516108339190614909565b60405180910390f35b61085660048036038101906108519190614dc1565b611e15565b6040516108639190614909565b60405180910390f35b61088660048036038101906108819190614dc1565b611e36565b005b6108a2600480360381019061089d91906148c3565b611efe565b6040516108af9190614909565b60405180910390f35b6108c0611f68565b6040516108cd9190614909565b60405180910390f35b6108de611f79565b6040516108eb9190614909565b60405180910390f35b61090e60048036038101906109099190614d41565b611f7f565b60405161091b9190614909565b60405180910390f35b61092c611fad565b6040516109399190614909565b60405180910390f35b61094a611fb3565b60405161095791906149c4565b60405180910390f35b61096861215a565b6040516109759190614ed8565b60405180910390f35b61099860048036038101906109939190614dc1565b612180565b6040516109a59190614909565b60405180910390f35b6109b6612267565b6040516109c39190614ed8565b60405180910390f35b6109e660048036038101906109e191906148c3565b61228d565b005b6109f0612342565b6040516109fd91906149c4565b60405180910390f35b610a0e612603565b604051610a1b9190614a6f565b60405180910390f35b610a2c612691565b604051610a399190614b19565b60405180910390f35b610a5c6004803603810190610a579190614abd565b6126b5565b604051610a6991906149c4565b60405180910390f35b610a8c6004803603810190610a879190614abd565b6128d4565b604051610a9991906149c4565b60405180910390f35b610aaa6129d5565b604051610ab79190614909565b60405180910390f35b610ac86129db565b604051610ad59190614909565b60405180910390f35b610af86004803603810190610af39190614dc1565b6129ff565b604051610b059190614909565b60405180910390f35b610b16612b86565b604051610b239190614909565b60405180910390f35b610b34612b8c565b604051610b419190614909565b60405180910390f35b610b646004803603810190610b5f9190614dc1565b612b92565b005b610b6e612c91565b604051610b7b9190614909565b60405180910390f35b610b9e6004803603810190610b9991906148c3565b612c9b565b604051610bab91906149c4565b60405180910390f35b610bce6004803603810190610bc99190614d41565b612d6f565b604051610bdb9190614909565b60405180910390f35b610bfe6004803603810190610bf99190614ef3565b612d83565b604051610c0b9190614fc9565b60405180910390f35b610c1c612e03565b604051610c29919061500f565b60405180910390f35b610c3a612e6d565b604051610c479190614909565b60405180910390f35b610c6a6004803603810190610c6591906148c3565b612e91565b604051610c7791906149c4565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d599190615059565b9250508190555080915050919050565b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610dbd5760019050610f0a565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610e0f5760019050610f0a565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610e615760019050610f0a565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610eb35760019050610f0a565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f055760019050610f0a565b600090505b919050565b60068054610f1c906150bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610f48906150bc565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b505050505081565b6000806000610faa611d07565b905060028160ff1603610fc2576000925050506111d3565b60008160ff161115611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090615139565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110d257600084146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c8906151a5565b60405180910390fd5b5b6110da612342565b506110e484611dd4565b915081600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516111c49190614909565b60405180910390a36001925050505b92915050565b600260009054906101000a9004600f0b81565b6000806112136111fb85612f33565b61120e6112086001612f33565b86612f9b565b613002565b905061121e81613081565b67ffffffffffffffff168461123391906151c5565b91505092915050565b6000600b5460085461124e91906151c5565b905090565b600f81565b60008080549050905090565b6000816020015168ffffffffffffffffff169050919050565b600080826000015163ffffffff16111561129a57600090506112e0565b6000826020015168ffffffffffffffffff1611156112bb57600090506112e0565b6000826040015167ffffffffffffffff1611156112db57600090506112e0565b600190505b919050565b6000806000806112f3611d07565b905060028160ff160361130c57600093505050506114fc565b60008160ff161115611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90615139565b60405180910390fd5b61135b612342565b5061136585611dd4565b925082600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156113f057600080fd5b82600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461147c91906151c5565b9250508190555061148e8787856130b6565b91508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516114ed9190614909565b60405180910390a38193505050505b9392505050565b60008067ffffffffffffffff836040015160070b169050600081600f0b036115325761152f6001612f33565b90505b80915050919050565b6000600f821061154a57600080fd5b6000820361155f57600f601254149050611569565b8160125483161490505b919050565b60008060008061157d86612f33565b925061158885612f33565b91506115b47f000000000000000000000000000000000000000000000000000000000000000083613002565b90506115bf816130db565b90506115cb8382613002565b90506115d681613081565b67ffffffffffffffff16935050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b600080611620612342565b5061162a83611dd4565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b89190615059565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516117989190614909565b60405180910390a3600191505092915050565b600081815481106117bb57600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a900467ffffffffffffffff16905083565b6000611824611d07565b60ff161461183157600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661188757600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156118d357600080fd5b60006118de82611dd4565b90506118ea3382613168565b5081600b60008282546118fd9190615059565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405161194a9190614909565b60405180910390a25050565b6000806000611963611d07565b60ff161461197057600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a155750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90615245565b60405180910390fd5b611a5c612342565b5060006011541115611a855760115483600854611a799190615059565b1115611a8457600080fd5b5b8260086000828254611a979190615059565b92505081905550611aa783611dd4565b9050611ab3848261326f565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051611b119190614909565b60405180910390a3611b21613333565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000082611ba49190615265565b7f0000000000000000000000000000000000000000000000000000000000000000611bcf9190615059565b9050919050565b6000603c8242611be691906151c5565b611bf091906152d6565b9050919050565b60035481565b6000611c0c600160ff1661153b565b15611c1657600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c9d57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611ca657600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000601060009054906101000a900460ff1615611d275760019050611dd1565b6000600f5403611d3a5760009050611dd1565b600f544210611dcc57611d67603c600354611d5591906152d6565b600f54611d6291906151c5565b6129ff565b506001601060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe942604051611db29190614909565b60405180910390a1611dc2612342565b5060029050611dd1565b600090505b90565b600080611df8611de384612f33565b600260009054906101000a9004600f0b6134f7565b9050611e0381613081565b67ffffffffffffffff16915050919050565b6000603c8242611e2591906151c5565b611e2f91906152d6565b9050919050565b611e43600860ff1661153b565b15611e4d57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ea757600080fd5b611eaf61123c565b8111611eba57600080fd5b6011547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe682604051611eec9190614909565b60405180910390a28060118190555050565b6000806000806000611f17611f1287611b2d565b612f33565b9350611f24600354611bd6565b9150611f3f84600260009054906101000a9004600f0b613002565b9250611f5d611f4d84613081565b67ffffffffffffffff168361156e565b945050505050919050565b6000611f7460006129ff565b905090565b600b5481565b6000806000611f8d84611264565b9150611f9884611503565b9050611fa482826111ec565b92505050919050565b600a5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461201057600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601082106121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90615353565b60405180910390fd5b600060125483161461220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906153bf565b60405180910390fd5b81601260008282541792505081905550600f6012541415157f6b7e2e653f93b645d4ed7292d6429f96637084363e477c8aaea1a43ed13c284e6012546040516122559190614909565b60405180910390a26012549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61229a600260ff1661153b565b156122a457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122fe57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061234c61481a565b61235461481a565b61235c61481a565b600080600080600061236c611f68565b50612375613583565b97506123808861127d565b1561239657600098505050505050505050612600565b6000600954815481106123ac576123ab6153df565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050955061245988612d6f565b94506001856124689190615059565b905061247386611503565b9350603c857f00000000000000000000000000000000000000000000000000000000000000006124a39190615265565b6124ad91906152d6565b91506124e96124e47f00000000000000000000000000000000000000000000000000000000000000006124df85612f33565b613002565b6130db565b92506124ff6000846124f961123c565b84612d83565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050506125bb87613719565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d675816040516125eb9190614909565b60405180910390a16001985050505050505050505b90565b60078054612610906150bc565b80601f016020809104026020016040519081016040528092919081815260200182805461263c906150bc565b80156126895780601f1061265e57610100808354040283529160200191612689565b820191906000526020600020905b81548152906001019060200180831161266c57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806126c183611dd4565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561274c57600080fd5b612754612342565b5080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e191906151c5565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516128c19190614909565b60405180910390a3600191505092915050565b6000806000806128e2611d07565b905060028160ff16036128fb57600093505050506129cf565b60008160ff161115612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990615139565b60405180910390fd5b61294a612342565b5061295485611dd4565b92506129613387856130b6565b91508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516129c09190614909565b60405180910390a38193505050505b92915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000601060009054906101000a900460ff1615612a29576000945050505050612b81565b612a34600354611bd6565b925060008303612a4b576000945050505050612b81565b600260009054906101000a9004600f0b9050600086118015612a6c57508286105b15612a75578592505b612a7e83612f33565b9150612aaa7f000000000000000000000000000000000000000000000000000000000000000083613002565b9350612ab5846130db565b9350612ad0600260009054906101000a9004600f0b85613002565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550603c83612b189190615265565b600354612b259190615059565b60038190555080600f0b836003547f1c9c74563c32efd114cb36fb5e432d9386c8254d08456614804a33a3088ab736600260009054906101000a9004600f0b604051612b719190614b19565b60405180910390a4829450505050505b919050565b60095481565b60115481565b6000612ba1600460ff1661153b565b15612bab57600080fd5b601060009054906101000a900460ff1615612bc557600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c1f57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000082612c4b9190615265565b7f0000000000000000000000000000000000000000000000000000000000000000612c769190615059565b9050600f548111612c8657600080fd5b80600f819055505050565b6000600b54905090565b6000612caa600160ff1661153b565b15612cb457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d0e57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000816000015163ffffffff169050919050565b612d8b61481a565b612d9361481a565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042612e5491906151c5565b612e5e91906152d6565b612e689190615059565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612eed57600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000677fffffffffffffff821115612f4a57600080fd5b6040829060020a029050919050565b60008082600f0b13612f6a57600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af612f8684613838565b600f0b02908060020a82049150509050919050565b60008082600f0b84600f0b0390507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612fef57506f7fffffffffffffffffffffffffffffff600f0b8113155b612ff857600080fd5b8091505092915050565b600080604083600f0b85600f0b029060008212600003808260020a82851804189250505090507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561306e57506f7fffffffffffffffffffffffffffffff600f0b8113155b61307757600080fd5b8091505092915050565b60008082600f0b121561309357600080fd5b604082600f0b9060008212600003808260020a8285180418925050509050919050565b6000806130c38584613168565b506130ce848461326f565b5060019150509392505050565b60006840000000000000000082600f0b126130f557600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b12156131295760009050613163565b6131606080700171547652b82fe1777d0ffda0d23a7d1284600f0b029060008212600003808260020a8285180418925050506139fe565b90505b919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036131c45760009350505050613269565b6131cd86611b2d565b925084831015613212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132099061545a565b60405180910390fd5b848361321e91906151c5565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036132cb576000935050505061332d565b6132d486611b2d565b925084836132e29190615059565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600061333d61481a565b600061334761123c565b90506000600160008054905061335d91906151c5565b8154811061336e5761336d6153df565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff1681525050816000600160008054905061344991906151c5565b8154811061345a576134596153df565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060019250505090565b60008082600f0b0361350857600080fd5b600082600f0b604085600f0b9060020a0281613527576135266152a7565b5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561357057506f7fffffffffffffffffffffffffffffff600f0b8113155b61357957600080fd5b8091505092915050565b61358b61481a565b61359361481a565b61359b61481a565b600080600954815481106135b2576135b16153df565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156136bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e191906154a6565b6fffffffffffffffffffffffffffffffff1690506136fe83612d6f565b811161370f57819350505050613716565b8293505050505b90565b600080600061372784611f7f565b61372f61123c565b61373991906151c5565b9150600a5461374783611dd4565b61375191906151c5565b905061377f600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261326f565b50836000015163ffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d3846040516137f39190614909565b60405180910390a360016009600082825461380e9190615059565b9250508190555080600a60008282546138279190615059565b925050819055508192505050919050565b60008082600f0b1361384957600080fd5b60008083600f0b9050680100000000000000008112613884576040819060008212600003808260020a82851804189250505090506040820191505b64010000000081126138b2576020819060008212600003808260020a82851804189250505090506020820191505b6201000081126138de576010819060008212600003808260020a82851804189250505090506010820191505b6101008112613909576008819060008212600003808260020a82851804189250505090506008820191505b60108112613933576004819060008212600003808260020a82851804189250505090506004820191505b6004811261395d576002819060008212600003808260020a82851804189250505090506002820191505b6002811261396c576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b60008113156139f1578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a8285180418925050509050613999565b5081945050505050919050565b60006840000000000000000082600f0b12613a1857600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215613a4c5760009050614815565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b1315613a9a57608070016a09e667f3bcc908b2fb1366ea957d3e8202908060020a820491505090505b60006740000000000000008416600f0b1315613ad35760807001306fe0a31b7152de8d5a46305c85edec8202908060020a820491505090505b60006720000000000000008416600f0b1315613b0c5760807001172b83c7d517adcdf7c8c50eb14a791f8202908060020a820491505090505b60006710000000000000008416600f0b1315613b4557608070010b5586cf9890f6298b92b71842a983638202908060020a820491505090505b60006708000000000000008416600f0b1315613b7e5760807001059b0d31585743ae7c548eb68ca417fd8202908060020a820491505090505b60006704000000000000008416600f0b1315613bb7576080700102c9a3e778060ee6f7caca4f7a29bde88202908060020a820491505090505b60006702000000000000008416600f0b1315613bf057608070010163da9fb33356d84a66ae336dcdfa3f8202908060020a820491505090505b60006701000000000000008416600f0b1315613c29576080700100b1afa5abcbed6129ab13ec11dc95438202908060020a820491505090505b600066800000000000008416600f0b1315613c6157608070010058c86da1c09ea1ff19d294cf2f679b8202908060020a820491505090505b600066400000000000008416600f0b1315613c995760807001002c605e2e8cec506d21bfc89a23a00f8202908060020a820491505090505b600066200000000000008416600f0b1315613cd1576080700100162f3904051fa128bca9c55c31e5df8202908060020a820491505090505b600066100000000000008416600f0b1315613d095760807001000b175effdc76ba38e31671ca9397258202908060020a820491505090505b600066080000000000008416600f0b1315613d41576080700100058ba01fb9f96d6cacd4b180917c3d8202908060020a820491505090505b600066040000000000008416600f0b1315613d7957608070010002c5cc37da9491d0985c348c68e7b38202908060020a820491505090505b600066020000000000008416600f0b1315613db15760807001000162e525ee054754457d59952920268202908060020a820491505090505b600066010000000000008416600f0b1315613de957608070010000b17255775c040618bf4a4ade83fc8202908060020a820491505090505b6000658000000000008416600f0b1315613e205760807001000058b91b5bc9ae2eed81e9b7d4cfab8202908060020a820491505090505b6000654000000000008416600f0b1315613e57576080700100002c5c89d5ec6ca4d7c8acc017b7c98202908060020a820491505090505b6000652000000000008416600f0b1315613e8e57608070010000162e43f4f831060e02d839a9d16d8202908060020a820491505090505b6000651000000000008416600f0b1315613ec5576080700100000b1721bcfc99d9f890ea069117638202908060020a820491505090505b6000650800000000008416600f0b1315613efc57608070010000058b90cf1e6d97f9ca14dbcc16288202908060020a820491505090505b6000650400000000008416600f0b1315613f335760807001000002c5c863b73f016468f6bac5ca2b8202908060020a820491505090505b6000650200000000008416600f0b1315613f6a576080700100000162e430e5a18f6119e3c02282a58202908060020a820491505090505b6000650100000000008416600f0b1315613fa15760807001000000b1721835514b86e6d96efd1bfe8202908060020a820491505090505b60006480000000008416600f0b1315613fd7576080700100000058b90c0b48c6be5df846c5b2ef8202908060020a820491505090505b60006440000000008416600f0b131561400d57608070010000002c5c8601cc6b9e94213c72737a8202908060020a820491505090505b60006420000000008416600f0b13156140435760807001000000162e42fff037df38aa2b219f068202908060020a820491505090505b60006410000000008416600f0b131561407957608070010000000b17217fba9c739aa5819f44f98202908060020a820491505090505b60006408000000008416600f0b13156140af5760807001000000058b90bfcdee5acd3c1cedc8238202908060020a820491505090505b60006404000000008416600f0b13156140e5576080700100000002c5c85fe31f35a6a30da1be508202908060020a820491505090505b60006402000000008416600f0b131561411b57608070010000000162e42ff0999ce3541b9fffcf8202908060020a820491505090505b60006401000000008416600f0b1315614151576080700100000000b17217f80f4ef5aadda455548202908060020a820491505090505b600063800000008416600f0b131561418657608070010000000058b90bfbf8479bd5a81b51ad8202908060020a820491505090505b600063400000008416600f0b13156141bb5760807001000000002c5c85fdf84bd62ae30a74cc8202908060020a820491505090505b600063200000008416600f0b13156141f0576080700100000000162e42fefb2fed257559bdaa8202908060020a820491505090505b600063100000008416600f0b13156142255760807001000000000b17217f7d5a7716bba4a9ae8202908060020a820491505090505b600063080000008416600f0b131561425a576080700100000000058b90bfbe9ddbac5e109cce8202908060020a820491505090505b600063040000008416600f0b131561428f57608070010000000002c5c85fdf4b15de6f17eb0d8202908060020a820491505090505b600063020000008416600f0b13156142c45760807001000000000162e42fefa494f1478fde058202908060020a820491505090505b600063010000008416600f0b13156142f957608070010000000000b17217f7d20cf927c8e94c8202908060020a820491505090505b6000628000008416600f0b131561432d5760807001000000000058b90bfbe8f71cb4e4b33d8202908060020a820491505090505b6000624000008416600f0b1315614361576080700100000000002c5c85fdf477b662b269458202908060020a820491505090505b6000622000008416600f0b131561439557608070010000000000162e42fefa3ae53369388c8202908060020a820491505090505b6000621000008416600f0b13156143c9576080700100000000000b17217f7d1d351a389d408202908060020a820491505090505b6000620800008416600f0b13156143fd57608070010000000000058b90bfbe8e8b2d3d4ede8202908060020a820491505090505b6000620400008416600f0b13156144315760807001000000000002c5c85fdf4741bea6e77e8202908060020a820491505090505b6000620200008416600f0b1315614465576080700100000000000162e42fefa39fe95583c28202908060020a820491505090505b6000620100008416600f0b13156144995760807001000000000000b17217f7d1cfb72b45e18202908060020a820491505090505b60006180008416600f0b13156144cc576080700100000000000058b90bfbe8e7cc35c3f08202908060020a820491505090505b60006140008416600f0b13156144ff57608070010000000000002c5c85fdf473e242ea388202908060020a820491505090505b60006120008416600f0b13156145325760807001000000000000162e42fefa39f02b772c8202908060020a820491505090505b60006110008416600f0b131561456557608070010000000000000b17217f7d1cf7d83c1a8202908060020a820491505090505b60006108008416600f0b13156145985760807001000000000000058b90bfbe8e7bdcbe2e8202908060020a820491505090505b60006104008416600f0b13156145cb576080700100000000000002c5c85fdf473dea871f8202908060020a820491505090505b60006102008416600f0b13156145fe57608070010000000000000162e42fefa39ef44d918202908060020a820491505090505b60006101008416600f0b1315614631576080700100000000000000b17217f7d1cf79e9498202908060020a820491505090505b600060808416600f0b131561466357608070010000000000000058b90bfbe8e7bce5448202908060020a820491505090505b600060408416600f0b13156146955760807001000000000000002c5c85fdf473de6eca8202908060020a820491505090505b600060208416600f0b13156146c7576080700100000000000000162e42fefa39ef366f8202908060020a820491505090505b600060108416600f0b13156146f95760807001000000000000000b17217f7d1cf79afa8202908060020a820491505090505b600060088416600f0b131561472b576080700100000000000000058b90bfbe8e7bcd6d8202908060020a820491505090505b600060048416600f0b131561475d57608070010000000000000002c5c85fdf473de6b28202908060020a820491505090505b600060028416600f0b131561478f5760807001000000000000000162e42fefa39ef3588202908060020a820491505090505b600060018416600f0b13156147c157608070010000000000000000b17217f7d1cf79ab8202908060020a820491505090505b604083600f0b9060008212600003808260020a828518041892505050603f03600f0b81908060020a820491505090506f7fffffffffffffffffffffffffffffff600f0b81111561481057600080fd5b809150505b919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061489082614865565b9050919050565b6148a081614885565b81146148ab57600080fd5b50565b6000813590506148bd81614897565b92915050565b6000602082840312156148d9576148d8614860565b5b60006148e7848285016148ae565b91505092915050565b6000819050919050565b614903816148f0565b82525050565b600060208201905061491e60008301846148fa565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61495981614924565b811461496457600080fd5b50565b60008135905061497681614950565b92915050565b60006020828403121561499257614991614860565b5b60006149a084828501614967565b91505092915050565b60008115159050919050565b6149be816149a9565b82525050565b60006020820190506149d960008301846149b5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a195780820151818401526020810190506149fe565b60008484015250505050565b6000601f19601f8301169050919050565b6000614a41826149df565b614a4b81856149ea565b9350614a5b8185602086016149fb565b614a6481614a25565b840191505092915050565b60006020820190508181036000830152614a898184614a36565b905092915050565b614a9a816148f0565b8114614aa557600080fd5b50565b600081359050614ab781614a91565b92915050565b60008060408385031215614ad457614ad3614860565b5b6000614ae2858286016148ae565b9250506020614af385828601614aa8565b9150509250929050565b600081600f0b9050919050565b614b1381614afd565b82525050565b6000602082019050614b2e6000830184614b0a565b92915050565b614b3d81614afd565b8114614b4857600080fd5b50565b600081359050614b5a81614b34565b92915050565b60008060408385031215614b7757614b76614860565b5b6000614b8585828601614aa8565b9250506020614b9685828601614b4b565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614bdd82614a25565b810181811067ffffffffffffffff82111715614bfc57614bfb614ba5565b5b80604052505050565b6000614c0f614856565b9050614c1b8282614bd4565b919050565b600063ffffffff82169050919050565b614c3981614c20565b8114614c4457600080fd5b50565b600081359050614c5681614c30565b92915050565b600068ffffffffffffffffff82169050919050565b614c7a81614c5c565b8114614c8557600080fd5b50565b600081359050614c9781614c71565b92915050565b600067ffffffffffffffff82169050919050565b614cba81614c9d565b8114614cc557600080fd5b50565b600081359050614cd781614cb1565b92915050565b600060608284031215614cf357614cf2614ba0565b5b614cfd6060614c05565b90506000614d0d84828501614c47565b6000830152506020614d2184828501614c88565b6020830152506040614d3584828501614cc8565b60408301525092915050565b600060608284031215614d5757614d56614860565b5b6000614d6584828501614cdd565b91505092915050565b600080600060608486031215614d8757614d86614860565b5b6000614d95868287016148ae565b9350506020614da6868287016148ae565b9250506040614db786828701614aa8565b9150509250925092565b600060208284031215614dd757614dd6614860565b5b6000614de584828501614aa8565b91505092915050565b60008060408385031215614e0557614e04614860565b5b6000614e1385828601614aa8565b9250506020614e2485828601614aa8565b9150509250929050565b614e3781614c20565b82525050565b614e4681614c5c565b82525050565b614e5581614c9d565b82525050565b6000606082019050614e706000830186614e2e565b614e7d6020830185614e3d565b614e8a6040830184614e4c565b949350505050565b600060ff82169050919050565b614ea881614e92565b82525050565b6000602082019050614ec36000830184614e9f565b92915050565b614ed281614885565b82525050565b6000602082019050614eed6000830184614ec9565b92915050565b60008060008060808587031215614f0d57614f0c614860565b5b6000614f1b87828801614aa8565b9450506020614f2c87828801614b4b565b9350506040614f3d87828801614aa8565b9250506060614f4e87828801614aa8565b91505092959194509250565b614f6381614c20565b82525050565b614f7281614c5c565b82525050565b614f8181614c9d565b82525050565b606082016000820151614f9d6000850182614f5a565b506020820151614fb06020850182614f69565b506040820151614fc36040850182614f78565b50505050565b6000606082019050614fde6000830184614f87565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61500981614fe4565b82525050565b60006020820190506150246000830184615000565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615064826148f0565b915061506f836148f0565b92508282019050808211156150875761508661502a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806150d457607f821691505b6020821081036150e7576150e661508d565b5b50919050565b7f4558504952454400000000000000000000000000000000000000000000000000600082015250565b60006151236007836149ea565b915061512e826150ed565b602082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b600061518f600a836149ea565b915061519a82615159565b602082019050919050565b600060208201905081810360008301526151be81615182565b9050919050565b60006151d0826148f0565b91506151db836148f0565b92508282039050818111156151f3576151f261502a565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b600061522f600a836149ea565b915061523a826151f9565b602082019050919050565b6000602082019050818103600083015261525e81615222565b9050919050565b6000615270826148f0565b915061527b836148f0565b9250828202615289816148f0565b915082820484148315176152a05761529f61502a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152e1826148f0565b91506152ec836148f0565b9250826152fc576152fb6152a7565b5b828204905092915050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b600061533d6011836149ea565b915061534882615307565b602082019050919050565b6000602082019050818103600083015261536c81615330565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b60006153a96012836149ea565b91506153b482615373565b602082019050919050565b600060208201905081810360008301526153d88161539c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b6000615444600d836149ea565b915061544f8261540e565b602082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b61548381614fe4565b811461548e57600080fd5b50565b6000815190506154a08161547a565b92915050565b6000602082840312156154bc576154bb614860565b5b60006154ca84828501615491565b9150509291505056fea2646970667358221220dd12d17c82bae51dab9df921745b40561cc71eacb629c0c8481b25a5153bddc264736f6c63430008110033 +\ No newline at end of file diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"int128","name":"_taxLevel","type":"int128"},{"internalType":"uint256","name":"_periodMinutes","type":"uint256"},{"internalType":"address","name":"_defaultSinkAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"Cap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int128","name":"_foo","type":"int128"},{"indexed":true,"internalType":"uint256","name":"_bar","type":"uint256"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_periodCount","type":"uint256"},{"indexed":true,"internalType":"int128","name":"_oldAmount","type":"int128"},{"indexed":false,"internalType":"int128","name":"_newAmount","type":"int128"}],"name":"Decayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"Period","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_final","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyExpiry","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"baseBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"decayBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"demurrageAmount","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"demurrageCycles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"int128","name":"_demurrageAmount","type":"int128"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastTimestamp","type":"uint256"}],"name":"getMinutesDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodCount","type":"uint256"}],"name":"getPeriodTimeDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"isEmptyRedistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redistributions","outputs":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"seal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirePeriod","type":"uint256"}],"name":"setExpirePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"sweep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"toBaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_participants","type":"uint256"},{"internalType":"int128","name":"_demurrageModifier","type":"int128"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] +[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"int128","name":"_decayLevel","type":"int128"},{"internalType":"uint256","name":"_periodMinutes","type":"uint256"},{"internalType":"address","name":"_defaultSinkAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"Cap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int128","name":"_foo","type":"int128"},{"indexed":true,"internalType":"uint256","name":"_bar","type":"uint256"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_periodCount","type":"uint256"},{"indexed":true,"internalType":"int128","name":"_oldAmount","type":"int128"},{"indexed":false,"internalType":"int128","name":"_newAmount","type":"int128"}],"name":"Decayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"Period","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_final","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyExpiry","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"baseBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"decayBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decayLevel","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"demurrageAmount","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"demurrageCycles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"int128","name":"_demurrageAmount","type":"int128"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastTimestamp","type":"uint256"}],"name":"getMinutesDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodCount","type":"uint256"}],"name":"getPeriodTimeDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"isEmptyRedistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redistributions","outputs":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"seal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirePeriod","type":"uint256"}],"name":"setExpirePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"sweep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"toBaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_participants","type":"uint256"},{"internalType":"int128","name":"_demurrageModifier","type":"int128"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] diff --git a/python/erc20_demurrage_token/token.py b/python/erc20_demurrage_token/token.py @@ -487,8 +487,8 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract): return tx - def tax_level(self, contract_address, sender_address=ZERO_ADDRESS): - return self.call_noarg('taxLevel', contract_address, sender_address=sender_address) + def decay_level(self, contract_address, sender_address=ZERO_ADDRESS): + return self.call_noarg('decayLevel', contract_address, sender_address=sender_address) def resolution_factor(self, contract_address, sender_address=ZERO_ADDRESS): @@ -669,7 +669,7 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract): @classmethod - def parse_tax_level(self, v): + def parse_decay_level(self, v): return abi_decode_single(ABIContractType.UINT256, v) diff --git a/solidity/DemurrageTokenSingleNocap.sol b/solidity/DemurrageTokenSingleNocap.sol @@ -67,9 +67,9 @@ contract DemurrageTokenSingleNocap { uint256 public immutable periodDuration; // Demurrage in ppm per minute - //uint256 public immutable taxLevel; + //uint256 public immutable decayLevel; // 64x64 - int128 public immutable taxLevel; + int128 public immutable decayLevel; // Addresses allowed to mint new tokens mapping (address => bool) minter; @@ -129,11 +129,11 @@ contract DemurrageTokenSingleNocap { event SealStateChange(bool indexed _final, uint256 _sealState); - constructor(string memory _name, string memory _symbol, uint8 _decimals, int128 _taxLevel, uint256 _periodMinutes, address _defaultSinkAddress) { - require(_taxLevel < (1 << 64)); + constructor(string memory _name, string memory _symbol, uint8 _decimals, int128 _decayLevel, uint256 _periodMinutes, address _defaultSinkAddress) { + require(_decayLevel < (1 << 64)); redistributionItem memory initialRedistribution; - //require(ABDKMath64x64.toUInt(_taxLevel) == 0); + //require(ABDKMath64x64.toUInt(_decayLevel) == 0); // ACL setup owner = msg.sender; @@ -149,7 +149,7 @@ contract DemurrageTokenSingleNocap { periodDuration = _periodMinutes * 60; demurrageAmount = ABDKMath64x64.fromUInt(1); - taxLevel = ABDKMath64x64.ln(_taxLevel); + decayLevel = ABDKMath64x64.ln(_decayLevel); initialRedistribution = toRedistribution(0, demurrageAmount, 0, 1); redistributions.push(initialRedistribution); @@ -448,7 +448,7 @@ contract DemurrageTokenSingleNocap { lastDemurrageAmount = toRedistributionDemurrageModifier(lastRedistribution); demurrageCounts = (periodDuration * currentPeriod) / 60; // TODO refactor decayby to take int128 then DRY with it - nextRedistributionDemurrage = ABDKMath64x64.exp(ABDKMath64x64.mul(taxLevel, ABDKMath64x64.fromUInt(demurrageCounts))); + nextRedistributionDemurrage = ABDKMath64x64.exp(ABDKMath64x64.mul(decayLevel, ABDKMath64x64.fromUInt(demurrageCounts))); nextRedistribution = toRedistribution(0, nextRedistributionDemurrage, totalSupply(), nextPeriod); redistributions.push(nextRedistribution); @@ -491,7 +491,7 @@ contract DemurrageTokenSingleNocap { } periodPoint = ABDKMath64x64.fromUInt(periodCount); - v = ABDKMath64x64.mul(taxLevel, periodPoint); + v = ABDKMath64x64.mul(decayLevel, periodPoint); v = ABDKMath64x64.exp(v); demurrageAmount = ABDKMath64x64.mul(demurrageAmount, v); @@ -533,7 +533,7 @@ contract DemurrageTokenSingleNocap { valuePoint = ABDKMath64x64.fromUInt(_value); periodPoint = ABDKMath64x64.fromUInt(_period); - v = ABDKMath64x64.mul(taxLevel, periodPoint); + v = ABDKMath64x64.mul(decayLevel, periodPoint); v = ABDKMath64x64.exp(v); v = ABDKMath64x64.mul(valuePoint, v); return ABDKMath64x64.toUInt(v);