commit a0557b35a0c77ea8abfcee0ee7f5c6da28fa5e50
parent 127c67e665e862e4e5a82ef92a2db881ac3f45cc
Author: lash <dev@holbrook.no>
Date: Fri, 27 May 2022 11:10:31 +0000
Fix cumulative distribution calculation bug in SingleNocap
Diffstat:
11 files changed, 136 insertions(+), 26 deletions(-)
diff --git a/python/erc20_demurrage_token/data/DemurrageTokenMultiCap.bin b/python/erc20_demurrage_token/data/DemurrageTokenMultiCap.bin
@@ -1 +1 @@
-610100604052620f42406d04ee2d6d415b85acef81000000006200002491906200040d565b6080908152503480156200003757600080fd5b5060405162003c1d38038062003c1d83398181016040528101906200005d9190620006df565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555086600690805190602001906200013092919062000324565b5085600790805190602001906200014992919062000324565b508460ff166008819055504260038190555060035460a08181525050603c836200017491906200040d565b60c08181525050620f42406d04ee2d6d415b85acef81000000006200019a91906200040d565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508360e081815250506000620001ff6000620f42406000600162000298640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600a8190555082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560ff16600a62000284919062000924565b600b819055505050505050505050620009da565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a021660010281179050710fffffffff00000000000000000000000000606860ff16879060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b8280546200033290620009a4565b90600052602060002090601f016020900481019282620003565760008555620003a2565b82601f106200037157805160ff1916838001178555620003a2565b82800160010185558215620003a2579182015b82811115620003a157825182559160200191906001019062000384565b5b509050620003b19190620003b5565b5090565b5b80821115620003d0576000816000905550600101620003b6565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200041a82620003d4565b91506200042783620003d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620004635762000462620003de565b5b828202905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004d7826200048c565b810181811067ffffffffffffffff82111715620004f957620004f86200049d565b5b80604052505050565b60006200050e6200046e565b90506200051c8282620004cc565b919050565b600067ffffffffffffffff8211156200053f576200053e6200049d565b5b6200054a826200048c565b9050602081019050919050565b60005b83811015620005775780820151818401526020810190506200055a565b8381111562000587576000848401525b50505050565b6000620005a46200059e8462000521565b62000502565b905082815260208101848484011115620005c357620005c262000487565b5b620005d084828562000557565b509392505050565b600082601f830112620005f057620005ef62000482565b5b8151620006028482602086016200058d565b91505092915050565b600060ff82169050919050565b62000623816200060b565b81146200062f57600080fd5b50565b600081519050620006438162000618565b92915050565b6200065481620003d4565b81146200066057600080fd5b50565b600081519050620006748162000649565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006a7826200067a565b9050919050565b620006b9816200069a565b8114620006c557600080fd5b50565b600081519050620006d981620006ae565b92915050565b600080600080600080600060e0888a03121562000701576200070062000478565b5b600088015167ffffffffffffffff8111156200072257620007216200047d565b5b620007308a828b01620005d8565b975050602088015167ffffffffffffffff8111156200075457620007536200047d565b5b620007628a828b01620005d8565b9650506040620007758a828b0162000632565b9550506060620007888a828b0162000663565b94505060806200079b8a828b0162000663565b93505060a0620007ae8a828b01620006c8565b92505060c0620007c18a828b0162000663565b91505092959891949750929550565b6000600282049050919050565b6000808291508390505b60018511156200082f57808604811115620008075762000806620003de565b5b6001851615620008175780820291505b80810290506200082785620007d0565b9450620007e7565b94509492505050565b6000826200084a57600190506200091d565b816200085a57600090506200091d565b81600181146200087357600281146200087e57620008b4565b60019150506200091d565b60ff841115620008935762000892620003de565b5b8360020a915084821115620008ad57620008ac620003de565b5b506200091d565b5060208310610133831016604e8410600b8410161715620008ee5782820a905083811115620008e857620008e7620003de565b5b6200091d565b620008fd8484846001620007dd565b92509050818404811115620009175762000916620003de565b5b81810290505b9392505050565b60006200093182620003d4565b91506200093e83620003d4565b92506200096d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000838565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009bd57607f821691505b60208210811415620009d457620009d362000975565b5b50919050565b60805160a05160c05160e0516131ca62000a5360003960008181610d3501528181610f90015281816110fb01528181611d9a0152818161239b01526123d301526000818161140201528181611d480152611e3501526000818161142e01528181611e560152611e9b01526000611d2401526131ca6000f3fe608060405234801561001057600080fd5b506004361061027b576000357c0100000000000000000000000000000000000000000000000000000000900480636787a9be1161016357806395d89b41116100e0578063b470aade116100a4578063b470aade14610832578063e3ab207a14610850578063e54d63f714610880578063e8095295146108b0578063eda4e6d6146108ce578063f2fde38b146108ec5761027b565b806395d89b4114610766578063983b2d56146107845780639da7d8ba146107b4578063a9059cbb146107e4578063ab28cea0146108145761027b565b8063731f237c11610127578063731f237c146106d057806379ba5097146106ee5780638da5cb5b1461070c5780638f1df6bc1461072a5780638f770ad0146107485761027b565b80636787a9be146105e05780636a2d094e146106105780636d5055a6146106405780636ffa8a051461067057806370a08231146106a05761027b565b806331333487116101fc578063449a52f8116101c0578063449a52f8146104e457806347a50517146105145780634abfbba21461054457806351b4541c14610574578063573cc507146105a457806358b2833b146105c25761027b565b80633133348714610406578063313ce5671461043657806335b16eb81461045457806340452d911461048457806340fc89f5146104b45761027b565b80631989c6a8116102435780631989c6a81461033a578063216ea5ec14610358578063229ba1971461038857806323b872dd146103a65780633092afd5146103d65761027b565b806301ffc9a71461028057806306fdde03146102b0578063095ea7b3146102ce57806309f28f3c146102fe57806318160ddd1461031c575b600080fd5b61029a6004803603810190610295919061294f565b61091c565b6040516102a79190612997565b60405180910390f35b6102b8610ac7565b6040516102c59190612a4b565b60405180910390f35b6102e860048036038101906102e39190612b01565b610b55565b6040516102f59190612997565b60405180910390f35b610306610c79565b6040516103139190612b6c565b60405180910390f35b610324610c9b565b6040516103319190612b96565b60405180910390f35b610342610ca1565b60405161034f9190612b96565b60405180910390f35b610372600480360381019061036d9190612bb1565b610cad565b60405161037f9190612b96565b60405180910390f35b610390610d33565b60405161039d9190612b96565b60405180910390f35b6103c060048036038101906103bb9190612bf1565b610d57565b6040516103cd9190612997565b60405180910390f35b6103f060048036038101906103eb9190612c44565b610e81565b6040516103fd9190612997565b60405180910390f35b610420600480360381019061041b9190612bb1565b610f74565b60405161042d9190612b96565b60405180910390f35b61043e611025565b60405161044b9190612b96565b60405180910390f35b61046e60048036038101906104699190612c44565b61102b565b60405161047b9190612997565b60405180910390f35b61049e60048036038101906104999190612c71565b61122b565b6040516104ab9190612cb7565b60405180910390f35b6104ce60048036038101906104c99190612cfe565b61124f565b6040516104db9190612b96565b60405180910390f35b6104fe60048036038101906104f99190612b01565b611280565b60405161050b9190612997565b60405180910390f35b61052e60048036038101906105299190612c44565b6113a6565b60405161053b9190612b96565b60405180910390f35b61055e60048036038101906105599190612c71565b6113fe565b60405161056b9190612b96565b60405180910390f35b61058e60048036038101906105899190612c71565b61145e565b60405161059b9190612b96565b60405180910390f35b6105ac61147f565b6040516105b99190612b96565b60405180910390f35b6105ca611485565b6040516105d79190612b96565b60405180910390f35b6105fa60048036038101906105f59190612c71565b61148b565b6040516106079190612b96565b60405180910390f35b61062a60048036038101906106259190612c71565b6114f7565b6040516106379190612b96565b60405180910390f35b61065a60048036038101906106559190612c44565b611518565b6040516106679190612b96565b60405180910390f35b61068a60048036038101906106859190612cfe565b611583565b6040516106979190612b96565b60405180910390f35b6106ba60048036038101906106b59190612c44565b6115b6565b6040516106c79190612b96565b60405180910390f35b6106d861165f565b6040516106e59190612997565b60405180910390f35b6106f6611781565b6040516107039190612997565b60405180910390f35b610714611928565b6040516107219190612d3a565b60405180910390f35b61073261194e565b60405161073f9190612997565b60405180910390f35b610750611b05565b60405161075d9190612b96565b60405180910390f35b61076e611b0b565b60405161077b9190612a4b565b60405180910390f35b61079e60048036038101906107999190612c44565b611b99565b6040516107ab9190612997565b60405180910390f35b6107ce60048036038101906107c99190612cfe565b611c56565b6040516107db9190612b96565b60405180910390f35b6107fe60048036038101906107f99190612b01565b611c82565b60405161080b9190612997565b60405180910390f35b61081c611d22565b6040516108299190612b96565b60405180910390f35b61083a611d46565b6040516108479190612b96565b60405180910390f35b61086a60048036038101906108659190612cfe565b611d6a565b6040516108779190612b96565b60405180910390f35b61089a60048036038101906108959190612bb1565b611d7e565b6040516108a79190612b96565b60405180910390f35b6108b8611e2f565b6040516108c59190612b6c565b60405180910390f35b6108d6611e99565b6040516108e39190612b96565b60405180910390f35b61090660048036038101906109019190612c44565b611ebd565b6040516109139190612997565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156109715760019050610ac2565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156109c45760019050610ac2565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610a175760019050610ac2565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610a6a5760019050610ac2565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610abd5760019050610ac2565b600090505b919050565b60068054610ad490612d84565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090612d84565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b505050505081565b600080610b6061194e565b50610b6a3361102b565b50610b748361148b565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c029190612de5565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c669190612b96565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60095481565b60008080549050905090565b600080600080851415610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec90612e87565b60405180910390fd5b838510610d0157600080fd5b8484610d0d9190612ed6565b91508482610d1b9190612f07565b90508084610d299190612f61565b9250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610d6461194e565b50610d6e3361102b565b50610d788461148b565b915081600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e0357600080fd5b610e0e868684611f5f565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610e6d9190612b96565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f0a57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610f1357600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806000620f424091506d04ee2d6d415b85acef81000000007f0000000000000000000000000000000000000000000000000000000000000000610fb99190612ed6565b905060005b8481101561100057620f42408284610fd69190612f07565b610fe09190612ed6565b83610feb9190612f61565b92508080610ff890612f95565b915050610fbe565b50620f424085836110119190612f07565b61101b9190612ed6565b9250505092915050565b60085481565b60008060008060008060008061104089611518565b9150600082148061106a5750611054611e2f565b6fffffffffffffffffffffffffffffffff168210155b1561107f576000975050505050505050611226565b600060018361108e9190612f61565b8154811061109f5761109e612fde565b5b906000526020600020015496506110b58761124f565b945060008514156110d0576000975050505050505050611226565b6110d987611c56565b95506110e487611583565b90506d04ee2d6d415b85acef8100000000620f42407f00000000000000000000000000000000000000000000000000000000000000006111249190612ed6565b86886111309190612ed6565b61113a9190612f07565b6111449190612ed6565b9350620f424081856111569190612f07565b6111609190612ed6565b92506cffffffff00000000000000000019600102600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055506111ca8984612003565b50818973ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d3856040516112129190612b96565b60405180910390a360019750505050505050505b919050565b6000818154811061123b57600080fd5b906000526020600020016000915090505481565b6000606860ff16710fffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112d957600080fd5b600a54600954846112ea9190612de5565b11156112f557600080fd5b6112fd61194e565b506113078361148b565b9050826009600082825461131b9190612de5565b9250508190555061132c8482612003565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560405161138a9190612b96565b60405180910390a361139a61215f565b50600191505092915050565b600068ffffffffffffffffff600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460019004169050919050565b60007f00000000000000000000000000000000000000000000000000000000000000008261142c9190612f07565b7f00000000000000000000000000000000000000000000000000000000000000006114579190612de5565b9050919050565b6000603c824261146e9190612f61565b6114789190612ed6565b9050919050565b600b5481565b60035481565b6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16620f42406d04ee2d6d415b85acef8100000000846114dc9190612f07565b6114e69190612f07565b6114f09190612ed6565b9050919050565b6000603c82426115079190612f61565b6115119190612ed6565b9050919050565b6000604860ff166cffffffff000000000000000000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900416908060020a82049150509050919050565b6000608c60ff1673fffff00000000000000000000000000000000000836001900416908060020a82049150509050919050565b6000806000806115c5856113a6565b92506115d260035461145e565b905061160e600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682610f74565b6fffffffffffffffffffffffffffffffff169150620f42406d04ee2d6d415b85acef810000000061163f9190612f07565b828461164b9190612f07565b6116559190612ed6565b9350505050919050565b60008060008061167060035461145e565b92506000831415611687576000935050505061177e565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1691506116c48284610f74565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c836117099190612f07565b6003546117169190612de5565b60038190555081836003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff1660405161176e9190613048565b60405180910390a4600193505050505b90565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117de57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600080600061196761165f565b506119706121fb565b995060006001028a14156119915760009a5050505050505050505050611b02565b61199a8a611d6a565b97506001886119a99190612de5565b90506119b4886113fe565b9150600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1694506119f2826114f7565b92506000831115611a27576d04ee2d6d415b85acef8100000000611a168685611d7e565b611a209190612ed6565b9350611a44565b6d04ee2d6d415b85acef810000000085611a419190612ed6565b93505b611a53600085600954846122f6565b98506000899080600181540180825580915050600190039060005260206000200160009091909190915055611a878a61124f565b96506000871415611aa257611a9b8a612382565b9550611abc565b611aae87600954610cad565b9550611aba8689612529565b505b7f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d67581604051611aeb9190612b96565b60405180910390a160019a50505050505050505050505b90565b600a5481565b60078054611b1890612d84565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4490612d84565b8015611b915780601f10611b6657610100808354040283529160200191611b91565b820191906000526020600020905b815481529060010190602001808311611b7457829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bf557600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b6000806000611c8f61194e565b50611c993361102b565b50611ca38461148b565b9150611cb0338684611f5f565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611d0f9190612b96565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063ffffffff8260019004169050919050565b6000806000620f424091506d04ee2d6d415b85acef81000000007f0000000000000000000000000000000000000000000000000000000000000000611dc39190612ed6565b905060005b84811015611e0a57620f42408284611de09190612f07565b611dea9190612ed6565b83611df59190612de5565b92508080611e0290612f95565b915050611dc8565b50620f42408583611e1b9190612f07565b611e259190612ed6565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042611e809190612f61565b611e8a9190612ed6565b611e949190612de5565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f1957600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b600080611f6c8584612613565b50611f778484612003565b50611f80611e2f565b6fffffffffffffffffffffffffffffffff169050600b548310158015611fae575080611fab86611518565b14155b8015611fe657508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611ff757611ff58582612744565b505b60019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460019004905060008514156120645760009350505050612159565b61206d866113a6565b9250848361207b9190612de5565b91508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16116120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e2906130af565b60405180910390fd5b68ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600060016000805490506121769190612f61565b8154811061218757612186612fde565b5b90600052602060002001546001900490506cffffffffffffffffff000000001981169050602060ff166009549060020a028117905080600102600060016000805490506121d49190612f61565b815481106121e5576121e4612fde565b5b9060005260206000200181905550600191505090565b60008060008060016000805490506122139190612f61565b8154811061222457612223612fde565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015612298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122bc91906130fb565b6fffffffffffffffffffffffffffffffff1690506122d982611d6a565b81116122ed576000600102925050506122f3565b81925050505b90565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a021660010281179050710fffffffff00000000000000000000000000606860ff16879060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b600080600080600061239386611c56565b9350620f42407f0000000000000000000000000000000000000000000000000000000000000000856123c59190612f07565b6123cf9190612ed6565b91507f0000000000000000000000000000000000000000000000000000000000000000620f4240836124019190612f07565b61240b9190612ed6565b9050838110156124d75761241e86611d6a565b9250710fffffffff000000000000000000000000001960010260006001856124469190612f61565b8154811061245757612456612fde565b5b9060005260206000200160008282541692505081905550606860ff1660019060020a027f80000000000000000000000000000000000000000000000000000000000000001760010260006001856124ae9190612f61565b815481106124bf576124be612fde565b5b90600052602060002001600082825417925050819055505b61251c600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166d04ee2d6d415b85acef8100000000846125179190612ed6565b612003565b5081945050505050919050565b600080600084141561253f57600091505061260d565b7f800000000000000000000000000000000000000000000000000000000000000060010260006001856125729190612f61565b8154811061258357612582612fde565b5b90600052602060002001600082825417925050819055506125cd60006001856125ac9190612f61565b815481106125bd576125bc612fde565b5b9060005260206000200154611c56565b9050612606600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685836126019190612f61565b612003565b5060019150505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900490506000851415612674576000935050505061273e565b61267d866113a6565b9250848310156126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b990613174565b60405180910390fd5b84836126ce9190612f61565b915068ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b60006cffffffff00000000000000000019600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055506cffffffff000000000000000000604860ff16839060020a0216600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282541792505081905550612815612820565b506001905092915050565b6000806000806000600160008054905061283a9190612f61565b8154811061284b5761284a612fde565b5b9060005260206000200154925060016128638461124f565b61286d9190612de5565b905082600190049150710fffffffff000000000000000000000000001982169150710fffffffff00000000000000000000000000606860ff16829060020a02168217915081600102600060016000805490506128c99190612f61565b815481106128da576128d9612fde565b5b90600052602060002001819055506001935050505090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61292c816128f7565b811461293757600080fd5b50565b60008135905061294981612923565b92915050565b600060208284031215612965576129646128f2565b5b60006129738482850161293a565b91505092915050565b60008115159050919050565b6129918161297c565b82525050565b60006020820190506129ac6000830184612988565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129ec5780820151818401526020810190506129d1565b838111156129fb576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a1d826129b2565b612a2781856129bd565b9350612a378185602086016129ce565b612a4081612a01565b840191505092915050565b60006020820190508181036000830152612a658184612a12565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a9882612a6d565b9050919050565b612aa881612a8d565b8114612ab357600080fd5b50565b600081359050612ac581612a9f565b92915050565b6000819050919050565b612ade81612acb565b8114612ae957600080fd5b50565b600081359050612afb81612ad5565b92915050565b60008060408385031215612b1857612b176128f2565b5b6000612b2685828601612ab6565b9250506020612b3785828601612aec565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b612b6681612b41565b82525050565b6000602082019050612b816000830184612b5d565b92915050565b612b9081612acb565b82525050565b6000602082019050612bab6000830184612b87565b92915050565b60008060408385031215612bc857612bc76128f2565b5b6000612bd685828601612aec565b9250506020612be785828601612aec565b9150509250929050565b600080600060608486031215612c0a57612c096128f2565b5b6000612c1886828701612ab6565b9350506020612c2986828701612ab6565b9250506040612c3a86828701612aec565b9150509250925092565b600060208284031215612c5a57612c596128f2565b5b6000612c6884828501612ab6565b91505092915050565b600060208284031215612c8757612c866128f2565b5b6000612c9584828501612aec565b91505092915050565b6000819050919050565b612cb181612c9e565b82525050565b6000602082019050612ccc6000830184612ca8565b92915050565b612cdb81612c9e565b8114612ce657600080fd5b50565b600081359050612cf881612cd2565b92915050565b600060208284031215612d1457612d136128f2565b5b6000612d2284828501612ce9565b91505092915050565b612d3481612a8d565b82525050565b6000602082019050612d4f6000830184612d2b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d9c57607f821691505b60208210811415612db057612daf612d55565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612df082612acb565b9150612dfb83612acb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e3057612e2f612db6565b5b828201905092915050565b7f4552525f4e554d50415254535f5a45524f000000000000000000000000000000600082015250565b6000612e716011836129bd565b9150612e7c82612e3b565b602082019050919050565b60006020820190508181036000830152612ea081612e64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ee182612acb565b9150612eec83612acb565b925082612efc57612efb612ea7565b5b828204905092915050565b6000612f1282612acb565b9150612f1d83612acb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f5657612f55612db6565b5b828202905092915050565b6000612f6c82612acb565b9150612f7783612acb565b925082821015612f8a57612f89612db6565b5b828203905092915050565b6000612fa082612acb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fd357612fd2612db6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061303261302d61302884612b41565b61300d565b612acb565b9050919050565b61304281613017565b82525050565b600060208201905061305d6000830184613039565b92915050565b7f4552525f574f554c445752415000000000000000000000000000000000000000600082015250565b6000613099600d836129bd565b91506130a482613063565b602082019050919050565b600060208201905081810360008301526130c88161308c565b9050919050565b6130d881612b41565b81146130e357600080fd5b50565b6000815190506130f5816130cf565b92915050565b600060208284031215613111576131106128f2565b5b600061311f848285016130e6565b91505092915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b600061315e600d836129bd565b915061316982613128565b602082019050919050565b6000602082019050818103600083015261318d81613151565b905091905056fea2646970667358221220ac7aec2600370aea4fd0eaf84b0dd8139ddc68a1233b4eb187bf642dd42b866b64736f6c634300080b0033
-\ No newline at end of file
+610100604052620f42406d04ee2d6d415b85acef81000000006200002491906200040d565b6080908152503480156200003757600080fd5b5060405162003c0d38038062003c0d83398181016040528101906200005d9190620006df565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555086600690805190602001906200013092919062000324565b5085600790805190602001906200014992919062000324565b508460ff166008819055504260038190555060035460a08181525050603c836200017491906200040d565b60c08181525050620f42406d04ee2d6d415b85acef81000000006200019a91906200040d565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508360e081815250506000620001ff6000620f42406000600162000298640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600a8190555082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560ff16600a62000284919062000924565b600b819055505050505050505050620009d9565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a021660010281179050710fffffffff00000000000000000000000000606860ff16879060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b8280546200033290620009a4565b90600052602060002090601f016020900481019282620003565760008555620003a2565b82601f106200037157805160ff1916838001178555620003a2565b82800160010185558215620003a2579182015b82811115620003a157825182559160200191906001019062000384565b5b509050620003b19190620003b5565b5090565b5b80821115620003d0576000816000905550600101620003b6565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200041a82620003d4565b91506200042783620003d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620004635762000462620003de565b5b828202905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004d7826200048c565b810181811067ffffffffffffffff82111715620004f957620004f86200049d565b5b80604052505050565b60006200050e6200046e565b90506200051c8282620004cc565b919050565b600067ffffffffffffffff8211156200053f576200053e6200049d565b5b6200054a826200048c565b9050602081019050919050565b60005b83811015620005775780820151818401526020810190506200055a565b8381111562000587576000848401525b50505050565b6000620005a46200059e8462000521565b62000502565b905082815260208101848484011115620005c357620005c262000487565b5b620005d084828562000557565b509392505050565b600082601f830112620005f057620005ef62000482565b5b8151620006028482602086016200058d565b91505092915050565b600060ff82169050919050565b62000623816200060b565b81146200062f57600080fd5b50565b600081519050620006438162000618565b92915050565b6200065481620003d4565b81146200066057600080fd5b50565b600081519050620006748162000649565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006a7826200067a565b9050919050565b620006b9816200069a565b8114620006c557600080fd5b50565b600081519050620006d981620006ae565b92915050565b600080600080600080600060e0888a03121562000701576200070062000478565b5b600088015167ffffffffffffffff8111156200072257620007216200047d565b5b620007308a828b01620005d8565b975050602088015167ffffffffffffffff8111156200075457620007536200047d565b5b620007628a828b01620005d8565b9650506040620007758a828b0162000632565b9550506060620007888a828b0162000663565b94505060806200079b8a828b0162000663565b93505060a0620007ae8a828b01620006c8565b92505060c0620007c18a828b0162000663565b91505092959891949750929550565b6000600282049050919050565b6000808291508390505b60018511156200082f57808604811115620008075762000806620003de565b5b6001851615620008175780820291505b80810290506200082785620007d0565b9450620007e7565b94509492505050565b6000826200084a57600190506200091d565b816200085a57600090506200091d565b81600181146200087357600281146200087e57620008b4565b60019150506200091d565b60ff841115620008935762000892620003de565b5b8360020a915084821115620008ad57620008ac620003de565b5b506200091d565b5060208310610133831016604e8410600b8410161715620008ee5782820a905083811115620008e857620008e7620003de565b5b6200091d565b620008fd8484846001620007dd565b92509050818404811115620009175762000916620003de565b5b81810290505b9392505050565b60006200093182620003d4565b91506200093e83620003d4565b92506200096d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000838565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009bd57607f821691505b602082108103620009d357620009d262000975565b5b50919050565b60805160a05160c05160e0516131bb62000a5260003960008181610d2f01528181610f8a015281816110f401528181611d900152818161239001526123c80152600081816113fb01528181611d3e0152611e2b01526000818161142701528181611e4c0152611e9101526000611d1a01526131bb6000f3fe608060405234801561001057600080fd5b506004361061027b576000357c0100000000000000000000000000000000000000000000000000000000900480636787a9be1161016357806395d89b41116100e0578063b470aade116100a4578063b470aade14610832578063e3ab207a14610850578063e54d63f714610880578063e8095295146108b0578063eda4e6d6146108ce578063f2fde38b146108ec5761027b565b806395d89b4114610766578063983b2d56146107845780639da7d8ba146107b4578063a9059cbb146107e4578063ab28cea0146108145761027b565b8063731f237c11610127578063731f237c146106d057806379ba5097146106ee5780638da5cb5b1461070c5780638f1df6bc1461072a5780638f770ad0146107485761027b565b80636787a9be146105e05780636a2d094e146106105780636d5055a6146106405780636ffa8a051461067057806370a08231146106a05761027b565b806331333487116101fc578063449a52f8116101c0578063449a52f8146104e457806347a50517146105145780634abfbba21461054457806351b4541c14610574578063573cc507146105a457806358b2833b146105c25761027b565b80633133348714610406578063313ce5671461043657806335b16eb81461045457806340452d911461048457806340fc89f5146104b45761027b565b80631989c6a8116102435780631989c6a81461033a578063216ea5ec14610358578063229ba1971461038857806323b872dd146103a65780633092afd5146103d65761027b565b806301ffc9a71461028057806306fdde03146102b0578063095ea7b3146102ce57806309f28f3c146102fe57806318160ddd1461031c575b600080fd5b61029a60048036038101906102959190612942565b61091c565b6040516102a7919061298a565b60405180910390f35b6102b8610ac2565b6040516102c59190612a3e565b60405180910390f35b6102e860048036038101906102e39190612af4565b610b50565b6040516102f5919061298a565b60405180910390f35b610306610c74565b6040516103139190612b5f565b60405180910390f35b610324610c96565b6040516103319190612b89565b60405180910390f35b610342610c9c565b60405161034f9190612b89565b60405180910390f35b610372600480360381019061036d9190612ba4565b610ca8565b60405161037f9190612b89565b60405180910390f35b610390610d2d565b60405161039d9190612b89565b60405180910390f35b6103c060048036038101906103bb9190612be4565b610d51565b6040516103cd919061298a565b60405180910390f35b6103f060048036038101906103eb9190612c37565b610e7b565b6040516103fd919061298a565b60405180910390f35b610420600480360381019061041b9190612ba4565b610f6e565b60405161042d9190612b89565b60405180910390f35b61043e61101f565b60405161044b9190612b89565b60405180910390f35b61046e60048036038101906104699190612c37565b611025565b60405161047b919061298a565b60405180910390f35b61049e60048036038101906104999190612c64565b611224565b6040516104ab9190612caa565b60405180910390f35b6104ce60048036038101906104c99190612cf1565b611248565b6040516104db9190612b89565b60405180910390f35b6104fe60048036038101906104f99190612af4565b611279565b60405161050b919061298a565b60405180910390f35b61052e60048036038101906105299190612c37565b61139f565b60405161053b9190612b89565b60405180910390f35b61055e60048036038101906105599190612c64565b6113f7565b60405161056b9190612b89565b60405180910390f35b61058e60048036038101906105899190612c64565b611457565b60405161059b9190612b89565b60405180910390f35b6105ac611478565b6040516105b99190612b89565b60405180910390f35b6105ca61147e565b6040516105d79190612b89565b60405180910390f35b6105fa60048036038101906105f59190612c64565b611484565b6040516106079190612b89565b60405180910390f35b61062a60048036038101906106259190612c64565b6114f0565b6040516106379190612b89565b60405180910390f35b61065a60048036038101906106559190612c37565b611511565b6040516106679190612b89565b60405180910390f35b61068a60048036038101906106859190612cf1565b61157c565b6040516106979190612b89565b60405180910390f35b6106ba60048036038101906106b59190612c37565b6115af565b6040516106c79190612b89565b60405180910390f35b6106d8611658565b6040516106e5919061298a565b60405180910390f35b6106f6611779565b604051610703919061298a565b60405180910390f35b610714611920565b6040516107219190612d2d565b60405180910390f35b610732611946565b60405161073f919061298a565b60405180910390f35b610750611afb565b60405161075d9190612b89565b60405180910390f35b61076e611b01565b60405161077b9190612a3e565b60405180910390f35b61079e60048036038101906107999190612c37565b611b8f565b6040516107ab919061298a565b60405180910390f35b6107ce60048036038101906107c99190612cf1565b611c4c565b6040516107db9190612b89565b60405180910390f35b6107fe60048036038101906107f99190612af4565b611c78565b60405161080b919061298a565b60405180910390f35b61081c611d18565b6040516108299190612b89565b60405180910390f35b61083a611d3c565b6040516108479190612b89565b60405180910390f35b61086a60048036038101906108659190612cf1565b611d60565b6040516108779190612b89565b60405180910390f35b61089a60048036038101906108959190612ba4565b611d74565b6040516108a79190612b89565b60405180910390f35b6108b8611e25565b6040516108c59190612b5f565b60405180910390f35b6108d6611e8f565b6040516108e39190612b89565b60405180910390f35b61090660048036038101906109019190612c37565b611eb3565b604051610913919061298a565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109705760019050610abd565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109c25760019050610abd565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a145760019050610abd565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a665760019050610abd565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610ab85760019050610abd565b600090505b919050565b60068054610acf90612d77565b80601f0160208091040260200160405190810160405280929190818152602001828054610afb90612d77565b8015610b485780601f10610b1d57610100808354040283529160200191610b48565b820191906000526020600020905b815481529060010190602001808311610b2b57829003601f168201915b505050505081565b600080610b5b611946565b50610b6533611025565b50610b6f83611484565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bfd9190612dd7565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c619190612b89565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60095481565b60008080549050905090565b6000806000808503610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612e79565b60405180910390fd5b838510610cfb57600080fd5b8484610d079190612ec8565b91508482610d159190612ef9565b90508084610d239190612f53565b9250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610d5e611946565b50610d6833611025565b50610d7284611484565b915081600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610dfd57600080fd5b610e08868684611f55565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610e679190612b89565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f0457503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610f0d57600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806000620f424091506d04ee2d6d415b85acef81000000007f0000000000000000000000000000000000000000000000000000000000000000610fb39190612ec8565b905060005b84811015610ffa57620f42408284610fd09190612ef9565b610fda9190612ec8565b83610fe59190612f53565b92508080610ff290612f87565b915050610fb8565b50620f4240858361100b9190612ef9565b6110159190612ec8565b9250505092915050565b60085481565b60008060008060008060008061103a89611511565b91506000821480611064575061104e611e25565b6fffffffffffffffffffffffffffffffff168210155b1561107957600097505050505050505061121f565b60006001836110889190612f53565b8154811061109957611098612fcf565b5b906000526020600020015496506110af87611248565b9450600085036110c957600097505050505050505061121f565b6110d287611c4c565b95506110dd8761157c565b90506d04ee2d6d415b85acef8100000000620f42407f000000000000000000000000000000000000000000000000000000000000000061111d9190612ec8565b86886111299190612ec8565b6111339190612ef9565b61113d9190612ec8565b9350620f4240818561114f9190612ef9565b6111599190612ec8565b92506cffffffff00000000000000000019600102600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055506111c38984611ff9565b50818973ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d38560405161120b9190612b89565b60405180910390a360019750505050505050505b919050565b6000818154811061123457600080fd5b906000526020600020016000915090505481565b6000606860ff16710fffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112d257600080fd5b600a54600954846112e39190612dd7565b11156112ee57600080fd5b6112f6611946565b5061130083611484565b905082600960008282546113149190612dd7565b925050819055506113258482611ff9565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516113839190612b89565b60405180910390a3611393612154565b50600191505092915050565b600068ffffffffffffffffff600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460019004169050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000826114259190612ef9565b7f00000000000000000000000000000000000000000000000000000000000000006114509190612dd7565b9050919050565b6000603c82426114679190612f53565b6114719190612ec8565b9050919050565b600b5481565b60035481565b6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16620f42406d04ee2d6d415b85acef8100000000846114d59190612ef9565b6114df9190612ef9565b6114e99190612ec8565b9050919050565b6000603c82426115009190612f53565b61150a9190612ec8565b9050919050565b6000604860ff166cffffffff000000000000000000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900416908060020a82049150509050919050565b6000608c60ff1673fffff00000000000000000000000000000000000836001900416908060020a82049150509050919050565b6000806000806115be8561139f565b92506115cb600354611457565b9050611607600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682610f6e565b6fffffffffffffffffffffffffffffffff169150620f42406d04ee2d6d415b85acef81000000006116389190612ef9565b82846116449190612ef9565b61164e9190612ec8565b9350505050919050565b600080600080611669600354611457565b92506000830361167f5760009350505050611776565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1691506116bc8284610f6e565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c836117019190612ef9565b60035461170e9190612dd7565b60038190555081836003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff166040516117669190613039565b60405180910390a4600193505050505b90565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117d657600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600080600061195f611658565b506119686121f0565b995060006001028a036119885760009a5050505050505050505050611af8565b6119918a611d60565b97506001886119a09190612dd7565b90506119ab886113f7565b9150600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1694506119e9826114f0565b92506000831115611a1e576d04ee2d6d415b85acef8100000000611a0d8685611d74565b611a179190612ec8565b9350611a3b565b6d04ee2d6d415b85acef810000000085611a389190612ec8565b93505b611a4a600085600954846122eb565b98506000899080600181540180825580915050600190039060005260206000200160009091909190915055611a7e8a611248565b965060008703611a9857611a918a612377565b9550611ab2565b611aa487600954610ca8565b9550611ab0868961251e565b505b7f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d67581604051611ae19190612b89565b60405180910390a160019a50505050505050505050505b90565b600a5481565b60078054611b0e90612d77565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3a90612d77565b8015611b875780601f10611b5c57610100808354040283529160200191611b87565b820191906000526020600020905b815481529060010190602001808311611b6a57829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611beb57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b6000806000611c85611946565b50611c8f33611025565b50611c9984611484565b9150611ca6338684611f55565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611d059190612b89565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063ffffffff8260019004169050919050565b6000806000620f424091506d04ee2d6d415b85acef81000000007f0000000000000000000000000000000000000000000000000000000000000000611db99190612ec8565b905060005b84811015611e0057620f42408284611dd69190612ef9565b611de09190612ec8565b83611deb9190612dd7565b92508080611df890612f87565b915050611dbe565b50620f42408583611e119190612ef9565b611e1b9190612ec8565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042611e769190612f53565b611e809190612ec8565b611e8a9190612dd7565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f0f57600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b600080611f628584612607565b50611f6d8484611ff9565b50611f76611e25565b6fffffffffffffffffffffffffffffffff169050600b548310158015611fa4575080611fa186611511565b14155b8015611fdc57508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611fed57611feb8582612737565b505b60019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460019004905060008503612059576000935050505061214e565b6120628661139f565b925084836120709190612dd7565b91508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16116120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906130a0565b60405180910390fd5b68ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000806000600160008054905061216b9190612f53565b8154811061217c5761217b612fcf565b5b90600052602060002001546001900490506cffffffffffffffffff000000001981169050602060ff166009549060020a028117905080600102600060016000805490506121c99190612f53565b815481106121da576121d9612fcf565b5b9060005260206000200181905550600191505090565b60008060008060016000805490506122089190612f53565b8154811061221957612218612fcf565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa15801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b191906130ec565b6fffffffffffffffffffffffffffffffff1690506122ce82611d60565b81116122e2576000600102925050506122e8565b81925050505b90565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a021660010281179050710fffffffff00000000000000000000000000606860ff16879060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b600080600080600061238886611c4c565b9350620f42407f0000000000000000000000000000000000000000000000000000000000000000856123ba9190612ef9565b6123c49190612ec8565b91507f0000000000000000000000000000000000000000000000000000000000000000620f4240836123f69190612ef9565b6124009190612ec8565b9050838110156124cc5761241386611d60565b9250710fffffffff0000000000000000000000000019600102600060018561243b9190612f53565b8154811061244c5761244b612fcf565b5b9060005260206000200160008282541692505081905550606860ff1660019060020a027f80000000000000000000000000000000000000000000000000000000000000001760010260006001856124a39190612f53565b815481106124b4576124b3612fcf565b5b90600052602060002001600082825417925050819055505b612511600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166d04ee2d6d415b85acef81000000008461250c9190612ec8565b611ff9565b5081945050505050919050565b60008060008403612533576000915050612601565b7f800000000000000000000000000000000000000000000000000000000000000060010260006001856125669190612f53565b8154811061257757612576612fcf565b5b90600052602060002001600082825417925050819055506125c160006001856125a09190612f53565b815481106125b1576125b0612fcf565b5b9060005260206000200154611c4c565b90506125fa600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685836125f59190612f53565b611ff9565b5060019150505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600190049050600085036126675760009350505050612731565b6126708661139f565b9250848310156126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90613165565b60405180910390fd5b84836126c19190612f53565b915068ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b60006cffffffff00000000000000000019600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055506cffffffff000000000000000000604860ff16839060020a0216600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282541792505081905550612808612813565b506001905092915050565b6000806000806000600160008054905061282d9190612f53565b8154811061283e5761283d612fcf565b5b90600052602060002001549250600161285684611248565b6128609190612dd7565b905082600190049150710fffffffff000000000000000000000000001982169150710fffffffff00000000000000000000000000606860ff16829060020a02168217915081600102600060016000805490506128bc9190612f53565b815481106128cd576128cc612fcf565b5b90600052602060002001819055506001935050505090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61291f816128ea565b811461292a57600080fd5b50565b60008135905061293c81612916565b92915050565b600060208284031215612958576129576128e5565b5b60006129668482850161292d565b91505092915050565b60008115159050919050565b6129848161296f565b82525050565b600060208201905061299f600083018461297b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129df5780820151818401526020810190506129c4565b838111156129ee576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a10826129a5565b612a1a81856129b0565b9350612a2a8185602086016129c1565b612a33816129f4565b840191505092915050565b60006020820190508181036000830152612a588184612a05565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a8b82612a60565b9050919050565b612a9b81612a80565b8114612aa657600080fd5b50565b600081359050612ab881612a92565b92915050565b6000819050919050565b612ad181612abe565b8114612adc57600080fd5b50565b600081359050612aee81612ac8565b92915050565b60008060408385031215612b0b57612b0a6128e5565b5b6000612b1985828601612aa9565b9250506020612b2a85828601612adf565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b612b5981612b34565b82525050565b6000602082019050612b746000830184612b50565b92915050565b612b8381612abe565b82525050565b6000602082019050612b9e6000830184612b7a565b92915050565b60008060408385031215612bbb57612bba6128e5565b5b6000612bc985828601612adf565b9250506020612bda85828601612adf565b9150509250929050565b600080600060608486031215612bfd57612bfc6128e5565b5b6000612c0b86828701612aa9565b9350506020612c1c86828701612aa9565b9250506040612c2d86828701612adf565b9150509250925092565b600060208284031215612c4d57612c4c6128e5565b5b6000612c5b84828501612aa9565b91505092915050565b600060208284031215612c7a57612c796128e5565b5b6000612c8884828501612adf565b91505092915050565b6000819050919050565b612ca481612c91565b82525050565b6000602082019050612cbf6000830184612c9b565b92915050565b612cce81612c91565b8114612cd957600080fd5b50565b600081359050612ceb81612cc5565b92915050565b600060208284031215612d0757612d066128e5565b5b6000612d1584828501612cdc565b91505092915050565b612d2781612a80565b82525050565b6000602082019050612d426000830184612d1e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d8f57607f821691505b602082108103612da257612da1612d48565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612de282612abe565b9150612ded83612abe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2257612e21612da8565b5b828201905092915050565b7f4552525f4e554d50415254535f5a45524f000000000000000000000000000000600082015250565b6000612e636011836129b0565b9150612e6e82612e2d565b602082019050919050565b60006020820190508181036000830152612e9281612e56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ed382612abe565b9150612ede83612abe565b925082612eee57612eed612e99565b5b828204905092915050565b6000612f0482612abe565b9150612f0f83612abe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f4857612f47612da8565b5b828202905092915050565b6000612f5e82612abe565b9150612f6983612abe565b925082821015612f7c57612f7b612da8565b5b828203905092915050565b6000612f9282612abe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fc457612fc3612da8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061302361301e61301984612b34565b612ffe565b612abe565b9050919050565b61303381613008565b82525050565b600060208201905061304e600083018461302a565b92915050565b7f4552525f574f554c445752415000000000000000000000000000000000000000600082015250565b600061308a600d836129b0565b915061309582613054565b602082019050919050565b600060208201905081810360008301526130b98161307d565b9050919050565b6130c981612b34565b81146130d457600080fd5b50565b6000815190506130e6816130c0565b92915050565b600060208284031215613102576131016128e5565b5b6000613110848285016130d7565b91505092915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b600061314f600d836129b0565b915061315a82613119565b602082019050919050565b6000602082019050818103600083015261317e81613142565b905091905056fea2646970667358221220584c6761a6f53a48d12b32828df80bf173ed868c2802527ff2ebbdb3cc94fd7664736f6c634300080d0033
+\ No newline at end of file
diff --git a/python/erc20_demurrage_token/data/DemurrageTokenMultiNocap.bin b/python/erc20_demurrage_token/data/DemurrageTokenMultiNocap.bin
@@ -1 +1 @@
-610100604052620f42406d04ee2d6d415b85acef810000000062000024919062000436565b6080908152503480156200003757600080fd5b5060405162003c9438038062003c9483398181016040528101906200005d919062000708565b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508560059080519060200190620001309291906200034d565b508460069080519060200190620001499291906200034d565b508360ff166007819055504260a08181525050603c826200016b919062000436565b60c08181525050620f42406d04ee2d6d415b85acef810000000062000191919062000436565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508260e081815250506000620002306000620f424060006001620002c1640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460ff16600a620002ae919062000936565b60098190555050505050505050620009ec565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a021660010281179050710fffffffff00000000000000000000000000606860ff16879060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b8280546200035b90620009b6565b90600052602060002090601f0160209004810192826200037f5760008555620003cb565b82601f106200039a57805160ff1916838001178555620003cb565b82800160010185558215620003cb579182015b82811115620003ca578251825591602001919060010190620003ad565b5b509050620003da9190620003de565b5090565b5b80821115620003f9576000816000905550600101620003df565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200044382620003fd565b91506200045083620003fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200048c576200048b62000407565b5b828202905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200050082620004b5565b810181811067ffffffffffffffff82111715620005225762000521620004c6565b5b80604052505050565b60006200053762000497565b9050620005458282620004f5565b919050565b600067ffffffffffffffff821115620005685762000567620004c6565b5b6200057382620004b5565b9050602081019050919050565b60005b83811015620005a057808201518184015260208101905062000583565b83811115620005b0576000848401525b50505050565b6000620005cd620005c7846200054a565b6200052b565b905082815260208101848484011115620005ec57620005eb620004b0565b5b620005f984828562000580565b509392505050565b600082601f830112620006195762000618620004ab565b5b81516200062b848260208601620005b6565b91505092915050565b600060ff82169050919050565b6200064c8162000634565b81146200065857600080fd5b50565b6000815190506200066c8162000641565b92915050565b6200067d81620003fd565b81146200068957600080fd5b50565b6000815190506200069d8162000672565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006d082620006a3565b9050919050565b620006e281620006c3565b8114620006ee57600080fd5b50565b6000815190506200070281620006d7565b92915050565b60008060008060008060c08789031215620007285762000727620004a1565b5b600087015167ffffffffffffffff811115620007495762000748620004a6565b5b6200075789828a0162000601565b965050602087015167ffffffffffffffff8111156200077b576200077a620004a6565b5b6200078989828a0162000601565b95505060406200079c89828a016200065b565b9450506060620007af89828a016200068c565b9350506080620007c289828a016200068c565b92505060a0620007d589828a01620006f1565b9150509295509295509295565b6000600282049050919050565b6000808291508390505b6001851115620008415780860481111562000819576200081862000407565b5b6001851615620008295780820291505b80810290506200083985620007e2565b9450620007f9565b94509492505050565b6000826200085c57600190506200092f565b816200086c57600090506200092f565b81600181146200088557600281146200089057620008c6565b60019150506200092f565b60ff841115620008a557620008a462000407565b5b8360020a915084821115620008bf57620008be62000407565b5b506200092f565b5060208310610133831016604e8410600b8410161715620009005782820a905083811115620008fa57620008f962000407565b5b6200092f565b6200090f8484846001620007ef565b9250905081840481111562000929576200092862000407565b5b81810290505b9392505050565b60006200094382620003fd565b91506200095083620003fd565b92506200097f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200084a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009cf57607f821691505b60208210811415620009e657620009e562000987565b5b50919050565b60805160a05160c05160e05161322f62000a6560003960008181610cd101528181610f2c0152818161109701528181611dcb015281816123cc015261240401526000818161137a01528181611d790152611e660152600081816113a601528181611e870152611ecc01526000611d55015261322f6000f3fe608060405234801561001057600080fd5b5060043610610265576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e116101585780639da7d8ba116100d5578063e3ab207a11610099578063e3ab207a146107ec578063e54d63f71461081c578063e80952951461084c578063eda4e6d61461086a578063f2fde38b1461088857610265565b80639da7d8ba14610732578063a2119e2f14610762578063a9059cbb14610780578063ab28cea0146107b0578063b470aade146107ce57610265565b806379ba50971161011c57806379ba50971461068a5780638da5cb5b146106a85780638f1df6bc146106c657806395d89b41146106e4578063983b2d561461070257610265565b80636a2d094e146105ac5780636d5055a6146105dc5780636ffa8a051461060c57806370a082311461063c578063731f237c1461066c57610265565b806331333487116101e6578063449a52f8116101aa578063449a52f8146104ce57806347a50517146104fe5780634abfbba21461052e578063573cc5071461055e5780636787a9be1461057c57610265565b806331333487146103f0578063313ce5671461042057806335b16eb81461043e57806340452d911461046e57806340fc89f51461049e57610265565b80631989c6a81161022d5780631989c6a814610324578063216ea5ec14610342578063229ba1971461037257806323b872dd146103905780633092afd5146103c057610265565b806301ffc9a71461026a57806306fdde031461029a578063095ea7b3146102b857806309f28f3c146102e857806318160ddd14610306575b600080fd5b610284600480360381019061027f9190612980565b6108b8565b60405161029191906129c8565b60405180910390f35b6102a2610a63565b6040516102af9190612a7c565b60405180910390f35b6102d260048036038101906102cd9190612b32565b610af1565b6040516102df91906129c8565b60405180910390f35b6102f0610c15565b6040516102fd9190612b9d565b60405180910390f35b61030e610c37565b60405161031b9190612bc7565b60405180910390f35b61032c610c3d565b6040516103399190612bc7565b60405180910390f35b61035c60048036038101906103579190612be2565b610c49565b6040516103699190612bc7565b60405180910390f35b61037a610ccf565b6040516103879190612bc7565b60405180910390f35b6103aa60048036038101906103a59190612c22565b610cf3565b6040516103b791906129c8565b60405180910390f35b6103da60048036038101906103d59190612c75565b610e1d565b6040516103e791906129c8565b60405180910390f35b61040a60048036038101906104059190612be2565b610f10565b6040516104179190612bc7565b60405180910390f35b610428610fc1565b6040516104359190612bc7565b60405180910390f35b61045860048036038101906104539190612c75565b610fc7565b60405161046591906129c8565b60405180910390f35b61048860048036038101906104839190612ca2565b6111c7565b6040516104959190612ce8565b60405180910390f35b6104b860048036038101906104b39190612d2f565b6111eb565b6040516104c59190612bc7565b60405180910390f35b6104e860048036038101906104e39190612b32565b61121c565b6040516104f591906129c8565b60405180910390f35b61051860048036038101906105139190612c75565b61131e565b6040516105259190612bc7565b60405180910390f35b61054860048036038101906105439190612ca2565b611376565b6040516105559190612bc7565b60405180910390f35b6105666113d6565b6040516105739190612bc7565b60405180910390f35b61059660048036038101906105919190612ca2565b6113dc565b6040516105a39190612bc7565b60405180910390f35b6105c660048036038101906105c19190612ca2565b611448565b6040516105d39190612bc7565b60405180910390f35b6105f660048036038101906105f19190612c75565b611469565b6040516106039190612bc7565b60405180910390f35b61062660048036038101906106219190612d2f565b6114d4565b6040516106339190612bc7565b60405180910390f35b61065660048036038101906106519190612c75565b611507565b6040516106639190612bc7565b60405180910390f35b6106746115e8565b60405161068191906129c8565b60405180910390f35b610692611796565b60405161069f91906129c8565b60405180910390f35b6106b061193d565b6040516106bd9190612d6b565b60405180910390f35b6106ce611963565b6040516106db91906129c8565b60405180910390f35b6106ec611b1a565b6040516106f99190612a7c565b60405180910390f35b61071c60048036038101906107179190612c75565b611ba8565b60405161072991906129c8565b60405180910390f35b61074c60048036038101906107479190612d2f565b611c65565b6040516107599190612bc7565b60405180910390f35b61076a611c91565b6040516107779190612b9d565b60405180910390f35b61079a60048036038101906107959190612b32565b611cb3565b6040516107a791906129c8565b60405180910390f35b6107b8611d53565b6040516107c59190612bc7565b60405180910390f35b6107d6611d77565b6040516107e39190612bc7565b60405180910390f35b61080660048036038101906108019190612d2f565b611d9b565b6040516108139190612bc7565b60405180910390f35b61083660048036038101906108319190612be2565b611daf565b6040516108439190612bc7565b60405180910390f35b610854611e60565b6040516108619190612b9d565b60405180910390f35b610872611eca565b60405161087f9190612bc7565b60405180910390f35b6108a2600480360381019061089d9190612c75565b611eee565b6040516108af91906129c8565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561090d5760019050610a5e565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156109605760019050610a5e565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156109b35760019050610a5e565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610a065760019050610a5e565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610a595760019050610a5e565b600090505b919050565b60058054610a7090612db5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c90612db5565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b505050505081565b600080610afc611963565b50610b0633610fc7565b50610b10836113dc565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b9e9190612e16565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c029190612bc7565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60085481565b60008080549050905090565b600080600080851415610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890612eb8565b60405180910390fd5b838510610c9d57600080fd5b8484610ca99190612f07565b91508482610cb79190612f38565b90508084610cc59190612f92565b9250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610d00611963565b50610d0a33610fc7565b50610d14846113dc565b915081600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d9f57600080fd5b610daa868684611f90565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610e099190612bc7565b60405180910390a380925050509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ea657503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610eaf57600080fd5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806000620f424091506d04ee2d6d415b85acef81000000007f0000000000000000000000000000000000000000000000000000000000000000610f559190612f07565b905060005b84811015610f9c57620f42408284610f729190612f38565b610f7c9190612f07565b83610f879190612f92565b92508080610f9490612fc6565b915050610f5a565b50620f42408583610fad9190612f38565b610fb79190612f07565b9250505092915050565b60075481565b600080600080600080600080610fdc89611469565b915060008214806110065750610ff0611e60565b6fffffffffffffffffffffffffffffffff168210155b1561101b5760009750505050505050506111c2565b600060018361102a9190612f92565b8154811061103b5761103a61300f565b5b90600052602060002001549650611051876111eb565b9450600085141561106c5760009750505050505050506111c2565b61107587611c65565b9550611080876114d4565b90506d04ee2d6d415b85acef8100000000620f42407f00000000000000000000000000000000000000000000000000000000000000006110c09190612f07565b86886110cc9190612f07565b6110d69190612f38565b6110e09190612f07565b9350620f424081856110f29190612f38565b6110fc9190612f07565b92506cffffffff00000000000000000019600102600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055506111668984612034565b50818973ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d3856040516111ae9190612bc7565b60405180910390a360019750505050505050505b919050565b600081815481106111d757600080fd5b906000526020600020016000915090505481565b6000606860ff16710fffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b600080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661127557600080fd5b61127d611963565b5082905082600860008282546112939190612e16565b925050819055506112a48482612034565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516113029190612bc7565b60405180910390a3611312612190565b50600191505092915050565b600068ffffffffffffffffff600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460019004169050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000826113a49190612f38565b7f00000000000000000000000000000000000000000000000000000000000000006113cf9190612e16565b9050919050565b60095481565b6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16620f42406d04ee2d6d415b85acef81000000008461142d9190612f38565b6114379190612f38565b6114419190612f07565b9050919050565b6000603c82426114589190612f92565b6114629190612f07565b9050919050565b6000604860ff166cffffffff000000000000000000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900416908060020a82049150509050919050565b6000608c60ff1673fffff00000000000000000000000000000000000836001900416908060020a82049150509050919050565b6000806000806115168561131e565b9250600260109054906101000a90046fffffffffffffffffffffffffffffffff1661153f611e60565b611549919061303e565b6fffffffffffffffffffffffffffffffff169050611597600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682610f10565b6fffffffffffffffffffffffffffffffff169150620f42406d04ee2d6d415b85acef81000000006115c89190612f38565b82846115d49190612f38565b6115de9190612f07565b9350505050919050565b60008060008060006115f8611e60565b9350600260109054906101000a90046fffffffffffffffffffffffffffffffff1684611624919061303e565b92506000836fffffffffffffffffffffffffffffffff16141561164e576000945050505050611793565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16915061169d82846fffffffffffffffffffffffffffffffff16610f10565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555081836fffffffffffffffffffffffffffffffff16856fffffffffffffffffffffffffffffffff167fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff1660405161178291906130ad565b60405180910390a460019450505050505b90565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117f357600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600080600061197c61222c565b995060006001028a141561199d5760009a5050505050505050505050611b17565b6119a68a611d9b565b97506001886119b59190612e16565b90506119c088611376565b91506119ca6115e8565b50600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169450611a0782611448565b92506000831115611a3c576d04ee2d6d415b85acef8100000000611a2b8685611daf565b611a359190612f07565b9350611a59565b6d04ee2d6d415b85acef810000000085611a569190612f07565b93505b611a6860008560085484612327565b98506000899080600181540180825580915050600190039060005260206000200160009091909190915055611a9c8a6111eb565b96506000871415611ab757611ab08a6123b3565b9550611ad1565b611ac387600854610c49565b9550611acf868961255a565b505b7f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d67581604051611b009190612bc7565b60405180910390a160019a50505050505050505050505b90565b60068054611b2790612db5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5390612db5565b8015611ba05780601f10611b7557610100808354040283529160200191611ba0565b820191906000526020600020905b815481529060010190602001808311611b8357829003601f168201915b505050505081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c0457600080fd5b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b600260109054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000806000611cc0611963565b50611cca33610fc7565b50611cd4846113dc565b9150611ce1338684611f90565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611d409190612bc7565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063ffffffff8260019004169050919050565b6000806000620f424091506d04ee2d6d415b85acef81000000007f0000000000000000000000000000000000000000000000000000000000000000611df49190612f07565b905060005b84811015611e3b57620f42408284611e119190612f38565b611e1b9190612f07565b83611e269190612e16565b92508080611e3390612fc6565b915050611df9565b50620f42408583611e4c9190612f38565b611e569190612f07565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042611eb19190612f92565b611ebb9190612f07565b611ec59190612e16565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4a57600080fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b600080611f9d8584612644565b50611fa88484612034565b50611fb1611e60565b6fffffffffffffffffffffffffffffffff1690506009548310158015611fdf575080611fdc86611469565b14155b801561201757508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612028576120268582612775565b505b60019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900490506000851415612095576000935050505061218a565b61209e8661131e565b925084836120ac9190612e16565b91508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161161211c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211390613114565b60405180910390fd5b68ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600060016000805490506121a79190612f92565b815481106121b8576121b761300f565b5b90600052602060002001546001900490506cffffffffffffffffff000000001981169050602060ff166008549060020a028117905080600102600060016000805490506122059190612f92565b815481106122165761221561300f565b5b9060005260206000200181905550600191505090565b60008060008060016000805490506122449190612f92565b815481106122555761225461300f565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156122c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ed9190613160565b6fffffffffffffffffffffffffffffffff16905061230a82611d9b565b811161231e57600060010292505050612324565b81925050505b90565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a021660010281179050710fffffffff00000000000000000000000000606860ff16879060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b60008060008060006123c486611c65565b9350620f42407f0000000000000000000000000000000000000000000000000000000000000000856123f69190612f38565b6124009190612f07565b91507f0000000000000000000000000000000000000000000000000000000000000000620f4240836124329190612f38565b61243c9190612f07565b9050838110156125085761244f86611d9b565b9250710fffffffff000000000000000000000000001960010260006001856124779190612f92565b815481106124885761248761300f565b5b9060005260206000200160008282541692505081905550606860ff1660019060020a027f80000000000000000000000000000000000000000000000000000000000000001760010260006001856124df9190612f92565b815481106124f0576124ef61300f565b5b90600052602060002001600082825417925050819055505b61254d600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166d04ee2d6d415b85acef8100000000846125489190612f07565b612034565b5081945050505050919050565b600080600084141561257057600091505061263e565b7f800000000000000000000000000000000000000000000000000000000000000060010260006001856125a39190612f92565b815481106125b4576125b361300f565b5b90600052602060002001600082825417925050819055506125fe60006001856125dd9190612f92565b815481106125ee576125ed61300f565b5b9060005260206000200154611c65565b9050612637600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685836126329190612f92565b612034565b5060019150505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460019004905060008514156126a5576000935050505061276f565b6126ae8661131e565b9250848310156126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea906131d9565b60405180910390fd5b84836126ff9190612f92565b915068ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b60006cffffffff00000000000000000019600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055506cffffffff000000000000000000604860ff16839060020a0216600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282541792505081905550612846612851565b506001905092915050565b6000806000806000600160008054905061286b9190612f92565b8154811061287c5761287b61300f565b5b906000526020600020015492506001612894846111eb565b61289e9190612e16565b905082600190049150710fffffffff000000000000000000000000001982169150710fffffffff00000000000000000000000000606860ff16829060020a02168217915081600102600060016000805490506128fa9190612f92565b8154811061290b5761290a61300f565b5b90600052602060002001819055506001935050505090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61295d81612928565b811461296857600080fd5b50565b60008135905061297a81612954565b92915050565b60006020828403121561299657612995612923565b5b60006129a48482850161296b565b91505092915050565b60008115159050919050565b6129c2816129ad565b82525050565b60006020820190506129dd60008301846129b9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a1d578082015181840152602081019050612a02565b83811115612a2c576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a4e826129e3565b612a5881856129ee565b9350612a688185602086016129ff565b612a7181612a32565b840191505092915050565b60006020820190508181036000830152612a968184612a43565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ac982612a9e565b9050919050565b612ad981612abe565b8114612ae457600080fd5b50565b600081359050612af681612ad0565b92915050565b6000819050919050565b612b0f81612afc565b8114612b1a57600080fd5b50565b600081359050612b2c81612b06565b92915050565b60008060408385031215612b4957612b48612923565b5b6000612b5785828601612ae7565b9250506020612b6885828601612b1d565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b612b9781612b72565b82525050565b6000602082019050612bb26000830184612b8e565b92915050565b612bc181612afc565b82525050565b6000602082019050612bdc6000830184612bb8565b92915050565b60008060408385031215612bf957612bf8612923565b5b6000612c0785828601612b1d565b9250506020612c1885828601612b1d565b9150509250929050565b600080600060608486031215612c3b57612c3a612923565b5b6000612c4986828701612ae7565b9350506020612c5a86828701612ae7565b9250506040612c6b86828701612b1d565b9150509250925092565b600060208284031215612c8b57612c8a612923565b5b6000612c9984828501612ae7565b91505092915050565b600060208284031215612cb857612cb7612923565b5b6000612cc684828501612b1d565b91505092915050565b6000819050919050565b612ce281612ccf565b82525050565b6000602082019050612cfd6000830184612cd9565b92915050565b612d0c81612ccf565b8114612d1757600080fd5b50565b600081359050612d2981612d03565b92915050565b600060208284031215612d4557612d44612923565b5b6000612d5384828501612d1a565b91505092915050565b612d6581612abe565b82525050565b6000602082019050612d806000830184612d5c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dcd57607f821691505b60208210811415612de157612de0612d86565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e2182612afc565b9150612e2c83612afc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e6157612e60612de7565b5b828201905092915050565b7f4552525f4e554d50415254535f5a45524f000000000000000000000000000000600082015250565b6000612ea26011836129ee565b9150612ead82612e6c565b602082019050919050565b60006020820190508181036000830152612ed181612e95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f1282612afc565b9150612f1d83612afc565b925082612f2d57612f2c612ed8565b5b828204905092915050565b6000612f4382612afc565b9150612f4e83612afc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f8757612f86612de7565b5b828202905092915050565b6000612f9d82612afc565b9150612fa883612afc565b925082821015612fbb57612fba612de7565b5b828203905092915050565b6000612fd182612afc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561300457613003612de7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061304982612b72565b915061305483612b72565b92508282101561306757613066612de7565b5b828203905092915050565b6000819050919050565b600061309761309261308d84612b72565b613072565b612afc565b9050919050565b6130a78161307c565b82525050565b60006020820190506130c2600083018461309e565b92915050565b7f4552525f574f554c445752415000000000000000000000000000000000000000600082015250565b60006130fe600d836129ee565b9150613109826130c8565b602082019050919050565b6000602082019050818103600083015261312d816130f1565b9050919050565b61313d81612b72565b811461314857600080fd5b50565b60008151905061315a81613134565b92915050565b60006020828403121561317657613175612923565b5b60006131848482850161314b565b91505092915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b60006131c3600d836129ee565b91506131ce8261318d565b602082019050919050565b600060208201905081810360008301526131f2816131b6565b905091905056fea2646970667358221220f9f5ec32eaff12f6c840b25f6687670a3f4334b19d564468870872734c2e758664736f6c634300080b0033
-\ No newline at end of file
+610100604052620f42406d04ee2d6d415b85acef810000000062000024919062000436565b6080908152503480156200003757600080fd5b5060405162003c8438038062003c8483398181016040528101906200005d919062000708565b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508560059080519060200190620001309291906200034d565b508460069080519060200190620001499291906200034d565b508360ff166007819055504260a08181525050603c826200016b919062000436565b60c08181525050620f42406d04ee2d6d415b85acef810000000062000191919062000436565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508260e081815250506000620002306000620f424060006001620002c1640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460ff16600a620002ae919062000936565b60098190555050505050505050620009eb565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a021660010281179050710fffffffff00000000000000000000000000606860ff16879060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b8280546200035b90620009b6565b90600052602060002090601f0160209004810192826200037f5760008555620003cb565b82601f106200039a57805160ff1916838001178555620003cb565b82800160010185558215620003cb579182015b82811115620003ca578251825591602001919060010190620003ad565b5b509050620003da9190620003de565b5090565b5b80821115620003f9576000816000905550600101620003df565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200044382620003fd565b91506200045083620003fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200048c576200048b62000407565b5b828202905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200050082620004b5565b810181811067ffffffffffffffff82111715620005225762000521620004c6565b5b80604052505050565b60006200053762000497565b9050620005458282620004f5565b919050565b600067ffffffffffffffff821115620005685762000567620004c6565b5b6200057382620004b5565b9050602081019050919050565b60005b83811015620005a057808201518184015260208101905062000583565b83811115620005b0576000848401525b50505050565b6000620005cd620005c7846200054a565b6200052b565b905082815260208101848484011115620005ec57620005eb620004b0565b5b620005f984828562000580565b509392505050565b600082601f830112620006195762000618620004ab565b5b81516200062b848260208601620005b6565b91505092915050565b600060ff82169050919050565b6200064c8162000634565b81146200065857600080fd5b50565b6000815190506200066c8162000641565b92915050565b6200067d81620003fd565b81146200068957600080fd5b50565b6000815190506200069d8162000672565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006d082620006a3565b9050919050565b620006e281620006c3565b8114620006ee57600080fd5b50565b6000815190506200070281620006d7565b92915050565b60008060008060008060c08789031215620007285762000727620004a1565b5b600087015167ffffffffffffffff811115620007495762000748620004a6565b5b6200075789828a0162000601565b965050602087015167ffffffffffffffff8111156200077b576200077a620004a6565b5b6200078989828a0162000601565b95505060406200079c89828a016200065b565b9450506060620007af89828a016200068c565b9350506080620007c289828a016200068c565b92505060a0620007d589828a01620006f1565b9150509295509295509295565b6000600282049050919050565b6000808291508390505b6001851115620008415780860481111562000819576200081862000407565b5b6001851615620008295780820291505b80810290506200083985620007e2565b9450620007f9565b94509492505050565b6000826200085c57600190506200092f565b816200086c57600090506200092f565b81600181146200088557600281146200089057620008c6565b60019150506200092f565b60ff841115620008a557620008a462000407565b5b8360020a915084821115620008bf57620008be62000407565b5b506200092f565b5060208310610133831016604e8410600b8410161715620009005782820a905083811115620008fa57620008f962000407565b5b6200092f565b6200090f8484846001620007ef565b9250905081840481111562000929576200092862000407565b5b81810290505b9392505050565b60006200094382620003fd565b91506200095083620003fd565b92506200097f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200084a565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009cf57607f821691505b602082108103620009e557620009e462000987565b5b50919050565b60805160a05160c05160e05161322062000a6460003960008181610ccb01528181610f260152818161109001528181611dc1015281816123c101526123f901526000818161137301528181611d6f0152611e5c01526000818161139f01528181611e7d0152611ec201526000611d4b01526132206000f3fe608060405234801561001057600080fd5b5060043610610265576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e116101585780639da7d8ba116100d5578063e3ab207a11610099578063e3ab207a146107ec578063e54d63f71461081c578063e80952951461084c578063eda4e6d61461086a578063f2fde38b1461088857610265565b80639da7d8ba14610732578063a2119e2f14610762578063a9059cbb14610780578063ab28cea0146107b0578063b470aade146107ce57610265565b806379ba50971161011c57806379ba50971461068a5780638da5cb5b146106a85780638f1df6bc146106c657806395d89b41146106e4578063983b2d561461070257610265565b80636a2d094e146105ac5780636d5055a6146105dc5780636ffa8a051461060c57806370a082311461063c578063731f237c1461066c57610265565b806331333487116101e6578063449a52f8116101aa578063449a52f8146104ce57806347a50517146104fe5780634abfbba21461052e578063573cc5071461055e5780636787a9be1461057c57610265565b806331333487146103f0578063313ce5671461042057806335b16eb81461043e57806340452d911461046e57806340fc89f51461049e57610265565b80631989c6a81161022d5780631989c6a814610324578063216ea5ec14610342578063229ba1971461037257806323b872dd146103905780633092afd5146103c057610265565b806301ffc9a71461026a57806306fdde031461029a578063095ea7b3146102b857806309f28f3c146102e857806318160ddd14610306575b600080fd5b610284600480360381019061027f9190612973565b6108b8565b60405161029191906129bb565b60405180910390f35b6102a2610a5e565b6040516102af9190612a6f565b60405180910390f35b6102d260048036038101906102cd9190612b25565b610aec565b6040516102df91906129bb565b60405180910390f35b6102f0610c10565b6040516102fd9190612b90565b60405180910390f35b61030e610c32565b60405161031b9190612bba565b60405180910390f35b61032c610c38565b6040516103399190612bba565b60405180910390f35b61035c60048036038101906103579190612bd5565b610c44565b6040516103699190612bba565b60405180910390f35b61037a610cc9565b6040516103879190612bba565b60405180910390f35b6103aa60048036038101906103a59190612c15565b610ced565b6040516103b791906129bb565b60405180910390f35b6103da60048036038101906103d59190612c68565b610e17565b6040516103e791906129bb565b60405180910390f35b61040a60048036038101906104059190612bd5565b610f0a565b6040516104179190612bba565b60405180910390f35b610428610fbb565b6040516104359190612bba565b60405180910390f35b61045860048036038101906104539190612c68565b610fc1565b60405161046591906129bb565b60405180910390f35b61048860048036038101906104839190612c95565b6111c0565b6040516104959190612cdb565b60405180910390f35b6104b860048036038101906104b39190612d22565b6111e4565b6040516104c59190612bba565b60405180910390f35b6104e860048036038101906104e39190612b25565b611215565b6040516104f591906129bb565b60405180910390f35b61051860048036038101906105139190612c68565b611317565b6040516105259190612bba565b60405180910390f35b61054860048036038101906105439190612c95565b61136f565b6040516105559190612bba565b60405180910390f35b6105666113cf565b6040516105739190612bba565b60405180910390f35b61059660048036038101906105919190612c95565b6113d5565b6040516105a39190612bba565b60405180910390f35b6105c660048036038101906105c19190612c95565b611441565b6040516105d39190612bba565b60405180910390f35b6105f660048036038101906105f19190612c68565b611462565b6040516106039190612bba565b60405180910390f35b61062660048036038101906106219190612d22565b6114cd565b6040516106339190612bba565b60405180910390f35b61065660048036038101906106519190612c68565b611500565b6040516106639190612bba565b60405180910390f35b6106746115e1565b60405161068191906129bb565b60405180910390f35b61069261178e565b60405161069f91906129bb565b60405180910390f35b6106b0611935565b6040516106bd9190612d5e565b60405180910390f35b6106ce61195b565b6040516106db91906129bb565b60405180910390f35b6106ec611b10565b6040516106f99190612a6f565b60405180910390f35b61071c60048036038101906107179190612c68565b611b9e565b60405161072991906129bb565b60405180910390f35b61074c60048036038101906107479190612d22565b611c5b565b6040516107599190612bba565b60405180910390f35b61076a611c87565b6040516107779190612b90565b60405180910390f35b61079a60048036038101906107959190612b25565b611ca9565b6040516107a791906129bb565b60405180910390f35b6107b8611d49565b6040516107c59190612bba565b60405180910390f35b6107d6611d6d565b6040516107e39190612bba565b60405180910390f35b61080660048036038101906108019190612d22565b611d91565b6040516108139190612bba565b60405180910390f35b61083660048036038101906108319190612bd5565b611da5565b6040516108439190612bba565b60405180910390f35b610854611e56565b6040516108619190612b90565b60405180910390f35b610872611ec0565b60405161087f9190612bba565b60405180910390f35b6108a2600480360381019061089d9190612c68565b611ee4565b6040516108af91906129bb565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361090c5760019050610a59565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361095e5760019050610a59565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109b05760019050610a59565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a025760019050610a59565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a545760019050610a59565b600090505b919050565b60058054610a6b90612da8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9790612da8565b8015610ae45780601f10610ab957610100808354040283529160200191610ae4565b820191906000526020600020905b815481529060010190602001808311610ac757829003601f168201915b505050505081565b600080610af761195b565b50610b0133610fc1565b50610b0b836113d5565b905080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b999190612e08565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610bfd9190612bba565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60085481565b60008080549050905090565b6000806000808503610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290612eaa565b60405180910390fd5b838510610c9757600080fd5b8484610ca39190612ef9565b91508482610cb19190612f2a565b90508084610cbf9190612f84565b9250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610cfa61195b565b50610d0433610fc1565b50610d0e846113d5565b915081600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d9957600080fd5b610da4868684611f86565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610e039190612bba565b60405180910390a380925050509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ea057503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610ea957600080fd5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806000620f424091506d04ee2d6d415b85acef81000000007f0000000000000000000000000000000000000000000000000000000000000000610f4f9190612ef9565b905060005b84811015610f9657620f42408284610f6c9190612f2a565b610f769190612ef9565b83610f819190612f84565b92508080610f8e90612fb8565b915050610f54565b50620f42408583610fa79190612f2a565b610fb19190612ef9565b9250505092915050565b60075481565b600080600080600080600080610fd689611462565b915060008214806110005750610fea611e56565b6fffffffffffffffffffffffffffffffff168210155b156110155760009750505050505050506111bb565b60006001836110249190612f84565b8154811061103557611034613000565b5b9060005260206000200154965061104b876111e4565b9450600085036110655760009750505050505050506111bb565b61106e87611c5b565b9550611079876114cd565b90506d04ee2d6d415b85acef8100000000620f42407f00000000000000000000000000000000000000000000000000000000000000006110b99190612ef9565b86886110c59190612ef9565b6110cf9190612f2a565b6110d99190612ef9565b9350620f424081856110eb9190612f2a565b6110f59190612ef9565b92506cffffffff00000000000000000019600102600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254169250508190555061115f898461202a565b50818973ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d3856040516111a79190612bba565b60405180910390a360019750505050505050505b919050565b600081815481106111d057600080fd5b906000526020600020016000915090505481565b6000606860ff16710fffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b600080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661126e57600080fd5b61127661195b565b50829050826008600082825461128c9190612e08565b9250508190555061129d848261202a565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516112fb9190612bba565b60405180910390a361130b612185565b50600191505092915050565b600068ffffffffffffffffff600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460019004169050919050565b60007f00000000000000000000000000000000000000000000000000000000000000008261139d9190612f2a565b7f00000000000000000000000000000000000000000000000000000000000000006113c89190612e08565b9050919050565b60095481565b6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16620f42406d04ee2d6d415b85acef8100000000846114269190612f2a565b6114309190612f2a565b61143a9190612ef9565b9050919050565b6000603c82426114519190612f84565b61145b9190612ef9565b9050919050565b6000604860ff166cffffffff000000000000000000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900416908060020a82049150509050919050565b6000608c60ff1673fffff00000000000000000000000000000000000836001900416908060020a82049150509050919050565b60008060008061150f85611317565b9250600260109054906101000a90046fffffffffffffffffffffffffffffffff16611538611e56565b611542919061302f565b6fffffffffffffffffffffffffffffffff169050611590600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682610f0a565b6fffffffffffffffffffffffffffffffff169150620f42406d04ee2d6d415b85acef81000000006115c19190612f2a565b82846115cd9190612f2a565b6115d79190612ef9565b9350505050919050565b60008060008060006115f1611e56565b9350600260109054906101000a90046fffffffffffffffffffffffffffffffff168461161d919061302f565b92506000836fffffffffffffffffffffffffffffffff160361164657600094505050505061178b565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16915061169582846fffffffffffffffffffffffffffffffff16610f0a565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555081836fffffffffffffffffffffffffffffffff16856fffffffffffffffffffffffffffffffff167fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff1660405161177a919061309e565b60405180910390a460019450505050505b90565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117eb57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000806000806000611974612221565b995060006001028a036119945760009a5050505050505050505050611b0d565b61199d8a611d91565b97506001886119ac9190612e08565b90506119b78861136f565b91506119c16115e1565b50600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1694506119fe82611441565b92506000831115611a33576d04ee2d6d415b85acef8100000000611a228685611da5565b611a2c9190612ef9565b9350611a50565b6d04ee2d6d415b85acef810000000085611a4d9190612ef9565b93505b611a5f6000856008548461231c565b98506000899080600181540180825580915050600190039060005260206000200160009091909190915055611a938a6111e4565b965060008703611aad57611aa68a6123a8565b9550611ac7565b611ab987600854610c44565b9550611ac5868961254f565b505b7f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d67581604051611af69190612bba565b60405180910390a160019a50505050505050505050505b90565b60068054611b1d90612da8565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4990612da8565b8015611b965780601f10611b6b57610100808354040283529160200191611b96565b820191906000526020600020905b815481529060010190602001808311611b7957829003601f168201915b505050505081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bfa57600080fd5b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b600260109054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000806000611cb661195b565b50611cc033610fc1565b50611cca846113d5565b9150611cd7338684611f86565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611d369190612bba565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063ffffffff8260019004169050919050565b6000806000620f424091506d04ee2d6d415b85acef81000000007f0000000000000000000000000000000000000000000000000000000000000000611dea9190612ef9565b905060005b84811015611e3157620f42408284611e079190612f2a565b611e119190612ef9565b83611e1c9190612e08565b92508080611e2990612fb8565b915050611def565b50620f42408583611e429190612f2a565b611e4c9190612ef9565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042611ea79190612f84565b611eb19190612ef9565b611ebb9190612e08565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4057600080fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b600080611f938584612638565b50611f9e848461202a565b50611fa7611e56565b6fffffffffffffffffffffffffffffffff1690506009548310158015611fd5575080611fd286611462565b14155b801561200d57508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561201e5761201c8582612768565b505b60019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900490506000850361208a576000935050505061217f565b61209386611317565b925084836120a19190612e08565b91508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890613105565b60405180910390fd5b68ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000806000600160008054905061219c9190612f84565b815481106121ad576121ac613000565b5b90600052602060002001546001900490506cffffffffffffffffff000000001981169050602060ff166008549060020a028117905080600102600060016000805490506121fa9190612f84565b8154811061220b5761220a613000565b5b9060005260206000200181905550600191505090565b60008060008060016000805490506122399190612f84565b8154811061224a57612249613000565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156122be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e29190613151565b6fffffffffffffffffffffffffffffffff1690506122ff82611d91565b811161231357600060010292505050612319565b81925050505b90565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a021660010281179050710fffffffff00000000000000000000000000606860ff16879060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b60008060008060006123b986611c5b565b9350620f42407f0000000000000000000000000000000000000000000000000000000000000000856123eb9190612f2a565b6123f59190612ef9565b91507f0000000000000000000000000000000000000000000000000000000000000000620f4240836124279190612f2a565b6124319190612ef9565b9050838110156124fd5761244486611d91565b9250710fffffffff0000000000000000000000000019600102600060018561246c9190612f84565b8154811061247d5761247c613000565b5b9060005260206000200160008282541692505081905550606860ff1660019060020a027f80000000000000000000000000000000000000000000000000000000000000001760010260006001856124d49190612f84565b815481106124e5576124e4613000565b5b90600052602060002001600082825417925050819055505b612542600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166d04ee2d6d415b85acef81000000008461253d9190612ef9565b61202a565b5081945050505050919050565b60008060008403612564576000915050612632565b7f800000000000000000000000000000000000000000000000000000000000000060010260006001856125979190612f84565b815481106125a8576125a7613000565b5b90600052602060002001600082825417925050819055506125f260006001856125d19190612f84565b815481106125e2576125e1613000565b5b9060005260206000200154611c5b565b905061262b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685836126269190612f84565b61202a565b5060019150505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600190049050600085036126985760009350505050612762565b6126a186611317565b9250848310156126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd906131ca565b60405180910390fd5b84836126f29190612f84565b915068ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b60006cffffffff00000000000000000019600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055506cffffffff000000000000000000604860ff16839060020a0216600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282541792505081905550612839612844565b506001905092915050565b6000806000806000600160008054905061285e9190612f84565b8154811061286f5761286e613000565b5b906000526020600020015492506001612887846111e4565b6128919190612e08565b905082600190049150710fffffffff000000000000000000000000001982169150710fffffffff00000000000000000000000000606860ff16829060020a02168217915081600102600060016000805490506128ed9190612f84565b815481106128fe576128fd613000565b5b90600052602060002001819055506001935050505090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129508161291b565b811461295b57600080fd5b50565b60008135905061296d81612947565b92915050565b60006020828403121561298957612988612916565b5b60006129978482850161295e565b91505092915050565b60008115159050919050565b6129b5816129a0565b82525050565b60006020820190506129d060008301846129ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a105780820151818401526020810190506129f5565b83811115612a1f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a41826129d6565b612a4b81856129e1565b9350612a5b8185602086016129f2565b612a6481612a25565b840191505092915050565b60006020820190508181036000830152612a898184612a36565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612abc82612a91565b9050919050565b612acc81612ab1565b8114612ad757600080fd5b50565b600081359050612ae981612ac3565b92915050565b6000819050919050565b612b0281612aef565b8114612b0d57600080fd5b50565b600081359050612b1f81612af9565b92915050565b60008060408385031215612b3c57612b3b612916565b5b6000612b4a85828601612ada565b9250506020612b5b85828601612b10565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b612b8a81612b65565b82525050565b6000602082019050612ba56000830184612b81565b92915050565b612bb481612aef565b82525050565b6000602082019050612bcf6000830184612bab565b92915050565b60008060408385031215612bec57612beb612916565b5b6000612bfa85828601612b10565b9250506020612c0b85828601612b10565b9150509250929050565b600080600060608486031215612c2e57612c2d612916565b5b6000612c3c86828701612ada565b9350506020612c4d86828701612ada565b9250506040612c5e86828701612b10565b9150509250925092565b600060208284031215612c7e57612c7d612916565b5b6000612c8c84828501612ada565b91505092915050565b600060208284031215612cab57612caa612916565b5b6000612cb984828501612b10565b91505092915050565b6000819050919050565b612cd581612cc2565b82525050565b6000602082019050612cf06000830184612ccc565b92915050565b612cff81612cc2565b8114612d0a57600080fd5b50565b600081359050612d1c81612cf6565b92915050565b600060208284031215612d3857612d37612916565b5b6000612d4684828501612d0d565b91505092915050565b612d5881612ab1565b82525050565b6000602082019050612d736000830184612d4f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dc057607f821691505b602082108103612dd357612dd2612d79565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e1382612aef565b9150612e1e83612aef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e5357612e52612dd9565b5b828201905092915050565b7f4552525f4e554d50415254535f5a45524f000000000000000000000000000000600082015250565b6000612e946011836129e1565b9150612e9f82612e5e565b602082019050919050565b60006020820190508181036000830152612ec381612e87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f0482612aef565b9150612f0f83612aef565b925082612f1f57612f1e612eca565b5b828204905092915050565b6000612f3582612aef565b9150612f4083612aef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f7957612f78612dd9565b5b828202905092915050565b6000612f8f82612aef565b9150612f9a83612aef565b925082821015612fad57612fac612dd9565b5b828203905092915050565b6000612fc382612aef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ff557612ff4612dd9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061303a82612b65565b915061304583612b65565b92508282101561305857613057612dd9565b5b828203905092915050565b6000819050919050565b600061308861308361307e84612b65565b613063565b612aef565b9050919050565b6130988161306d565b82525050565b60006020820190506130b3600083018461308f565b92915050565b7f4552525f574f554c445752415000000000000000000000000000000000000000600082015250565b60006130ef600d836129e1565b91506130fa826130b9565b602082019050919050565b6000602082019050818103600083015261311e816130e2565b9050919050565b61312e81612b65565b811461313957600080fd5b50565b60008151905061314b81613125565b92915050565b60006020828403121561316757613166612916565b5b60006131758482850161313c565b91505092915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b60006131b4600d836129e1565b91506131bf8261317e565b602082019050919050565b600060208201905081810360008301526131e3816131a7565b905091905056fea2646970667358221220264f607b835653f036df7c03346e36a25ca6aaeba8bb51495b6669a847b0b5b164736f6c634300080d0033
+\ No newline at end of file
diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleCap.bin b/python/erc20_demurrage_token/data/DemurrageTokenSingleCap.bin
@@ -1 +1 @@
-61010060405264e8d4a510006a52b7d2dcc80cd2e40000006200002391906200041a565b6080908152503480156200003657600080fd5b50604051620036593803806200365983398181016040528101906200005c919062000739565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555086600690805190602001906200012f92919062000331565b5085600790805190602001906200014892919062000331565b508460ff166008819055504260038190555060035460a08181525050603c836200017391906200041a565b60c081815250506b204fce5e3e25026110000000600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836fffffffffffffffffffffffffffffffff1660e0818152505060006200022b6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660006001620002c4640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600a8190555082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560ff16600a620002b091906200097e565b600b81905550505050505050505062000a34565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b8280546200033f90620009fe565b90600052602060002090601f016020900481019282620003635760008555620003af565b82601f106200037e57805160ff1916838001178555620003af565b82800160010185558215620003af579182015b82811115620003ae57825182559160200191906001019062000391565b5b509050620003be9190620003c2565b5090565b5b80821115620003dd576000816000905550600101620003c3565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200042782620003e1565b91506200043483620003e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000470576200046f620003eb565b5b828202905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004e48262000499565b810181811067ffffffffffffffff82111715620005065762000505620004aa565b5b80604052505050565b60006200051b6200047b565b9050620005298282620004d9565b919050565b600067ffffffffffffffff8211156200054c576200054b620004aa565b5b620005578262000499565b9050602081019050919050565b60005b838110156200058457808201518184015260208101905062000567565b8381111562000594576000848401525b50505050565b6000620005b1620005ab846200052e565b6200050f565b905082815260208101848484011115620005d057620005cf62000494565b5b620005dd84828562000564565b509392505050565b600082601f830112620005fd57620005fc6200048f565b5b81516200060f8482602086016200059a565b91505092915050565b600060ff82169050919050565b620006308162000618565b81146200063c57600080fd5b50565b600081519050620006508162000625565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6200067d8162000656565b81146200068957600080fd5b50565b6000815190506200069d8162000672565b92915050565b620006ae81620003e1565b8114620006ba57600080fd5b50565b600081519050620006ce81620006a3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200070182620006d4565b9050919050565b6200071381620006f4565b81146200071f57600080fd5b50565b600081519050620007338162000708565b92915050565b600080600080600080600060e0888a0312156200075b576200075a62000485565b5b600088015167ffffffffffffffff8111156200077c576200077b6200048a565b5b6200078a8a828b01620005e5565b975050602088015167ffffffffffffffff811115620007ae57620007ad6200048a565b5b620007bc8a828b01620005e5565b9650506040620007cf8a828b016200063f565b9550506060620007e28a828b016200068c565b9450506080620007f58a828b01620006bd565b93505060a0620008088a828b0162000722565b92505060c06200081b8a828b01620006bd565b91505092959891949750929550565b6000600282049050919050565b6000808291508390505b60018511156200088957808604811115620008615762000860620003eb565b5b6001851615620008715780820291505b808102905062000881856200082a565b945062000841565b94509492505050565b600082620008a4576001905062000977565b81620008b4576000905062000977565b8160018114620008cd5760028114620008d8576200090e565b600191505062000977565b60ff841115620008ed57620008ec620003eb565b5b8360020a915084821115620009075762000906620003eb565b5b5062000977565b5060208310610133831016604e8410600b8410161715620009485782820a905083811115620009425762000941620003eb565b5b62000977565b62000957848484600162000837565b92509050818404811115620009715762000970620003eb565b5b81810290505b9392505050565b60006200098b82620003e1565b91506200099883620003e1565b9250620009c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000892565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a1757607f821691505b6020821081141562000a2e5762000a2d620009cf565b5b50919050565b60805160a05160c05160e051612bac62000aad60003960008181610ccc01528181610f1c0152611c120152600081816111be01528181611a880152611cb10152600081816111ea01528181611cd20152611d1701526000818161125d015281816112950152818161130d0152611a640152612bac6000f3fe608060405234801561001057600080fd5b5060043610610286576000357c0100000000000000000000000000000000000000000000000000000000900480636ffa8a051161016e5780639da7d8ba116100e0578063e3ab207a116100a4578063e3ab207a14610847578063e54d63f714610877578063e8095295146108a7578063eda4e6d6146108c5578063f2fde38b146108e3578063f83da35d1461091357610286565b80639da7d8ba1461077b578063a9059cbb146107ab578063ab28cea0146107db578063b470aade146107f9578063c0ab70771461081757610286565b80638da5cb5b116101325780638da5cb5b146106b75780638f0b2d5d146106d55780638f1df6bc146106f15780638f770ad01461070f57806395d89b411461072d578063983b2d561461074b57610286565b80636ffa8a05146105eb57806370a082311461061b578063731f237c1461064b57806379ba5097146106695780638d34855a1461068757610286565b8063313ce5671161020757806351b4541c116101cb57806351b4541c146104ef578063573cc5071461051f57806358b2833b1461053d5780636721d4ef1461055b5780636787a9be1461058b5780636a2d094e146105bb57610286565b8063313ce5671461041157806340452d911461042f578063449a52f81461045f57806347a505171461048f5780634abfbba2146104bf57610286565b80631989c6a81161024e5780631989c6a814610345578063229ba1971461036357806323b872dd146103815780633092afd5146103b157806331333487146103e157610286565b806301ffc9a71461028b57806306fdde03146102bb578063095ea7b3146102d957806309f28f3c1461030957806318160ddd14610327575b600080fd5b6102a560048036038101906102a09190612280565b610943565b6040516102b291906122c8565b60405180910390f35b6102c3610aee565b6040516102d0919061237c565b60405180910390f35b6102f360048036038101906102ee9190612432565b610b7c565b60405161030091906122c8565b60405180910390f35b610311610c96565b60405161031e919061249d565b60405180910390f35b61032f610cb8565b60405161033c91906124c7565b60405180910390f35b61034d610cbe565b60405161035a91906124c7565b60405180910390f35b61036b610cca565b60405161037891906124c7565b60405180910390f35b61039b600480360381019061039691906124e2565b610cee565b6040516103a891906122c8565b60405180910390f35b6103cb60048036038101906103c69190612535565b610e0e565b6040516103d891906122c8565b60405180910390f35b6103fb60048036038101906103f69190612562565b610f01565b60405161040891906124c7565b60405180910390f35b610419610fb5565b60405161042691906124c7565b60405180910390f35b610449600480360381019061044491906125a2565b610fbb565b60405161045691906125e8565b60405180910390f35b61047960048036038101906104749190612432565b610fdf565b60405161048691906122c8565b60405180910390f35b6104a960048036038101906104a49190612535565b611171565b6040516104b691906124c7565b60405180910390f35b6104d960048036038101906104d491906125a2565b6111ba565b6040516104e691906124c7565b60405180910390f35b610509600480360381019061050491906125a2565b61121a565b60405161051691906124c7565b60405180910390f35b61052761123b565b60405161053491906124c7565b60405180910390f35b610545611241565b60405161055291906124c7565b60405180910390f35b61057560048036038101906105709190612562565b611247565b60405161058291906124c7565b60405180910390f35b6105a560048036038101906105a091906125a2565b6112c8565b6040516105b291906124c7565b60405180910390f35b6105d560048036038101906105d091906125a2565b611348565b6040516105e291906124c7565b60405180910390f35b6106056004803603810190610600919061262f565b611369565b60405161061291906124c7565b60405180910390f35b61063560048036038101906106309190612535565b6113a3565b60405161064291906124c7565b60405180910390f35b61065361145b565b60405161066091906122c8565b60405180910390f35b61067161146c565b60405161067e91906122c8565b60405180910390f35b6106a1600480360381019061069c919061262f565b611613565b6040516106ae91906124c7565b60405180910390f35b6106bf611641565b6040516106cc919061266b565b60405180910390f35b6106ef60048036038101906106ea9190612535565b611667565b005b6106f9611705565b60405161070691906122c8565b60405180910390f35b61071761184f565b60405161072491906124c7565b60405180910390f35b610735611855565b604051610742919061237c565b60405180910390f35b61076560048036038101906107609190612535565b6118e3565b60405161077291906122c8565b60405180910390f35b6107956004803603810190610790919061262f565b6119a0565b6040516107a291906124c7565b60405180910390f35b6107c560048036038101906107c09190612432565b6119cc565b6040516107d291906122c8565b60405180910390f35b6107e3611a62565b6040516107f091906124c7565b60405180910390f35b610801611a86565b60405161080e91906124c7565b60405180910390f35b610831600480360381019061082c91906125a2565b611aaa565b60405161083e91906122c8565b60405180910390f35b610861600480360381019061085c919061262f565b611be3565b60405161086e91906124c7565b60405180910390f35b610891600480360381019061088c9190612562565b611bf7565b60405161089e91906124c7565b60405180910390f35b6108af611cab565b6040516108bc919061249d565b60405180910390f35b6108cd611d15565b6040516108da91906124c7565b60405180910390f35b6108fd60048036038101906108f89190612535565b611d39565b60405161090a91906122c8565b60405180910390f35b61092d60048036038101906109289190612686565b611ddb565b60405161093a91906125e8565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156109985760019050610ae9565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156109eb5760019050610ae9565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610a3e5760019050610ae9565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610a915760019050610ae9565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610ae45760019050610ae9565b600090505b919050565b60068054610afb9061271c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b279061271c565b8015610b745780601f10610b4957610100808354040283529160200191610b74565b820191906000526020600020905b815481529060010190602001808311610b5757829003601f168201915b505050505081565b600080610b87611705565b50610b91836112c8565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c1f919061277d565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c8391906124c7565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60095481565b60008080549050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610cfb611705565b50610d05846112c8565b915081600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d9057600080fd5b610d9b868684611e48565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610dfa91906124c7565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e9757503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610ea057600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f0000000000000000000000000000000000000000000000000000000000000000610f459190612802565b905060005b84811015610f8e5764e8d4a510008284610f649190612833565b610f6e9190612802565b83610f79919061288d565b92508080610f86906128c1565b915050610f4a565b5064e8d4a510008583610fa19190612833565b610fab9190612802565b9250505092915050565b60085481565b60008181548110610fcb57600080fd5b906000526020600020016000915090505481565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590612956565b60405180910390fd5b600a546009548461107f919061277d565b11156110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906129c2565b60405180910390fd5b6110c8611705565b506110d2836112c8565b905082600960008282546110e6919061277d565b925050819055506110f78482611e6d565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560405161115591906124c7565b60405180910390a3611165611f32565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000826111e89190612833565b7f0000000000000000000000000000000000000000000000000000000000000000611213919061277d565b9050919050565b6000603c824261122a919061288d565b6112349190612802565b9050919050565b600b5481565b60035481565b6000806402540be4008361125b9190612833565b7f0000000000000000000000000000000000000000000000000000000000000000611286919061288d565b846112919190612833565b90507f0000000000000000000000000000000000000000000000000000000000000000816112bf9190612802565b91505092915050565b60006402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166112f991906129e2565b6fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000836113379190612833565b6113419190612802565b9050919050565b6000603c8242611358919061288d565b6113629190612802565b9050919050565b6000606860ff167affffffffffffffffffffffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b6000806000806113b285611171565b92506113bf60035461121a565b905061140b6402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166113f391906129e2565b6fffffffffffffffffffffffffffffffff1682610f01565b6fffffffffffffffffffffffffffffffff16915064e8d4a510006a52b7d2dcc80cd2e400000061143b9190612833565b82846114479190612833565b6114519190612802565b9350505050919050565b60006114676000611aaa565b905090565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114c957600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b6000806000611621846119a0565b915061162c84611369565b90506116388282611247565b92505050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c157600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080600061171b61145b565b50611724611fd4565b975060006001028814156117435760009850505050505050505061184c565b61174c88611be3565b955060018661175b919061277d565b9050611766866111ba565b9150600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1694506117a482611348565b925060008311156117c0576117b98584611bf7565b93506117c4565b8493505b6117d360008560095484611ddb565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915055611807876120cf565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d6758160405161183791906124c7565b60405180910390a16001985050505050505050505b90565b600a5481565b600780546118629061271c565b80601f016020809104026020016040519081016040528092919081815260200182805461188e9061271c565b80156118db5780601f106118b0576101008083540402835291602001916118db565b820191906000526020600020905b8154815290600101906020018083116118be57829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461193f57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b60008060006119d9611705565b506119e3846112c8565b91506119f0338684611e48565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611a4f91906124c7565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000611aba60035461121a565b91506000821415611ad057600092505050611bde565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600084118015611b1257508184105b15611b1b578391505b611b258183610f01565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c82611b6a9190612833565b600354611b77919061277d565b60038190555080826003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff16604051611bcf9190612a67565b60405180910390a46001925050505b919050565b600063ffffffff8260019004169050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f0000000000000000000000000000000000000000000000000000000000000000611c3b9190612802565b905060005b84811015611c845764e8d4a510008284611c5a9190612833565b611c649190612802565b83611c6f919061277d565b92508080611c7c906128c1565b915050611c40565b5064e8d4a510008583611c979190612833565b611ca19190612802565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042611cfc919061288d565b611d069190612802565b611d10919061277d565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d9557600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b600080611e55858461211b565b50611e608484611e6d565b5060019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000851415611eca5760009350505050611f2c565b611ed386611171565b92508483611ee1919061277d565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000806000600954905060006001600080549050611f50919061288d565b81548110611f6157611f60612a82565b5b90600052602060002001546001900491506cffffffffffffffffff000000001982169150602060ff16819060020a02821791508160010260006001600080549050611fac919061288d565b81548110611fbd57611fbc612a82565b5b906000526020600020018190555060019250505090565b6000806000806001600080549050611fec919061288d565b81548110611ffd57611ffc612a82565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015612071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120959190612add565b6fffffffffffffffffffffffffffffffff1690506120b282611be3565b81116120c6576000600102925050506120cc565b81925050505b90565b6000806120db83611613565b9050612111600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661210c836112c8565b611e6d565b5080915050919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000851415612178576000935050505061221d565b61218186611171565b9250848310156121c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bd90612b56565b60405180910390fd5b84836121d2919061288d565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61225d81612228565b811461226857600080fd5b50565b60008135905061227a81612254565b92915050565b60006020828403121561229657612295612223565b5b60006122a48482850161226b565b91505092915050565b60008115159050919050565b6122c2816122ad565b82525050565b60006020820190506122dd60008301846122b9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561231d578082015181840152602081019050612302565b8381111561232c576000848401525b50505050565b6000601f19601f8301169050919050565b600061234e826122e3565b61235881856122ee565b93506123688185602086016122ff565b61237181612332565b840191505092915050565b600060208201905081810360008301526123968184612343565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123c98261239e565b9050919050565b6123d9816123be565b81146123e457600080fd5b50565b6000813590506123f6816123d0565b92915050565b6000819050919050565b61240f816123fc565b811461241a57600080fd5b50565b60008135905061242c81612406565b92915050565b6000806040838503121561244957612448612223565b5b6000612457858286016123e7565b92505060206124688582860161241d565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61249781612472565b82525050565b60006020820190506124b2600083018461248e565b92915050565b6124c1816123fc565b82525050565b60006020820190506124dc60008301846124b8565b92915050565b6000806000606084860312156124fb576124fa612223565b5b6000612509868287016123e7565b935050602061251a868287016123e7565b925050604061252b8682870161241d565b9150509250925092565b60006020828403121561254b5761254a612223565b5b6000612559848285016123e7565b91505092915050565b6000806040838503121561257957612578612223565b5b60006125878582860161241d565b92505060206125988582860161241d565b9150509250929050565b6000602082840312156125b8576125b7612223565b5b60006125c68482850161241d565b91505092915050565b6000819050919050565b6125e2816125cf565b82525050565b60006020820190506125fd60008301846125d9565b92915050565b61260c816125cf565b811461261757600080fd5b50565b60008135905061262981612603565b92915050565b60006020828403121561264557612644612223565b5b60006126538482850161261a565b91505092915050565b612665816123be565b82525050565b6000602082019050612680600083018461265c565b92915050565b600080600080608085870312156126a05761269f612223565b5b60006126ae8782880161241d565b94505060206126bf8782880161241d565b93505060406126d08782880161241d565b92505060606126e18782880161241d565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061273457607f821691505b60208210811415612748576127476126ed565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612788826123fc565b9150612793836123fc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127c8576127c761274e565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061280d826123fc565b9150612818836123fc565b925082612828576128276127d3565b5b828204905092915050565b600061283e826123fc565b9150612849836123fc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128825761288161274e565b5b828202905092915050565b6000612898826123fc565b91506128a3836123fc565b9250828210156128b6576128b561274e565b5b828203905092915050565b60006128cc826123fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156128ff576128fe61274e565b5b600182019050919050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000612940600a836122ee565b915061294b8261290a565b602082019050919050565b6000602082019050818103600083015261296f81612933565b9050919050565b7f4552525f43415000000000000000000000000000000000000000000000000000600082015250565b60006129ac6007836122ee565b91506129b782612976565b602082019050919050565b600060208201905081810360008301526129db8161299f565b9050919050565b60006129ed82612472565b91506129f883612472565b9250816fffffffffffffffffffffffffffffffff0483118215151615612a2157612a2061274e565b5b828202905092915050565b6000819050919050565b6000612a51612a4c612a4784612472565b612a2c565b6123fc565b9050919050565b612a6181612a36565b82525050565b6000602082019050612a7c6000830184612a58565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b612aba81612472565b8114612ac557600080fd5b50565b600081519050612ad781612ab1565b92915050565b600060208284031215612af357612af2612223565b5b6000612b0184828501612ac8565b91505092915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b6000612b40600d836122ee565b9150612b4b82612b0a565b602082019050919050565b60006020820190508181036000830152612b6f81612b33565b905091905056fea2646970667358221220100682493d588dd205f0e53bc131ba668867313a64e728c35307651637c6757a64736f6c634300080b0033
-\ No newline at end of file
+61010060405264e8d4a510006a52b7d2dcc80cd2e40000006200002391906200041a565b6080908152503480156200003657600080fd5b506040516200364d3803806200364d83398181016040528101906200005c919062000739565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555086600690805190602001906200012f92919062000331565b5085600790805190602001906200014892919062000331565b508460ff166008819055504260038190555060035460a08181525050603c836200017391906200041a565b60c081815250506b204fce5e3e25026110000000600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836fffffffffffffffffffffffffffffffff1660e0818152505060006200022b6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660006001620002c4640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600a8190555082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560ff16600a620002b091906200097e565b600b81905550505050505050505062000a33565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b8280546200033f90620009fe565b90600052602060002090601f016020900481019282620003635760008555620003af565b82601f106200037e57805160ff1916838001178555620003af565b82800160010185558215620003af579182015b82811115620003ae57825182559160200191906001019062000391565b5b509050620003be9190620003c2565b5090565b5b80821115620003dd576000816000905550600101620003c3565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200042782620003e1565b91506200043483620003e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000470576200046f620003eb565b5b828202905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004e48262000499565b810181811067ffffffffffffffff82111715620005065762000505620004aa565b5b80604052505050565b60006200051b6200047b565b9050620005298282620004d9565b919050565b600067ffffffffffffffff8211156200054c576200054b620004aa565b5b620005578262000499565b9050602081019050919050565b60005b838110156200058457808201518184015260208101905062000567565b8381111562000594576000848401525b50505050565b6000620005b1620005ab846200052e565b6200050f565b905082815260208101848484011115620005d057620005cf62000494565b5b620005dd84828562000564565b509392505050565b600082601f830112620005fd57620005fc6200048f565b5b81516200060f8482602086016200059a565b91505092915050565b600060ff82169050919050565b620006308162000618565b81146200063c57600080fd5b50565b600081519050620006508162000625565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6200067d8162000656565b81146200068957600080fd5b50565b6000815190506200069d8162000672565b92915050565b620006ae81620003e1565b8114620006ba57600080fd5b50565b600081519050620006ce81620006a3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200070182620006d4565b9050919050565b6200071381620006f4565b81146200071f57600080fd5b50565b600081519050620007338162000708565b92915050565b600080600080600080600060e0888a0312156200075b576200075a62000485565b5b600088015167ffffffffffffffff8111156200077c576200077b6200048a565b5b6200078a8a828b01620005e5565b975050602088015167ffffffffffffffff811115620007ae57620007ad6200048a565b5b620007bc8a828b01620005e5565b9650506040620007cf8a828b016200063f565b9550506060620007e28a828b016200068c565b9450506080620007f58a828b01620006bd565b93505060a0620008088a828b0162000722565b92505060c06200081b8a828b01620006bd565b91505092959891949750929550565b6000600282049050919050565b6000808291508390505b60018511156200088957808604811115620008615762000860620003eb565b5b6001851615620008715780820291505b808102905062000881856200082a565b945062000841565b94509492505050565b600082620008a4576001905062000977565b81620008b4576000905062000977565b8160018114620008cd5760028114620008d8576200090e565b600191505062000977565b60ff841115620008ed57620008ec620003eb565b5b8360020a915084821115620009075762000906620003eb565b5b5062000977565b5060208310610133831016604e8410600b8410161715620009485782820a905083811115620009425762000941620003eb565b5b62000977565b62000957848484600162000837565b92509050818404811115620009715762000970620003eb565b5b81810290505b9392505050565b60006200098b82620003e1565b91506200099883620003e1565b9250620009c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000892565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a1757607f821691505b60208210810362000a2d5762000a2c620009cf565b5b50919050565b60805160a05160c05160e051612ba162000aac60003960008181610cc701528181610f170152611c0b0152600081816111b901528181611a820152611caa0152600081816111e501528181611ccb0152611d1001526000818161125801528181611290015281816113080152611a5e0152612ba16000f3fe608060405234801561001057600080fd5b5060043610610286576000357c0100000000000000000000000000000000000000000000000000000000900480636ffa8a051161016e5780639da7d8ba116100e0578063e3ab207a116100a4578063e3ab207a14610847578063e54d63f714610877578063e8095295146108a7578063eda4e6d6146108c5578063f2fde38b146108e3578063f83da35d1461091357610286565b80639da7d8ba1461077b578063a9059cbb146107ab578063ab28cea0146107db578063b470aade146107f9578063c0ab70771461081757610286565b80638da5cb5b116101325780638da5cb5b146106b75780638f0b2d5d146106d55780638f1df6bc146106f15780638f770ad01461070f57806395d89b411461072d578063983b2d561461074b57610286565b80636ffa8a05146105eb57806370a082311461061b578063731f237c1461064b57806379ba5097146106695780638d34855a1461068757610286565b8063313ce5671161020757806351b4541c116101cb57806351b4541c146104ef578063573cc5071461051f57806358b2833b1461053d5780636721d4ef1461055b5780636787a9be1461058b5780636a2d094e146105bb57610286565b8063313ce5671461041157806340452d911461042f578063449a52f81461045f57806347a505171461048f5780634abfbba2146104bf57610286565b80631989c6a81161024e5780631989c6a814610345578063229ba1971461036357806323b872dd146103815780633092afd5146103b157806331333487146103e157610286565b806301ffc9a71461028b57806306fdde03146102bb578063095ea7b3146102d957806309f28f3c1461030957806318160ddd14610327575b600080fd5b6102a560048036038101906102a09190612277565b610943565b6040516102b291906122bf565b60405180910390f35b6102c3610ae9565b6040516102d09190612373565b60405180910390f35b6102f360048036038101906102ee9190612429565b610b77565b60405161030091906122bf565b60405180910390f35b610311610c91565b60405161031e9190612494565b60405180910390f35b61032f610cb3565b60405161033c91906124be565b60405180910390f35b61034d610cb9565b60405161035a91906124be565b60405180910390f35b61036b610cc5565b60405161037891906124be565b60405180910390f35b61039b600480360381019061039691906124d9565b610ce9565b6040516103a891906122bf565b60405180910390f35b6103cb60048036038101906103c6919061252c565b610e09565b6040516103d891906122bf565b60405180910390f35b6103fb60048036038101906103f69190612559565b610efc565b60405161040891906124be565b60405180910390f35b610419610fb0565b60405161042691906124be565b60405180910390f35b61044960048036038101906104449190612599565b610fb6565b60405161045691906125df565b60405180910390f35b61047960048036038101906104749190612429565b610fda565b60405161048691906122bf565b60405180910390f35b6104a960048036038101906104a4919061252c565b61116c565b6040516104b691906124be565b60405180910390f35b6104d960048036038101906104d49190612599565b6111b5565b6040516104e691906124be565b60405180910390f35b61050960048036038101906105049190612599565b611215565b60405161051691906124be565b60405180910390f35b610527611236565b60405161053491906124be565b60405180910390f35b61054561123c565b60405161055291906124be565b60405180910390f35b61057560048036038101906105709190612559565b611242565b60405161058291906124be565b60405180910390f35b6105a560048036038101906105a09190612599565b6112c3565b6040516105b291906124be565b60405180910390f35b6105d560048036038101906105d09190612599565b611343565b6040516105e291906124be565b60405180910390f35b61060560048036038101906106009190612626565b611364565b60405161061291906124be565b60405180910390f35b6106356004803603810190610630919061252c565b61139e565b60405161064291906124be565b60405180910390f35b610653611456565b60405161066091906122bf565b60405180910390f35b610671611467565b60405161067e91906122bf565b60405180910390f35b6106a1600480360381019061069c9190612626565b61160e565b6040516106ae91906124be565b60405180910390f35b6106bf61163c565b6040516106cc9190612662565b60405180910390f35b6106ef60048036038101906106ea919061252c565b611662565b005b6106f9611700565b60405161070691906122bf565b60405180910390f35b610717611849565b60405161072491906124be565b60405180910390f35b61073561184f565b6040516107429190612373565b60405180910390f35b6107656004803603810190610760919061252c565b6118dd565b60405161077291906122bf565b60405180910390f35b61079560048036038101906107909190612626565b61199a565b6040516107a291906124be565b60405180910390f35b6107c560048036038101906107c09190612429565b6119c6565b6040516107d291906122bf565b60405180910390f35b6107e3611a5c565b6040516107f091906124be565b60405180910390f35b610801611a80565b60405161080e91906124be565b60405180910390f35b610831600480360381019061082c9190612599565b611aa4565b60405161083e91906122bf565b60405180910390f35b610861600480360381019061085c9190612626565b611bdc565b60405161086e91906124be565b60405180910390f35b610891600480360381019061088c9190612559565b611bf0565b60405161089e91906124be565b60405180910390f35b6108af611ca4565b6040516108bc9190612494565b60405180910390f35b6108cd611d0e565b6040516108da91906124be565b60405180910390f35b6108fd60048036038101906108f8919061252c565b611d32565b60405161090a91906122bf565b60405180910390f35b61092d6004803603810190610928919061267d565b611dd4565b60405161093a91906125df565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109975760019050610ae4565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109e95760019050610ae4565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a3b5760019050610ae4565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a8d5760019050610ae4565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610adf5760019050610ae4565b600090505b919050565b60068054610af690612713565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290612713565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b505050505081565b600080610b82611700565b50610b8c836112c3565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c1a9190612773565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c7e91906124be565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60095481565b60008080549050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610cf6611700565b50610d00846112c3565b915081600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d8b57600080fd5b610d96868684611e41565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610df591906124be565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e9257503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610e9b57600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f0000000000000000000000000000000000000000000000000000000000000000610f4091906127f8565b905060005b84811015610f895764e8d4a510008284610f5f9190612829565b610f6991906127f8565b83610f749190612883565b92508080610f81906128b7565b915050610f45565b5064e8d4a510008583610f9c9190612829565b610fa691906127f8565b9250505092915050565b60085481565b60008181548110610fc657600080fd5b906000526020600020016000915090505481565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110609061294b565b60405180910390fd5b600a546009548461107a9190612773565b11156110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b2906129b7565b60405180910390fd5b6110c3611700565b506110cd836112c3565b905082600960008282546110e19190612773565b925050819055506110f28482611e66565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560405161115091906124be565b60405180910390a3611160611f2a565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000826111e39190612829565b7f000000000000000000000000000000000000000000000000000000000000000061120e9190612773565b9050919050565b6000603c82426112259190612883565b61122f91906127f8565b9050919050565b600b5481565b60035481565b6000806402540be400836112569190612829565b7f00000000000000000000000000000000000000000000000000000000000000006112819190612883565b8461128c9190612829565b90507f0000000000000000000000000000000000000000000000000000000000000000816112ba91906127f8565b91505092915050565b60006402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166112f491906129d7565b6fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000836113329190612829565b61133c91906127f8565b9050919050565b6000603c82426113539190612883565b61135d91906127f8565b9050919050565b6000606860ff167affffffffffffffffffffffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b6000806000806113ad8561116c565b92506113ba600354611215565b90506114066402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166113ee91906129d7565b6fffffffffffffffffffffffffffffffff1682610efc565b6fffffffffffffffffffffffffffffffff16915064e8d4a510006a52b7d2dcc80cd2e40000006114369190612829565b82846114429190612829565b61144c91906127f8565b9350505050919050565b60006114626000611aa4565b905090565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114c457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600080600061161c8461199a565b915061162784611364565b90506116338282611242565b92505050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116bc57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000806000611716611456565b5061171f611fcc565b97506000600102880361173d57600098505050505050505050611846565b61174688611bdc565b95506001866117559190612773565b9050611760866111b5565b9150600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16945061179e82611343565b925060008311156117ba576117b38584611bf0565b93506117be565b8493505b6117cd60008560095484611dd4565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915055611801876120c7565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d6758160405161183191906124be565b60405180910390a16001985050505050505050505b90565b600a5481565b6007805461185c90612713565b80601f016020809104026020016040519081016040528092919081815260200182805461188890612713565b80156118d55780601f106118aa576101008083540402835291602001916118d5565b820191906000526020600020905b8154815290600101906020018083116118b857829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461193957600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b60008060006119d3611700565b506119dd846112c3565b91506119ea338684611e41565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611a4991906124be565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000611ab4600354611215565b915060008203611ac957600092505050611bd7565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600084118015611b0b57508184105b15611b14578391505b611b1e8183610efc565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c82611b639190612829565b600354611b709190612773565b60038190555080826003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff16604051611bc89190612a5c565b60405180910390a46001925050505b919050565b600063ffffffff8260019004169050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f0000000000000000000000000000000000000000000000000000000000000000611c3491906127f8565b905060005b84811015611c7d5764e8d4a510008284611c539190612829565b611c5d91906127f8565b83611c689190612773565b92508080611c75906128b7565b915050611c39565b5064e8d4a510008583611c909190612829565b611c9a91906127f8565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042611cf59190612883565b611cff91906127f8565b611d099190612773565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d8e57600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b600080611e4e8584612113565b50611e598484611e66565b5060019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008503611ec25760009350505050611f24565b611ecb8661116c565b92508483611ed99190612773565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000806000600954905060006001600080549050611f489190612883565b81548110611f5957611f58612a77565b5b90600052602060002001546001900491506cffffffffffffffffff000000001982169150602060ff16819060020a02821791508160010260006001600080549050611fa49190612883565b81548110611fb557611fb4612a77565b5b906000526020600020018190555060019250505090565b6000806000806001600080549050611fe49190612883565b81548110611ff557611ff4612a77565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015612069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208d9190612ad2565b6fffffffffffffffffffffffffffffffff1690506120aa82611bdc565b81116120be576000600102925050506120c4565b81925050505b90565b6000806120d38361160e565b9050612109600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612104836112c3565b611e66565b5080915050919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361216f5760009350505050612214565b6121788661116c565b9250848310156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490612b4b565b60405180910390fd5b84836121c99190612883565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122548161221f565b811461225f57600080fd5b50565b6000813590506122718161224b565b92915050565b60006020828403121561228d5761228c61221a565b5b600061229b84828501612262565b91505092915050565b60008115159050919050565b6122b9816122a4565b82525050565b60006020820190506122d460008301846122b0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123145780820151818401526020810190506122f9565b83811115612323576000848401525b50505050565b6000601f19601f8301169050919050565b6000612345826122da565b61234f81856122e5565b935061235f8185602086016122f6565b61236881612329565b840191505092915050565b6000602082019050818103600083015261238d818461233a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123c082612395565b9050919050565b6123d0816123b5565b81146123db57600080fd5b50565b6000813590506123ed816123c7565b92915050565b6000819050919050565b612406816123f3565b811461241157600080fd5b50565b600081359050612423816123fd565b92915050565b600080604083850312156124405761243f61221a565b5b600061244e858286016123de565b925050602061245f85828601612414565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61248e81612469565b82525050565b60006020820190506124a96000830184612485565b92915050565b6124b8816123f3565b82525050565b60006020820190506124d360008301846124af565b92915050565b6000806000606084860312156124f2576124f161221a565b5b6000612500868287016123de565b9350506020612511868287016123de565b925050604061252286828701612414565b9150509250925092565b6000602082840312156125425761254161221a565b5b6000612550848285016123de565b91505092915050565b600080604083850312156125705761256f61221a565b5b600061257e85828601612414565b925050602061258f85828601612414565b9150509250929050565b6000602082840312156125af576125ae61221a565b5b60006125bd84828501612414565b91505092915050565b6000819050919050565b6125d9816125c6565b82525050565b60006020820190506125f460008301846125d0565b92915050565b612603816125c6565b811461260e57600080fd5b50565b600081359050612620816125fa565b92915050565b60006020828403121561263c5761263b61221a565b5b600061264a84828501612611565b91505092915050565b61265c816123b5565b82525050565b60006020820190506126776000830184612653565b92915050565b600080600080608085870312156126975761269661221a565b5b60006126a587828801612414565b94505060206126b687828801612414565b93505060406126c787828801612414565b92505060606126d887828801612414565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061272b57607f821691505b60208210810361273e5761273d6126e4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061277e826123f3565b9150612789836123f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127be576127bd612744565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612803826123f3565b915061280e836123f3565b92508261281e5761281d6127c9565b5b828204905092915050565b6000612834826123f3565b915061283f836123f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561287857612877612744565b5b828202905092915050565b600061288e826123f3565b9150612899836123f3565b9250828210156128ac576128ab612744565b5b828203905092915050565b60006128c2826123f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128f4576128f3612744565b5b600182019050919050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000612935600a836122e5565b9150612940826128ff565b602082019050919050565b6000602082019050818103600083015261296481612928565b9050919050565b7f4552525f43415000000000000000000000000000000000000000000000000000600082015250565b60006129a16007836122e5565b91506129ac8261296b565b602082019050919050565b600060208201905081810360008301526129d081612994565b9050919050565b60006129e282612469565b91506129ed83612469565b9250816fffffffffffffffffffffffffffffffff0483118215151615612a1657612a15612744565b5b828202905092915050565b6000819050919050565b6000612a46612a41612a3c84612469565b612a21565b6123f3565b9050919050565b612a5681612a2b565b82525050565b6000602082019050612a716000830184612a4d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b612aaf81612469565b8114612aba57600080fd5b50565b600081519050612acc81612aa6565b92915050565b600060208284031215612ae857612ae761221a565b5b6000612af684828501612abd565b91505092915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b6000612b35600d836122e5565b9150612b4082612aff565b602082019050919050565b60006020820190508181036000830152612b6481612b28565b905091905056fea264697066735822122062c31e95bd6895f83a0143b8b2662ee1e29e96dcc6cdf00d59c085ca9228ddc264736f6c634300080d0033
+\ No newline at end of file
diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin
@@ -1 +1 @@
-61010060405264e8d4a510006a52b7d2dcc80cd2e400000062000023919062000412565b6080908152503480156200003657600080fd5b506040516200354d3803806200354d83398181016040528101906200005c919062000731565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555085600690805190602001906200012f92919062000329565b5084600790805190602001906200014892919062000329565b508360ff166008819055504260038190555060035460a08181525050603c8262000173919062000412565b60c081815250506b204fce5e3e25026110000000600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550826fffffffffffffffffffffffffffffffff1660e0818152505060006200022b6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660006001620002bc640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460ff16600a620002a991906200095f565b600a819055505050505050505062000a15565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b8280546200033790620009df565b90600052602060002090601f0160209004810192826200035b5760008555620003a7565b82601f106200037657805160ff1916838001178555620003a7565b82800160010185558215620003a7579182015b82811115620003a657825182559160200191906001019062000389565b5b509050620003b69190620003ba565b5090565b5b80821115620003d5576000816000905550600101620003bb565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200041f82620003d9565b91506200042c83620003d9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620004685762000467620003e3565b5b828202905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004dc8262000491565b810181811067ffffffffffffffff82111715620004fe57620004fd620004a2565b5b80604052505050565b60006200051362000473565b9050620005218282620004d1565b919050565b600067ffffffffffffffff821115620005445762000543620004a2565b5b6200054f8262000491565b9050602081019050919050565b60005b838110156200057c5780820151818401526020810190506200055f565b838111156200058c576000848401525b50505050565b6000620005a9620005a38462000526565b62000507565b905082815260208101848484011115620005c857620005c76200048c565b5b620005d58482856200055c565b509392505050565b600082601f830112620005f557620005f462000487565b5b81516200060784826020860162000592565b91505092915050565b600060ff82169050919050565b620006288162000610565b81146200063457600080fd5b50565b60008151905062000648816200061d565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b62000675816200064e565b81146200068157600080fd5b50565b60008151905062000695816200066a565b92915050565b620006a681620003d9565b8114620006b257600080fd5b50565b600081519050620006c6816200069b565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006f982620006cc565b9050919050565b6200070b81620006ec565b81146200071757600080fd5b50565b6000815190506200072b8162000700565b92915050565b60008060008060008060c087890312156200075157620007506200047d565b5b600087015167ffffffffffffffff81111562000772576200077162000482565b5b6200078089828a01620005dd565b965050602087015167ffffffffffffffff811115620007a457620007a362000482565b5b620007b289828a01620005dd565b9550506040620007c589828a0162000637565b9450506060620007d889828a0162000684565b9350506080620007eb89828a01620006b5565b92505060a0620007fe89828a016200071a565b9150509295509295509295565b6000600282049050919050565b6000808291508390505b60018511156200086a57808604811115620008425762000841620003e3565b5b6001851615620008525780820291505b808102905062000862856200080b565b945062000822565b94509492505050565b60008262000885576001905062000958565b8162000895576000905062000958565b8160018114620008ae5760028114620008b957620008ef565b600191505062000958565b60ff841115620008ce57620008cd620003e3565b5b8360020a915084821115620008e857620008e7620003e3565b5b5062000958565b5060208310610133831016604e8410600b8410161715620009295782820a905083811115620009235762000922620003e3565b5b62000958565b62000938848484600162000818565b92509050818404811115620009525762000951620003e3565b5b81810290505b9392505050565b60006200096c82620003d9565b91506200097983620003d9565b9250620009a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000873565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009f857607f821691505b6020821081141562000a0f5762000a0e620009b0565b5b50919050565b60805160a05160c05160e051612abf62000a8e60003960008181610ca301528181610ef30152611b9101526000818161114301528181611a070152611c3001526000818161116f01528181611c510152611c960152600081816111e20152818161121a0152818161129201526119e30152612abf6000f3fe608060405234801561001057600080fd5b506004361061027b576000357c0100000000000000000000000000000000000000000000000000000000900480636ffa8a05116101635780639da7d8ba116100e0578063e3ab207a116100a4578063e3ab207a1461081e578063e54d63f71461084e578063e80952951461087e578063eda4e6d61461089c578063f2fde38b146108ba578063f83da35d146108ea5761027b565b80639da7d8ba14610752578063a9059cbb14610782578063ab28cea0146107b2578063b470aade146107d0578063c0ab7077146107ee5761027b565b80638da5cb5b116101275780638da5cb5b146106ac5780638f0b2d5d146106ca5780638f1df6bc146106e657806395d89b4114610704578063983b2d56146107225761027b565b80636ffa8a05146105e057806370a0823114610610578063731f237c1461064057806379ba50971461065e5780638d34855a1461067c5761027b565b8063313ce567116101fc57806351b4541c116101c057806351b4541c146104e4578063573cc5071461051457806358b2833b146105325780636721d4ef146105505780636787a9be146105805780636a2d094e146105b05761027b565b8063313ce5671461040657806340452d9114610424578063449a52f81461045457806347a50517146104845780634abfbba2146104b45761027b565b80631989c6a8116102435780631989c6a81461033a578063229ba1971461035857806323b872dd146103765780633092afd5146103a657806331333487146103d65761027b565b806301ffc9a71461028057806306fdde03146102b0578063095ea7b3146102ce57806309f28f3c146102fe57806318160ddd1461031c575b600080fd5b61029a600480360381019061029591906121ff565b61091a565b6040516102a79190612247565b60405180910390f35b6102b8610ac5565b6040516102c591906122fb565b60405180910390f35b6102e860048036038101906102e391906123b1565b610b53565b6040516102f59190612247565b60405180910390f35b610306610c6d565b604051610313919061241c565b60405180910390f35b610324610c8f565b6040516103319190612446565b60405180910390f35b610342610c95565b60405161034f9190612446565b60405180910390f35b610360610ca1565b60405161036d9190612446565b60405180910390f35b610390600480360381019061038b9190612461565b610cc5565b60405161039d9190612247565b60405180910390f35b6103c060048036038101906103bb91906124b4565b610de5565b6040516103cd9190612247565b60405180910390f35b6103f060048036038101906103eb91906124e1565b610ed8565b6040516103fd9190612446565b60405180910390f35b61040e610f8c565b60405161041b9190612446565b60405180910390f35b61043e60048036038101906104399190612521565b610f92565b60405161044b9190612567565b60405180910390f35b61046e600480360381019061046991906123b1565b610fb6565b60405161047b9190612247565b60405180910390f35b61049e600480360381019061049991906124b4565b6110f6565b6040516104ab9190612446565b60405180910390f35b6104ce60048036038101906104c99190612521565b61113f565b6040516104db9190612446565b60405180910390f35b6104fe60048036038101906104f99190612521565b61119f565b60405161050b9190612446565b60405180910390f35b61051c6111c0565b6040516105299190612446565b60405180910390f35b61053a6111c6565b6040516105479190612446565b60405180910390f35b61056a600480360381019061056591906124e1565b6111cc565b6040516105779190612446565b60405180910390f35b61059a60048036038101906105959190612521565b61124d565b6040516105a79190612446565b60405180910390f35b6105ca60048036038101906105c59190612521565b6112cd565b6040516105d79190612446565b60405180910390f35b6105fa60048036038101906105f591906125ae565b6112ee565b6040516106079190612446565b60405180910390f35b61062a600480360381019061062591906124b4565b611328565b6040516106379190612446565b60405180910390f35b6106486113e0565b6040516106559190612247565b60405180910390f35b6106666113f1565b6040516106739190612247565b60405180910390f35b610696600480360381019061069191906125ae565b611598565b6040516106a39190612446565b60405180910390f35b6106b46115c6565b6040516106c191906125ea565b60405180910390f35b6106e460048036038101906106df91906124b4565b6115ec565b005b6106ee61168a565b6040516106fb9190612247565b60405180910390f35b61070c6117d4565b60405161071991906122fb565b60405180910390f35b61073c600480360381019061073791906124b4565b611862565b6040516107499190612247565b60405180910390f35b61076c600480360381019061076791906125ae565b61191f565b6040516107799190612446565b60405180910390f35b61079c600480360381019061079791906123b1565b61194b565b6040516107a99190612247565b60405180910390f35b6107ba6119e1565b6040516107c79190612446565b60405180910390f35b6107d8611a05565b6040516107e59190612446565b60405180910390f35b61080860048036038101906108039190612521565b611a29565b6040516108159190612247565b60405180910390f35b610838600480360381019061083391906125ae565b611b62565b6040516108459190612446565b60405180910390f35b610868600480360381019061086391906124e1565b611b76565b6040516108759190612446565b60405180910390f35b610886611c2a565b604051610893919061241c565b60405180910390f35b6108a4611c94565b6040516108b19190612446565b60405180910390f35b6108d460048036038101906108cf91906124b4565b611cb8565b6040516108e19190612247565b60405180910390f35b61090460048036038101906108ff9190612605565b611d5a565b6040516109119190612567565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561096f5760019050610ac0565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156109c25760019050610ac0565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610a155760019050610ac0565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610a685760019050610ac0565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610abb5760019050610ac0565b600090505b919050565b60068054610ad29061269b565b80601f0160208091040260200160405190810160405280929190818152602001828054610afe9061269b565b8015610b4b5780601f10610b2057610100808354040283529160200191610b4b565b820191906000526020600020905b815481529060010190602001808311610b2e57829003601f168201915b505050505081565b600080610b5e61168a565b50610b688361124d565b905080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bf691906126fc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c5a9190612446565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60095481565b60008080549050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610cd261168a565b50610cdc8461124d565b915081600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d6757600080fd5b610d72868684611dc7565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610dd19190612446565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e6e57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610e7757600080fd5b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f0000000000000000000000000000000000000000000000000000000000000000610f1c9190612781565b905060005b84811015610f655764e8d4a510008284610f3b91906127b2565b610f459190612781565b83610f50919061280c565b92508080610f5d90612840565b915050610f21565b5064e8d4a510008583610f7891906127b2565b610f829190612781565b9250505092915050565b60085481565b60008181548110610fa257600080fd5b906000526020600020016000915090505481565b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c906128d5565b60405180910390fd5b61104d61168a565b506110578361124d565b9050826009600082825461106b91906126fc565b9250508190555061107c8482611dec565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516110da9190612446565b60405180910390a36110ea611eb1565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f00000000000000000000000000000000000000000000000000000000000000008261116d91906127b2565b7f000000000000000000000000000000000000000000000000000000000000000061119891906126fc565b9050919050565b6000603c82426111af919061280c565b6111b99190612781565b9050919050565b600a5481565b60035481565b6000806402540be400836111e091906127b2565b7f000000000000000000000000000000000000000000000000000000000000000061120b919061280c565b8461121691906127b2565b90507f0000000000000000000000000000000000000000000000000000000000000000816112449190612781565b91505092915050565b60006402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff1661127e91906128f5565b6fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000836112bc91906127b2565b6112c69190612781565b9050919050565b6000603c82426112dd919061280c565b6112e79190612781565b9050919050565b6000606860ff167affffffffffffffffffffffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b600080600080611337856110f6565b925061134460035461119f565b90506113906402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff1661137891906128f5565b6fffffffffffffffffffffffffffffffff1682610ed8565b6fffffffffffffffffffffffffffffffff16915064e8d4a510006a52b7d2dcc80cd2e40000006113c091906127b2565b82846113cc91906127b2565b6113d69190612781565b9350505050919050565b60006113ec6000611a29565b905090565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461144e57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b60008060006115a68461191f565b91506115b1846112ee565b90506115bd82826111cc565b92505050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164657600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060008060008060006116a06113e0565b506116a9611f53565b975060006001028814156116c8576000985050505050505050506117d1565b6116d188611b62565b95506001866116e091906126fc565b90506116eb8661113f565b9150600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169450611729826112cd565b925060008311156117455761173e8584611b76565b9350611749565b8493505b61175860008560095484611d5a565b9650600087908060018154018082558091505060019003906000526020600020016000909190919091505561178c8761204e565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d675816040516117bc9190612446565b60405180910390a16001985050505050505050505b90565b600780546117e19061269b565b80601f016020809104026020016040519081016040528092919081815260200182805461180d9061269b565b801561185a5780601f1061182f5761010080835404028352916020019161185a565b820191906000526020600020905b81548152906001019060200180831161183d57829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118be57600080fd5b6001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b600080600061195861168a565b506119628461124d565b915061196f338684611dc7565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516119ce9190612446565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000611a3960035461119f565b91506000821415611a4f57600092505050611b5d565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600084118015611a9157508184105b15611a9a578391505b611aa48183610ed8565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c82611ae991906127b2565b600354611af691906126fc565b60038190555080826003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff16604051611b4e919061297a565b60405180910390a46001925050505b919050565b600063ffffffff8260019004169050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f0000000000000000000000000000000000000000000000000000000000000000611bba9190612781565b905060005b84811015611c035764e8d4a510008284611bd991906127b2565b611be39190612781565b83611bee91906126fc565b92508080611bfb90612840565b915050611bbf565b5064e8d4a510008583611c1691906127b2565b611c209190612781565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042611c7b919061280c565b611c859190612781565b611c8f91906126fc565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d1457600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b600080611dd4858461209a565b50611ddf8484611dec565b5060019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000851415611e495760009350505050611eab565b611e52866110f6565b92508483611e6091906126fc565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000806000600954905060006001600080549050611ecf919061280c565b81548110611ee057611edf612995565b5b90600052602060002001546001900491506cffffffffffffffffff000000001982169150602060ff16819060020a02821791508160010260006001600080549050611f2b919061280c565b81548110611f3c57611f3b612995565b5b906000526020600020018190555060019250505090565b6000806000806001600080549050611f6b919061280c565b81548110611f7c57611f7b612995565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015611ff0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201491906129f0565b6fffffffffffffffffffffffffffffffff16905061203182611b62565b81116120455760006001029250505061204b565b81925050505b90565b60008061205a83611598565b9050612090600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661208b8361124d565b611dec565b5080915050919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008514156120f7576000935050505061219c565b612100866110f6565b925084831015612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c90612a69565b60405180910390fd5b8483612151919061280c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121dc816121a7565b81146121e757600080fd5b50565b6000813590506121f9816121d3565b92915050565b600060208284031215612215576122146121a2565b5b6000612223848285016121ea565b91505092915050565b60008115159050919050565b6122418161222c565b82525050565b600060208201905061225c6000830184612238565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561229c578082015181840152602081019050612281565b838111156122ab576000848401525b50505050565b6000601f19601f8301169050919050565b60006122cd82612262565b6122d7818561226d565b93506122e781856020860161227e565b6122f0816122b1565b840191505092915050565b6000602082019050818103600083015261231581846122c2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123488261231d565b9050919050565b6123588161233d565b811461236357600080fd5b50565b6000813590506123758161234f565b92915050565b6000819050919050565b61238e8161237b565b811461239957600080fd5b50565b6000813590506123ab81612385565b92915050565b600080604083850312156123c8576123c76121a2565b5b60006123d685828601612366565b92505060206123e78582860161239c565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b612416816123f1565b82525050565b6000602082019050612431600083018461240d565b92915050565b6124408161237b565b82525050565b600060208201905061245b6000830184612437565b92915050565b60008060006060848603121561247a576124796121a2565b5b600061248886828701612366565b935050602061249986828701612366565b92505060406124aa8682870161239c565b9150509250925092565b6000602082840312156124ca576124c96121a2565b5b60006124d884828501612366565b91505092915050565b600080604083850312156124f8576124f76121a2565b5b60006125068582860161239c565b92505060206125178582860161239c565b9150509250929050565b600060208284031215612537576125366121a2565b5b60006125458482850161239c565b91505092915050565b6000819050919050565b6125618161254e565b82525050565b600060208201905061257c6000830184612558565b92915050565b61258b8161254e565b811461259657600080fd5b50565b6000813590506125a881612582565b92915050565b6000602082840312156125c4576125c36121a2565b5b60006125d284828501612599565b91505092915050565b6125e48161233d565b82525050565b60006020820190506125ff60008301846125db565b92915050565b6000806000806080858703121561261f5761261e6121a2565b5b600061262d8782880161239c565b945050602061263e8782880161239c565b935050604061264f8782880161239c565b92505060606126608782880161239c565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126b357607f821691505b602082108114156126c7576126c661266c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127078261237b565b91506127128361237b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612747576127466126cd565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061278c8261237b565b91506127978361237b565b9250826127a7576127a6612752565b5b828204905092915050565b60006127bd8261237b565b91506127c88361237b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612801576128006126cd565b5b828202905092915050565b60006128178261237b565b91506128228361237b565b925082821015612835576128346126cd565b5b828203905092915050565b600061284b8261237b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561287e5761287d6126cd565b5b600182019050919050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006128bf600a8361226d565b91506128ca82612889565b602082019050919050565b600060208201905081810360008301526128ee816128b2565b9050919050565b6000612900826123f1565b915061290b836123f1565b9250816fffffffffffffffffffffffffffffffff0483118215151615612934576129336126cd565b5b828202905092915050565b6000819050919050565b600061296461295f61295a846123f1565b61293f565b61237b565b9050919050565b61297481612949565b82525050565b600060208201905061298f600083018461296b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6129cd816123f1565b81146129d857600080fd5b50565b6000815190506129ea816129c4565b92915050565b600060208284031215612a0657612a056121a2565b5b6000612a14848285016129db565b91505092915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b6000612a53600d8361226d565b9150612a5e82612a1d565b602082019050919050565b60006020820190508181036000830152612a8281612a46565b905091905056fea264697066735822122040c7b82458bb5e6e45df5d826444d591ea75814bd7cd674b11c9026417e4d59064736f6c634300080b0033
-\ No newline at end of file
+61010060405264e8d4a510006a52b7d2dcc80cd2e40000006200002391906200043e565b6080908152503480156200003657600080fd5b50604051620034bf380380620034bf83398181016040528101906200005c91906200075d565b33600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555085600790805190602001906200012f92919062000355565b5084600890805190602001906200014892919062000355565b508360ff166009819055504260048190555060045460a08181525050603c826200017391906200043e565b60c0818152505060646a52b7d2dcc80cd2e400000062000194919062000837565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16600381905550826fffffffffffffffffffffffffffffffff1660e0818152505060006200026f6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660006001620002e8640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050620008ec565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b8280546200036390620008b7565b90600052602060002090601f016020900481019282620003875760008555620003d3565b82601f10620003a257805160ff1916838001178555620003d3565b82800160010185558215620003d3579182015b82811115620003d2578251825591602001919060010190620003b5565b5b509050620003e29190620003e6565b5090565b5b8082111562000401576000816000905550600101620003e7565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200044b8262000405565b9150620004588362000405565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200049457620004936200040f565b5b828202905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200050882620004bd565b810181811067ffffffffffffffff821117156200052a5762000529620004ce565b5b80604052505050565b60006200053f6200049f565b90506200054d8282620004fd565b919050565b600067ffffffffffffffff82111562000570576200056f620004ce565b5b6200057b82620004bd565b9050602081019050919050565b60005b83811015620005a85780820151818401526020810190506200058b565b83811115620005b8576000848401525b50505050565b6000620005d5620005cf8462000552565b62000533565b905082815260208101848484011115620005f457620005f3620004b8565b5b6200060184828562000588565b509392505050565b600082601f830112620006215762000620620004b3565b5b815162000633848260208601620005be565b91505092915050565b600060ff82169050919050565b62000654816200063c565b81146200066057600080fd5b50565b600081519050620006748162000649565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b620006a1816200067a565b8114620006ad57600080fd5b50565b600081519050620006c18162000696565b92915050565b620006d28162000405565b8114620006de57600080fd5b50565b600081519050620006f281620006c7565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200072582620006f8565b9050919050565b620007378162000718565b81146200074357600080fd5b50565b60008151905062000757816200072c565b92915050565b60008060008060008060c087890312156200077d576200077c620004a9565b5b600087015167ffffffffffffffff8111156200079e576200079d620004ae565b5b620007ac89828a0162000609565b965050602087015167ffffffffffffffff811115620007d057620007cf620004ae565b5b620007de89828a0162000609565b9550506040620007f189828a0162000663565b94505060606200080489828a01620006b0565b93505060806200081789828a01620006e1565b92505060a06200082a89828a0162000746565b9150509295509295509295565b600062000844826200067a565b915062000851836200067a565b9250816fffffffffffffffffffffffffffffffff04831182151516156200087d576200087c6200040f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008d057607f821691505b602082108103620008e657620008e562000888565b5b50919050565b60805160a05160c05160e051612b5a6200096560003960008181610ccd01528181610f1d0152611be301526000818161116d015281816119fd0152611c8201526000818161119901528181611ca30152611ce80152600081816112060152818161123e015281816112b601526119d90152612b5a6000f3fe608060405234801561001057600080fd5b5060043610610286576000357c0100000000000000000000000000000000000000000000000000000000900480636ffa8a051161016e578063ab28cea0116100e0578063e3ab207a116100a4578063e3ab207a14610847578063e54d63f714610877578063e8095295146108a7578063eda4e6d6146108c5578063f2fde38b146108e3578063f83da35d1461091357610286565b8063ab28cea01461078d578063b470aade146107ab578063c0ab7077146107c9578063d340ef8a146107f9578063de9b84881461081757610286565b80638f0b2d5d116101325780638f0b2d5d146106a55780638f1df6bc146106c157806395d89b41146106df578063983b2d56146106fd5780639da7d8ba1461072d578063a9059cbb1461075d57610286565b80636ffa8a05146105eb57806370a082311461061b578063731f237c1461064b57806379ba5097146106695780638da5cb5b1461068757610286565b806331333487116102075780634abfbba2116101cb5780634abfbba2146104dd57806351b4541c1461050d57806358b2833b1461053d5780636721d4ef1461055b5780636787a9be1461058b5780636a2d094e146105bb57610286565b806331333487146103ff578063313ce5671461042f57806340452d911461044d578063449a52f81461047d57806347a50517146104ad57610286565b806318160ddd1161024e57806318160ddd146103455780631989c6a814610363578063229ba1971461038157806323b872dd1461039f5780633092afd5146103cf57610286565b806301ffc9a71461028b57806306fdde03146102bb578063095ea7b3146102d957806309f28f3c146103095780630b2472eb14610327575b600080fd5b6102a560048036038101906102a0919061225c565b610943565b6040516102b291906122a4565b60405180910390f35b6102c3610ae9565b6040516102d09190612358565b60405180910390f35b6102f360048036038101906102ee919061240e565b610b77565b60405161030091906122a4565b60405180910390f35b610311610c91565b60405161031e9190612479565b60405180910390f35b61032f610cb3565b60405161033c91906124a3565b60405180910390f35b61034d610cb9565b60405161035a91906124a3565b60405180910390f35b61036b610cbf565b60405161037891906124a3565b60405180910390f35b610389610ccb565b60405161039691906124a3565b60405180910390f35b6103b960048036038101906103b491906124be565b610cef565b6040516103c691906122a4565b60405180910390f35b6103e960048036038101906103e49190612511565b610e0f565b6040516103f691906122a4565b60405180910390f35b6104196004803603810190610414919061253e565b610f02565b60405161042691906124a3565b60405180910390f35b610437610fb6565b60405161044491906124a3565b60405180910390f35b6104676004803603810190610462919061257e565b610fbc565b60405161047491906125c4565b60405180910390f35b6104976004803603810190610492919061240e565b610fe0565b6040516104a491906122a4565b60405180910390f35b6104c760048036038101906104c29190612511565b611120565b6040516104d491906124a3565b60405180910390f35b6104f760048036038101906104f2919061257e565b611169565b60405161050491906124a3565b60405180910390f35b6105276004803603810190610522919061257e565b6111c9565b60405161053491906124a3565b60405180910390f35b6105456111ea565b60405161055291906124a3565b60405180910390f35b6105756004803603810190610570919061253e565b6111f0565b60405161058291906124a3565b60405180910390f35b6105a560048036038101906105a0919061257e565b611271565b6040516105b291906124a3565b60405180910390f35b6105d560048036038101906105d0919061257e565b6112f1565b6040516105e291906124a3565b60405180910390f35b6106056004803603810190610600919061260b565b611312565b60405161061291906124a3565b60405180910390f35b61063560048036038101906106309190612511565b61134c565b60405161064291906124a3565b60405180910390f35b610653611404565b60405161066091906122a4565b60405180910390f35b610671611415565b60405161067e91906122a4565b60405180910390f35b61068f6115bc565b60405161069c9190612647565b60405180910390f35b6106bf60048036038101906106ba9190612511565b6115e2565b005b6106c9611680565b6040516106d691906122a4565b60405180910390f35b6106e76117ca565b6040516106f49190612358565b60405180910390f35b61071760048036038101906107129190612511565b611858565b60405161072491906122a4565b60405180910390f35b6107476004803603810190610742919061260b565b611915565b60405161075491906124a3565b60405180910390f35b6107776004803603810190610772919061240e565b611941565b60405161078491906122a4565b60405180910390f35b6107956119d7565b6040516107a291906124a3565b60405180910390f35b6107b36119fb565b6040516107c091906124a3565b60405180910390f35b6107e360048036038101906107de919061257e565b611a1f565b6040516107f091906122a4565b60405180910390f35b610801611b57565b60405161080e91906124a3565b60405180910390f35b610831600480360381019061082c9190612662565b611b5d565b60405161083e91906124a3565b60405180910390f35b610861600480360381019061085c919061260b565b611bb4565b60405161086e91906124a3565b60405180910390f35b610891600480360381019061088c919061253e565b611bc8565b60405161089e91906124a3565b60405180910390f35b6108af611c7c565b6040516108bc9190612479565b60405180910390f35b6108cd611ce6565b6040516108da91906124a3565b60405180910390f35b6108fd60048036038101906108f89190612511565b611d0a565b60405161090a91906122a4565b60405180910390f35b61092d600480360381019061092891906126a2565b611dac565b60405161093a91906125c4565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109975760019050610ae4565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109e95760019050610ae4565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a3b5760019050610ae4565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610a8d5760019050610ae4565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610adf5760019050610ae4565b600090505b919050565b60078054610af690612738565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290612738565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b505050505081565b600080610b82611680565b50610b8c83611271565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c1a9190612798565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610c7e91906124a3565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60035481565b600a5481565b60008080549050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610cfc611680565b50610d0684611271565b915081600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d9157600080fd5b610d9c868684611e19565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610dfb91906124a3565b60405180910390a380925050509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e9857503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610ea157600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f0000000000000000000000000000000000000000000000000000000000000000610f46919061281d565b905060005b84811015610f8f5764e8d4a510008284610f65919061284e565b610f6f919061281d565b83610f7a91906128a8565b92508080610f87906128dc565b915050610f4b565b5064e8d4a510008583610fa2919061284e565b610fac919061281d565b9250505092915050565b60095481565b60008181548110610fcc57600080fd5b906000526020600020016000915090505481565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106690612970565b60405180910390fd5b611077611680565b5061108183611271565b905082600a60008282546110959190612798565b925050819055506110a68482611e3e565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560405161110491906124a3565b60405180910390a3611114611f02565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000082611197919061284e565b7f00000000000000000000000000000000000000000000000000000000000000006111c29190612798565b9050919050565b6000603c82426111d991906128a8565b6111e3919061281d565b9050919050565b60045481565b6000806402540be40083611204919061284e565b7f000000000000000000000000000000000000000000000000000000000000000061122f91906128a8565b8461123a919061284e565b90507f000000000000000000000000000000000000000000000000000000000000000081611268919061281d565b91505092915050565b60006402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166112a29190612990565b6fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000836112e0919061284e565b6112ea919061281d565b9050919050565b6000603c824261130191906128a8565b61130b919061281d565b9050919050565b6000606860ff167affffffffffffffffffffffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b60008060008061135b85611120565b92506113686004546111c9565b90506113b46402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff1661139c9190612990565b6fffffffffffffffffffffffffffffffff1682610f02565b6fffffffffffffffffffffffffffffffff16915064e8d4a510006a52b7d2dcc80cd2e40000006113e4919061284e565b82846113f0919061284e565b6113fa919061281d565b9350505050919050565b60006114106000611a1f565b905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461147257600080fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461163c57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000806000611696611404565b5061169f611fa4565b9750600060010288036116bd576000985050505050505050506117c7565b6116c688611bb4565b95506001866116d59190612798565b90506116e086611169565b9150600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16945061171e826112f1565b9250600083111561173a576117338584611bc8565b935061173e565b8493505b61174d600085600a5484611dac565b965060008790806001815401808255809150506001900390600052602060002001600090919091909150556117828789612090565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d675816040516117b291906124a3565b60405180910390a16001985050505050505050505b90565b600880546117d790612738565b80601f016020809104026020016040519081016040528092919081815260200182805461180390612738565b80156118505780601f1061182557610100808354040283529160200191611850565b820191906000526020600020905b81548152906001019060200180831161183357829003601f168201915b505050505081565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118b457600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b600080600061194e611680565b5061195884611271565b9150611965338684611e19565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516119c491906124a3565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000611a2f6004546111c9565b915060008203611a4457600092505050611b52565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600084118015611a8657508184105b15611a8f578391505b611a998183610f02565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c82611ade919061284e565b600454611aeb9190612798565b60048190555080826004547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff16604051611b439190612a15565b60405180910390a46001925050505b919050565b600b5481565b600080600080611b6c86611915565b9250611b7786611312565b9150611b8285611312565b90508181611b9091906128a8565b600354611b9d91906128a8565b9150611ba983836111f0565b935050505092915050565b600063ffffffff8260019004169050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f0000000000000000000000000000000000000000000000000000000000000000611c0c919061281d565b905060005b84811015611c555764e8d4a510008284611c2b919061284e565b611c35919061281d565b83611c409190612798565b92508080611c4d906128dc565b915050611c11565b5064e8d4a510008583611c68919061284e565b611c72919061281d565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042611ccd91906128a8565b611cd7919061281d565b611ce19190612798565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d6657600080fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b600080611e2685846120f8565b50611e318484611e3e565b5060019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008503611e9a5760009350505050611efc565b611ea386611120565b92508483611eb19190612798565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000806000600a54905060006001600080549050611f2091906128a8565b81548110611f3157611f30612a30565b5b90600052602060002001546001900491506cffffffffffffffffff000000001982169150602060ff16819060020a02821791508160010260006001600080549050611f7c91906128a8565b81548110611f8d57611f8c612a30565b5b906000526020600020018190555060019250505090565b600080600080600b5481548110611fbe57611fbd612a30565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015612032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120569190612a8b565b6fffffffffffffffffffffffffffffffff16905061207382611bb4565b81116120875760006001029250505061208d565b81925050505b90565b60008061209d8484611b5d565b90506120d3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120ce83611271565b611e3e565b506001600b60008282546120e79190612798565b925050819055508091505092915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361215457600093505050506121f9565b61215d86611120565b9250848310156121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990612b04565b60405180910390fd5b84836121ae91906128a8565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61223981612204565b811461224457600080fd5b50565b60008135905061225681612230565b92915050565b600060208284031215612272576122716121ff565b5b600061228084828501612247565b91505092915050565b60008115159050919050565b61229e81612289565b82525050565b60006020820190506122b96000830184612295565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122f95780820151818401526020810190506122de565b83811115612308576000848401525b50505050565b6000601f19601f8301169050919050565b600061232a826122bf565b61233481856122ca565b93506123448185602086016122db565b61234d8161230e565b840191505092915050565b60006020820190508181036000830152612372818461231f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123a58261237a565b9050919050565b6123b58161239a565b81146123c057600080fd5b50565b6000813590506123d2816123ac565b92915050565b6000819050919050565b6123eb816123d8565b81146123f657600080fd5b50565b600081359050612408816123e2565b92915050565b60008060408385031215612425576124246121ff565b5b6000612433858286016123c3565b9250506020612444858286016123f9565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6124738161244e565b82525050565b600060208201905061248e600083018461246a565b92915050565b61249d816123d8565b82525050565b60006020820190506124b86000830184612494565b92915050565b6000806000606084860312156124d7576124d66121ff565b5b60006124e5868287016123c3565b93505060206124f6868287016123c3565b9250506040612507868287016123f9565b9150509250925092565b600060208284031215612527576125266121ff565b5b6000612535848285016123c3565b91505092915050565b60008060408385031215612555576125546121ff565b5b6000612563858286016123f9565b9250506020612574858286016123f9565b9150509250929050565b600060208284031215612594576125936121ff565b5b60006125a2848285016123f9565b91505092915050565b6000819050919050565b6125be816125ab565b82525050565b60006020820190506125d960008301846125b5565b92915050565b6125e8816125ab565b81146125f357600080fd5b50565b600081359050612605816125df565b92915050565b600060208284031215612621576126206121ff565b5b600061262f848285016125f6565b91505092915050565b6126418161239a565b82525050565b600060208201905061265c6000830184612638565b92915050565b60008060408385031215612679576126786121ff565b5b6000612687858286016125f6565b9250506020612698858286016125f6565b9150509250929050565b600080600080608085870312156126bc576126bb6121ff565b5b60006126ca878288016123f9565b94505060206126db878288016123f9565b93505060406126ec878288016123f9565b92505060606126fd878288016123f9565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061275057607f821691505b60208210810361276357612762612709565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127a3826123d8565b91506127ae836123d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127e3576127e2612769565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612828826123d8565b9150612833836123d8565b925082612843576128426127ee565b5b828204905092915050565b6000612859826123d8565b9150612864836123d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561289d5761289c612769565b5b828202905092915050565b60006128b3826123d8565b91506128be836123d8565b9250828210156128d1576128d0612769565b5b828203905092915050565b60006128e7826123d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361291957612918612769565b5b600182019050919050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b600061295a600a836122ca565b915061296582612924565b602082019050919050565b600060208201905081810360008301526129898161294d565b9050919050565b600061299b8261244e565b91506129a68361244e565b9250816fffffffffffffffffffffffffffffffff04831182151516156129cf576129ce612769565b5b828202905092915050565b6000819050919050565b60006129ff6129fa6129f58461244e565b6129da565b6123d8565b9050919050565b612a0f816129e4565b82525050565b6000602082019050612a2a6000830184612a06565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b612a688161244e565b8114612a7357600080fd5b50565b600081519050612a8581612a5f565b92915050565b600060208284031215612aa157612aa06121ff565b5b6000612aaf84828501612a76565b91505092915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b6000612aee600d836122ca565b9150612af982612ab8565b602082019050919050565b60006020820190508181036000830152612b1d81612ae1565b905091905056fea2646970667358221220e550a23a0a73cec1721ab581b45ec189ebe066e3bf61f6d85aa4f40183a53a2964736f6c634300080d0033
+\ 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":"uint128","name":"_taxLevelMinute","type":"uint128"},{"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":false,"internalType":"bytes32","name":"_foo","type":"bytes32"}],"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":"uint256","name":"_oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"Decayed","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":"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":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"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":[],"name":"demurrageAmount","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"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":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_demurrageAmount","type":"uint256"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_redistribution","type":"bytes32"}],"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":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"growBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumParticipantSpend","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":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resolutionFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_demurrageModifierPpm","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"uint128","name":"_taxLevelMinute","type":"uint128"},{"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":false,"internalType":"bytes32","name":"_foo","type":"bytes32"}],"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":"uint256","name":"_oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"Decayed","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":"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":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"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":[],"name":"demurrageAmount","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"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":"demurrageStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_demurrageAmount","type":"uint256"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_redistribution","type":"bytes32"},{"internalType":"bytes32","name":"_redistributionPrevious","type":"bytes32"}],"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":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"growBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPeriod","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":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resolutionFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_demurrageModifierPpm","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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
@@ -38,6 +38,15 @@ class DemurrageTokenSettings:
self.sink_address = None
+ def __str__(self):
+ return 'name {} demurrage level {} period minutes {} sink address {}'.format(
+ self.name,
+ self.demurrage_level,
+ self.period_minutes,
+ self.sink_address,
+ )
+
+
class DemurrageToken(ERC20):
__abi = {}
@@ -445,14 +454,16 @@ class DemurrageToken(ERC20):
return o
- def get_distribution_from_redistribution(self, contract_address, redistribution, sender_address=ZERO_ADDRESS, id_generator=None):
+ def get_distribution_from_redistribution(self, contract_address, redistribution, redistribution_previous, sender_address=ZERO_ADDRESS, id_generator=None):
j = JSONRPCRequest(id_generator)
o = j.template()
o['method'] = 'eth_call'
enc = ABIContractEncoder()
enc.method('getDistributionFromRedistribution')
enc.typ(ABIContractType.BYTES32)
+ enc.typ(ABIContractType.BYTES32)
enc.bytes32(redistribution)
+ enc.bytes32(redistribution_previous)
data = add_0x(enc.get())
tx = self.template(sender_address, contract_address)
tx = self.set_code(tx, data)
diff --git a/python/erc20_demurrage_token/unittest/base.py b/python/erc20_demurrage_token/unittest/base.py
@@ -33,7 +33,7 @@ PERIOD = 10
class TestTokenDeploy:
def __init__(self, rpc, token_symbol='FOO', token_name='Foo Token', sink_address=ZERO_ADDRESS, supply=10**12):
- self.tax_level = TAX_LEVEL
+ self.tax_level= TAX_LEVEL
self.period_seconds = PERIOD * 60
self.settings = DemurrageTokenSettings()
@@ -44,6 +44,7 @@ class TestTokenDeploy:
self.settings.period_minutes = PERIOD
self.settings.sink_address = sink_address
self.sink_address = self.settings.sink_address
+ logg.debug('using demurrage token settings: {}'.format(self.settings))
o = block_latest()
self.start_block = rpc.do(o)
@@ -203,7 +204,7 @@ class TestDemurrageCap(TestDemurrage):
class TestDemurrageUnit(TestDemurrage):
def setUp(self):
- super(TestDemurrage, self).setUp()
+ super(TestDemurrageUnit, self).setUp()
self.tax_level = 50
self.period_seconds = 60
diff --git a/python/run_tests.sh b/python/run_tests.sh
@@ -17,7 +17,12 @@ done
modes=(SingleCap) # other contracts need to be updted
for m in ${modes[@]}; do
ERC20_DEMURRAGE_TOKEN_TEST_MODE=$m python tests/test_period.py
-# ERC20_DEMURRAGE_TOKEN_TEST_MODE=$m python tests/test_redistribution_unit.py
+done
+
+modes=(SingleNocap) # other contracts need to be updted
+for m in ${modes[@]}; do
+ ERC20_DEMURRAGE_TOKEN_TEST_MODE=$m python tests/test_redistribution_unit.py
+ ERC20_DEMURRAGE_TOKEN_TEST_MODE=$m python tests/test_redistribution.py
done
modes=(MultiCap SingleCap)
diff --git a/python/tests/test_redistribution.py b/python/tests/test_redistribution.py
@@ -31,6 +31,78 @@ testdir = os.path.dirname(__file__)
class TestRedistribution(TestDemurrageDefault):
+
+ def test_redistribution_boundaries(self):
+ nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
+ c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+
+ demurrage = (1 - (self.tax_level / 1000000)) * (10**28)
+ supply = self.default_supply
+
+ (tx_hash, o) = c.mint_to(self.address, self.accounts[0], self.accounts[0], supply)
+ self.rpc.do(o)
+
+ o = c.balance_of(self.address, self.sink_address, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ balance = c.parse_balance(r)
+ logg.debug('balance before {} supply {}'.format(balance, supply))
+
+ self.backend.time_travel(self.start_time + self.period_seconds)
+ (tx_hash, o) = c.change_period(self.address, self.accounts[0])
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash)
+ r = self.rpc.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.redistributions(self.address, 1, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ oo = c.to_redistribution_supply(self.address, r, sender_address=self.accounts[0])
+ rr = self.rpc.do(oo)
+ oo = c.to_redistribution_demurrage_modifier(self.address, r, sender_address=self.accounts[0])
+ rr = self.rpc.do(oo)
+
+ o = c.balance_of(self.address, self.sink_address, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ balance = c.parse_balance(r)
+
+ self.backend.time_travel(self.start_time + self.period_seconds * 2 + 1)
+ (tx_hash, o) = c.change_period(self.address, self.accounts[0])
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash)
+ r = self.rpc.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.redistributions(self.address, 2, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ oo = c.to_redistribution_supply(self.address, r, sender_address=self.accounts[0])
+ rr = self.rpc.do(oo)
+ oo = c.to_redistribution_demurrage_modifier(self.address, r, sender_address=self.accounts[0])
+ rr = self.rpc.do(oo)
+
+ o = c.balance_of(self.address, self.sink_address, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ balance = c.parse_balance(r)
+
+ j = JSONRPCRequest(id_generator)
+ o = j.template()
+ o['method'] = 'eth_call'
+ enc = ABIContractEncoder()
+ enc.method('toRedistributionDemurrageModifier')
+ enc.typ(ABIContractType.BYTES32)
+ enc.bytes32(redistribution)
+ data = add_0x(enc.get())
+ tx = self.template(sender_address, contract_address)
+ tx = self.set_code(tx, data)
+ o['params'].append(self.normalize(tx))
+ o['params'].append('latest')
+ o = j.finalize(o)
+ return o
+
+
+
+
def test_whole_is_parts(self):
nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
diff --git a/python/tests/test_redistribution_unit.py b/python/tests/test_redistribution_unit.py
@@ -31,8 +31,9 @@ testdir = os.path.dirname(__file__)
class TestRedistribution(TestDemurrageUnit):
+
# TODO: move to "pure" test file when getdistribution is implemented in all contracts
- def test_distribution(self):
+ def test_distribution_direct(self):
nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
@@ -40,6 +41,8 @@ class TestRedistribution(TestDemurrageUnit):
demurrage = (1 - (self.tax_level / 1000000)) * (10**28)
supply = self.default_supply
+ logg.debug('demurrage {} supply {}'.format(demurrage))
+
o = c.get_distribution(self.address, supply, demurrage, sender_address=self.accounts[0])
r = self.rpc.do(o)
distribution = c.parse_get_distribution(r)
@@ -51,17 +54,23 @@ class TestRedistribution(TestDemurrageUnit):
nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- #demurrage = (1 - (self.tax_level / 1000000)) * (10**38)
- demurrage = (1 - (self.tax_level / 1000000)) * (10**28)
+ demurrage_previous = (1 - (self.tax_level / 100000)) * (10**28)
+ demurrage = (1 - ((self.tax_level * 1.33) / 100000)) * (10**28)
+
+ logg.debug('demurrage then {} now {}'.format(demurrage_previous, demurrage))
supply = self.default_supply
- o = c.to_redistribution(self.address, 0, demurrage, supply, 1, sender_address=self.accounts[0])
+ o = c.to_redistribution(self.address, 0, demurrage_previous, supply, 1, sender_address=self.accounts[0])
+ redistribution_previous = self.rpc.do(o)
+
+ o = c.to_redistribution(self.address, 0, demurrage, supply, 2, sender_address=self.accounts[0])
redistribution = self.rpc.do(o)
- o = c.get_distribution_from_redistribution(self.address, redistribution, self.accounts[0])
+ o = c.get_distribution_from_redistribution(self.address, redistribution, redistribution_previous, self.accounts[0])
r = self.rpc.do(o)
distribution = c.parse_get_distribution(r)
expected_distribution = self.default_supply * (self.tax_level / 1000000)
+ logg.debug('distribution {} supply {}'.format(distribution, self.default_supply))
self.assert_within_lower(distribution, expected_distribution, 1000)
diff --git a/solidity/DemurrageTokenSingleNocap.sol b/solidity/DemurrageTokenSingleNocap.sol
@@ -20,6 +20,8 @@ contract DemurrageTokenSingleCap {
// Cached demurrage amount, ppm with 38 digit resolution
uint128 public demurrageAmount;
+ uint256 public demurrageStart;
+
// Cached demurrage period; the period for which demurrageAmount was calculated
//uint128 public demurragePeriod;
// Cached demurrage timestamp; the timestamp for which demurrageAmount was last calculated
@@ -42,8 +44,11 @@ contract DemurrageTokenSingleCap {
// Implements ERC20
uint256 public totalSupply;
+ // Last executed period
+ uint256 public lastPeriod;
+
// Minimum amount of (demurraged) tokens an account must spend to participate in redistribution for a particular period
- uint256 public minimumParticipantSpend;
+ //uint256 public minimumParticipantSpend;
// 128 bit resolution of the demurrage divisor
// (this constant x 1000000 is contained within 128 bits)
@@ -113,7 +118,9 @@ contract DemurrageTokenSingleCap {
periodDuration = _periodMinutes * 60;
//demurrageAmount = 100000000000000000000000000000000000000 - _taxLevelMinute; // Represents 38 decimal places, same as resolutionFactor
//demurrageAmount = 100000000000000000000000000000000000000;
- demurrageAmount = 10000000000000000000000000000;
+ //demurrageAmount = 10000000000000000000000000000;
+ demurrageAmount = uint128(nanoDivider) * 100;
+ demurrageStart = demurrageAmount;
//demurragePeriod = 1;
taxLevel = _taxLevelMinute; // Represents 38 decimal places
bytes32 initialRedistribution = toRedistribution(0, demurrageAmount, 0, 1);
@@ -121,7 +128,7 @@ contract DemurrageTokenSingleCap {
// Misc settings
sinkAddress = _defaultSinkAddress;
- minimumParticipantSpend = 10 ** uint256(_decimals);
+ //minimumParticipantSpend = 10 ** uint256(_decimals);
}
@@ -274,7 +281,8 @@ contract DemurrageTokenSingleCap {
bytes32 lastRedistribution;
uint256 currentPeriod;
- lastRedistribution = redistributions[redistributions.length-1];
+ //lastRedistribution = redistributions[redistributions.length-1];
+ lastRedistribution = redistributions[lastPeriod];
currentPeriod = this.actualPeriod();
if (currentPeriod <= toRedistributionPeriod(lastRedistribution)) {
return bytes32(0x00);
@@ -290,21 +298,25 @@ contract DemurrageTokenSingleCap {
return difference / resolutionFactor;
}
- function getDistributionFromRedistribution(bytes32 _redistribution) public returns (uint256) {
+ function getDistributionFromRedistribution(bytes32 _redistribution, bytes32 _redistributionPrevious) public returns (uint256) {
uint256 redistributionSupply;
uint256 redistributionDemurrage;
+ uint256 redistributionDemurragePrevious;
redistributionSupply = toRedistributionSupply(_redistribution);
redistributionDemurrage = toRedistributionDemurrageModifier(_redistribution);
+ redistributionDemurragePrevious = toRedistributionDemurrageModifier(_redistributionPrevious);
+ redistributionDemurrage = demurrageStart - (redistributionDemurragePrevious - redistributionDemurrage);
return getDistribution(redistributionSupply, redistributionDemurrage);
}
// Returns the amount sent to the sink address
- function applyDefaultRedistribution(bytes32 _redistribution) private returns (uint256) {
+ function applyDefaultRedistribution(bytes32 _redistribution, bytes32 _redistributionPrevious) private returns (uint256) {
uint256 unit;
- unit = getDistributionFromRedistribution(_redistribution);
+ unit = getDistributionFromRedistribution(_redistribution, _redistributionPrevious);
increaseBaseBalance(sinkAddress, toBaseAmount(unit));
+ lastPeriod += 1;
return unit;
}
@@ -388,7 +400,7 @@ contract DemurrageTokenSingleCap {
nextRedistribution = toRedistribution(0, nextRedistributionDemurrage, totalSupply, nextPeriod);
redistributions.push(nextRedistribution);
- applyDefaultRedistribution(nextRedistribution);
+ applyDefaultRedistribution(nextRedistribution, currentRedistribution);
emit Period(nextPeriod);
return true;
}