@gooddollar/goodprotocol 1.0.0 → 1.0.2-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  2. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  3. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  4. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  5. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  6. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  7. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  8. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  9. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  10. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  11. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  12. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  13. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  14. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  15. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  16. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  17. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  18. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  19. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  20. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  21. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  22. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  23. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  24. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  25. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  26. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  27. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  28. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  29. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  30. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  31. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  32. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +45 -2
  33. package/artifacts/contracts/governance/GovarnanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  34. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  35. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  36. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  37. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  38. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  39. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  40. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  41. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  42. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
  43. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  44. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  45. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  46. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  47. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  48. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  49. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  50. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  51. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  52. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  53. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  54. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  55. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  56. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  57. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  58. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  59. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  60. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  61. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  62. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  63. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  64. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  65. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  66. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  67. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  68. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  69. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  70. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  71. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  72. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
  73. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  74. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  75. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  76. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  77. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  78. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  79. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  80. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  81. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  82. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
  83. package/artifacts/contracts/unaudited-foundation/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  84. package/artifacts/contracts/unaudited-foundation/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  85. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  86. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  87. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  88. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  89. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  90. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  91. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  92. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  93. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  94. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  95. package/contracts/governance/GReputation.sol +15 -0
  96. package/contracts/ubi/UBIScheme.sol +4 -6
  97. package/package.json +1 -1
  98. package/releases/deploy-settings.json +17 -17
  99. package/releases/deployment.json +15 -15
  100. package/test/ubi/UBISchemeCycle.test.ts +20 -59
@@ -843,8 +843,8 @@
843
843
  "type": "function"
844
844
  }
845
845
  ],
846
- "bytecode": "0x60a06040523060601b60805234801561001757600080fd5b5060805160601c612a0861004b60003960008181610b6c01528181610bac01528181610fe901526110290152612a086000f3fe6080604052600436106101cb5760003560e01c8063013eba92146101d0578063069786ea146102105780630ce82d671461023a5780631248b1011461024f5780631794bb3c146102865780631b3c90a8146102a85780631bbc644c146102bd5780631d8f5ea9146102ed57806322b45727146103035780633659cfe6146103195780633d84ceca146103395780633e6326fc146103595780634162169f146103865780634202d214146103a6578063456ac1c2146103c65780634e71d92d146103e05780634f1ef286146103f55780635231e2f014610408578063560796d1146104385780635aef7de6146104895780635c9302c9146104a957806373b2e80e146104bf578063741470ac146104df5780638081cbbd146104f557806398d6621b146105155780639dc2c0331461052a578063a21f698a14610540578063b656223d14610560578063ba07541014610576578063c033abf21461058c578063c1337508146105a2578063c7a76adf146105c2578063cc054dfc146105e2578063cef636001461060f578063d7c4cbb81461062f578063dddc361614610645578063de1de3a01461065a578063e1758bd81461067a578063eac471a01461068f578063eda4e6d6146106a5575b600080fd5b3480156101dc57600080fd5b506101fd6101eb3660046123b9565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561021c57600080fd5b506102256106bb565b60408051928352602083019190915201610207565b34801561024657600080fd5b506101fd6106f9565b34801561025b57600080fd5b5061022561026a3660046123d6565b609a602052600090815260409020600181015460029091015482565b34801561029257600080fd5b506102a66102a13660046123ef565b61071c565b005b3480156102b457600080fd5b506102a6610894565b3480156102c957600080fd5b506102dd6102d83660046123b9565b6109d9565b6040519015158152602001610207565b3480156102f957600080fd5b506101fd609e5481565b34801561030f57600080fd5b506101fd60a05481565b34801561032557600080fd5b506102a66103343660046123b9565b610b61565b34801561034557600080fd5b506102a66103543660046123d6565b610c2a565b34801561036557600080fd5b50606754610379906001600160a01b031681565b6040516102079190612430565b34801561039257600080fd5b50606554610379906001600160a01b031681565b3480156103b257600080fd5b506102dd6103c13660046123b9565b610cc8565b3480156103d257600080fd5b5060a3546102dd9060ff1681565b3480156103ec57600080fd5b506102dd610d2a565b6102a66104033660046124b1565b610fde565b34801561041457600080fd5b506102dd6104233660046123b9565b60aa6020526000908152604090205460ff1681565b34801561044457600080fd5b506104726104533660046123d6565b60a9602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610207565b34801561049557600080fd5b50606654610379906001600160a01b031681565b3480156104b557600080fd5b506101fd609c5481565b3480156104cb57600080fd5b506102dd6104da3660046123b9565b611098565b3480156104eb57600080fd5b506101fd60a75481565b34801561050157600080fd5b5060a854610379906001600160a01b031681565b34801561052157600080fd5b506101fd6110c4565b34801561053657600080fd5b506101fd60a55481565b34801561054c57600080fd5b506102dd61055b3660046123b9565b611284565b34801561056c57600080fd5b506101fd60a25481565b34801561058257600080fd5b506101fd60a65481565b34801561059857600080fd5b506101fd609f5481565b3480156105ae57600080fd5b506101fd6105bd366004612543565b6112b2565b3480156105ce57600080fd5b506101fd6105dd3660046123d6565b611456565b3480156105ee57600080fd5b506101fd6105fd3660046123b9565b60ab6020526000908152604090205481565b34801561061b57600080fd5b506101fd61062a3660046123d6565b61146b565b34801561063b57600080fd5b506101fd60a15481565b34801561065157600080fd5b506102a6611480565b34801561066657600080fd5b506102a6610675366004612602565b6114d6565b34801561068657600080fd5b50610379611525565b34801561069b57600080fd5b506101fd60a45481565b3480156106b157600080fd5b506101fd609d5481565b600080600062015180609d54426106d29190612635565b6106dc919061264c565b90506106e781611456565b6106f08261146b565b92509250509091565b60006201518060a6544261070d9190612635565b610717919061264c565b905090565b600054610100900460ff1680610735575060005460ff16155b61079d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff161580156107bf576000805461ffff19166101011790555b6000821161080f5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f6044820152606401610794565b610818846115bc565b60a282905560a880546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055605a60a455620249f0609f5561085b620151804261264c565b610868906201518061266e565b6108749061a8c061268d565b609d81905560a655801561088e576000805461ff00191690555b50505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b1580156108f257600080fd5b505afa158015610906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092a91906126a5565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b15801561097f57600080fd5b505afa158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b791906126a5565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080609d541180156109ee5750609d544210155b610a0a5760405162461bcd60e51b8152600401610794906126c2565b610a1382611284565b8015610a255750610a2382610cc8565b155b610a6b5760405162461bcd60e51b815260206004820152601760248201527634b9903737ba1030b71034b730b1ba34bb32903ab9b2b960491b6044820152606401610794565b6001600160a01b038216600090815260aa602052604090205460ff1615610ac55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e48199a5cda195960921b6044820152606401610794565b6001600160a01b038216600090815260aa60205260408120805460ff19166001179055610af06115df565b9050600160a06000828254610b059190612635565b90915550610b18905033826000806118ca565b6040518181526001600160a01b0384169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a350600192915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610baa5760405162461bcd60e51b8152600401610794906126f0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bdc611b4d565b6001600160a01b031614610c025760405162461bcd60e51b81526004016107949061272a565b610c0b81611b69565b60408051600080825260208201909252610c2791839190611b71565b50565b610c32611cb1565b60008111610c8c5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b6064820152608401610794565b60a48190556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610cea83611284565b15610d2157600062015180610cff8342612635565b610d09919061264c565b905060a254811015610d1f575060019392505050565b505b50600092915050565b600080609d54118015610d3f5750609d544210155b610d5b5760405162461bcd60e51b8152600401610794906126c2565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def91906126a5565b6001600160a01b0316633af32abf336040518263ffffffff1660e01b8152600401610e1a9190612430565b60206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190612764565b610eb35760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b6044820152606401610794565b6000610ebe33611d85565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610f2557600080fd5b505afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5d91906126a5565b9050818015610f7457506001600160a01b03811615155b15610fd85760405163748abee960e11b81526001600160a01b0382169063e9157dd290610fa5903390600401612430565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050505b50905090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110275760405162461bcd60e51b8152600401610794906126f0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611059611b4d565b6001600160a01b03161461107f5760405162461bcd60e51b81526004016107949061272a565b61108882611b69565b61109482826001611b71565b5050565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b600080609d541180156110d95750609d544210155b6110f55760405162461bcd60e51b8152600401610794906126c2565b6110fe33611284565b1580611119575033600090815260aa602052604090205460ff165b156111a45760a860009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190612781565b62015180609d54426111b69190612635565b6111c0919061264c565b609c5414156111e3576111d233611098565b6111dd5750609e5490565b50600090565b60006111ed611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161121d9190612430565b60206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d9190612781565b905060a0548161127d919061264c565b9250505090565b6001600160a01b0381166000908152609b6020526040812054156112aa57506001919050565b506000919050565b600080609d541180156112c75750609d544210155b6112e35760405162461bcd60e51b8152600401610794906126c2565b60005b825181101561142857609f545a1015611320576040518181526000805160206129b38339815191529060200160405180910390a192915050565b6113428382815181106113355761133561279a565b6020026020010151611284565b801561136d575061136b83828151811061135e5761135e61279a565b6020026020010151610cc8565b155b80156113b3575060aa600084838151811061138a5761138a61279a565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b15611418576113da8382815181106113cd576113cd61279a565b60200260200101516109d9565b6114185760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b6044820152606401610794565b611421816127b0565b90506112e6565b506000805160206129b3833981519152825160405161144991815260200190565b60405180910390a1505190565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b62015180609d54426114929190612635565b61149c919061264c565b609c8190556040519081527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea9060200160405180910390a1565b6114de611cb1565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610cbd565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640160206040518083038186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071791906126a5565b606780546001600160a01b0319166001600160a01b038316179055610c27610894565b60006115e9611480565b60a154609c54146118c35760006115fe611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161162e9190612430565b60206040518083038186803b15801561164657600080fd5b505afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190612781565b9050600060a75460a554611692919061266e565b9050600060a960006001609c546116a99190612635565b8152602001908152602001600020600101549050600060648260826116ce919061266e565b6116d8919061264c565b84101580156116fc575060646116ef84605061266e565b6116f9919061264c565b84115b905060a7546117096106f9565b1015806117135750805b1561182b5760a35460ff161561172b5761172b611ea3565b6040516370a0823160e01b81526001600160a01b038616906370a0823190611757903090600401612430565b60206040518083038186803b15801561176f57600080fd5b505afa158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612781565b935060a454846117b7919061264c565b60a55560a45460a7556117cc610e104261264c565b6117d890610e1061266e565b60a655609c5460a45460a554604080519384526020840188905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260a96020526040902060a354815460ff191660ff90911615151781556001810185905560a054156118775760a05460a554611873919061264c565b609e555b609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a15050505050505b50609e5490565b6000609a6000609c548152602001908152602001600020905060018160010160008282546118f8919061268d565b90915550506001600160a01b038516600090815260208281526040808320805460ff19166001908117909155609b835281842042905560ab909252822080549192909161194690849061268d565b90915550508115611a215760a854604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a90611982908990600401612430565b602060405180830381600087803b15801561199c57600080fd5b505af11580156119b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d49190612781565b9050808260020160008282546119ea919061268d565b90915550506040518181526001600160a01b0387169060008051602061294c8339815191529060200160405180910390a250611b46565b83816002016000828254611a35919061268d565b9091555060009050611a45611525565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611a7690899089906004016127cb565b602060405180830381600087803b158015611a9057600080fd5b505af1158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190612764565b611b0c5760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610794565b8315611b4457856001600160a01b031660008051602061294c83398151915286604051611b3b91815260200190565b60405180910390a25b505b5050505050565b60008051602061296c833981519152546001600160a01b031690565b610c27611cb1565b6000611b7b611b4d565b9050611b86846121a6565b600083511180611b935750815b15611ba457611ba28484612239565b505b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143805460ff16611b4657805460ff19166001178155604051611c1f908690611bf0908590602401612430565b60408051601f198184030181529190526020810180516001600160e01b0316631b2ce7f360e11b179052612239565b50805460ff19168155611c30611b4d565b6001600160a01b0316826001600160a01b031614611ca85760405162461bcd60e51b815260206004820152602f60248201527f45524331393637557067726164653a207570677261646520627265616b73206660448201526e75727468657220757067726164657360881b6064820152608401610794565b611b4685612324565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de6916004808301926020929190829003018186803b158015611cf557600080fd5b505afa158015611d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2d91906126a5565b6001600160a01b031614611d835760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610794565b565b600080611d906115df565b9050611d9b83611284565b8015611dc057506001600160a01b038316600090815260aa602052604090205460ff16155b8015611dd25750611dd083611098565b155b15611dee57611de58382600160006118ca565b50600192915050565b611df783611284565b1580611e1b57506001600160a01b038316600090815260aa602052604090205460ff165b15610d2157600160a06000828254611e33919061268d565b90915550506001600160a01b038316600090815260aa60205260408120805460ff19169055611e669084908060016118ca565b6040516001600160a01b038416907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a250600192915050565b6000611ead611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611edd9190612430565b60206040518083038186803b158015611ef557600080fd5b505afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d9190612781565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a0823192611f659290911690600401612430565b60206040518083038186803b158015611f7d57600080fd5b505afa158015611f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb59190612781565b6065546040519192506001600160a01b03169063d1b7089a908590611fe090309086906024016127cb565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b031916815261203b9392916001600160a01b03169060009060040161283c565b600060405180830381600087803b15801561205557600080fd5b505af1158015612069573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120919190810190612870565b50600090506120a0828461268d565b6040516370a0823160e01b81529091506001600160a01b038516906370a08231906120cf903090600401612430565b60206040518083038186803b1580156120e757600080fd5b505afa1580156120fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211f9190612781565b81146121675760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b6044820152606401610794565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba910160405180910390a150505050565b803b61220a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610794565b60008051602061296c83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060823b6122985760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610794565b600080846001600160a01b0316846040516122b391906128fc565b600060405180830381855af49150503d80600081146122ee576040519150601f19603f3d011682016040523d82523d6000602084013e6122f3565b606091505b509150915061231b828260405180606001604052806027815260200161298c60279139612364565b95945050505050565b61232d816121a6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060831561237357508161239d565b8251156123835782518084602001fd5b8160405162461bcd60e51b81526004016107949190612918565b9392505050565b6001600160a01b0381168114610c2757600080fd5b6000602082840312156123cb57600080fd5b813561239d816123a4565b6000602082840312156123e857600080fd5b5035919050565b60008060006060848603121561240457600080fd5b833561240f816123a4565b9250602084013561241f816123a4565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561248257612482612444565b604052919050565b60006001600160401b038211156124a3576124a3612444565b50601f01601f191660200190565b600080604083850312156124c457600080fd5b82356124cf816123a4565b915060208301356001600160401b038111156124ea57600080fd5b8301601f810185136124fb57600080fd5b803561250e6125098261248a565b61245a565b81815286602083850101111561252357600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602080838503121561255657600080fd5b82356001600160401b038082111561256d57600080fd5b818501915085601f83011261258157600080fd5b81358181111561259357612593612444565b8060051b91506125a484830161245a565b81815291830184019184810190888411156125be57600080fd5b938501935b838510156125e857843592506125d8836123a4565b82825293850193908501906125c3565b98975050505050505050565b8015158114610c2757600080fd5b60006020828403121561261457600080fd5b813561239d816125f4565b634e487b7160e01b600052601160045260246000fd5b6000828210156126475761264761261f565b500390565b60008261266957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126885761268861261f565b500290565b600082198211156126a0576126a061261f565b500190565b6000602082840312156126b757600080fd5b815161239d816123a4565b6020808252601490820152731b9bdd081a5b881c195c9a5bd914dd185c9d195960621b604082015260600190565b6020808252602c9082015260008051602061292c83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061292c83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561277657600080fd5b815161239d816125f4565b60006020828403121561279357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156127c4576127c461261f565b5060010190565b6001600160a01b03929092168252602082015260400190565b60005b838110156127ff5781810151838201526020016127e7565b8381111561088e5750506000910152565b600081518084526128288160208601602086016127e4565b601f01601f19169290920160200192915050565b600060018060a01b0380871683526080602084015261285e6080840187612810565b94166040830152506060015292915050565b6000806040838503121561288357600080fd5b825161288e816125f4565b60208401519092506001600160401b038111156128aa57600080fd5b8301601f810185136128bb57600080fd5b80516128c96125098261248a565b8181528660208385010111156128de57600080fd5b6128ef8260208301602086016127e4565b8093505050509250929050565b6000825161290e8184602087016127e4565b9190910192915050565b60208152600061239d602083018461281056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656472b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540fa26469706673582212206ac1d43e80813cd6c9d9b4eea1337800171f7e6c7ca09d9a678269e52530510164736f6c63430008080033",
847
- "deployedBytecode": "0x6080604052600436106101cb5760003560e01c8063013eba92146101d0578063069786ea146102105780630ce82d671461023a5780631248b1011461024f5780631794bb3c146102865780631b3c90a8146102a85780631bbc644c146102bd5780631d8f5ea9146102ed57806322b45727146103035780633659cfe6146103195780633d84ceca146103395780633e6326fc146103595780634162169f146103865780634202d214146103a6578063456ac1c2146103c65780634e71d92d146103e05780634f1ef286146103f55780635231e2f014610408578063560796d1146104385780635aef7de6146104895780635c9302c9146104a957806373b2e80e146104bf578063741470ac146104df5780638081cbbd146104f557806398d6621b146105155780639dc2c0331461052a578063a21f698a14610540578063b656223d14610560578063ba07541014610576578063c033abf21461058c578063c1337508146105a2578063c7a76adf146105c2578063cc054dfc146105e2578063cef636001461060f578063d7c4cbb81461062f578063dddc361614610645578063de1de3a01461065a578063e1758bd81461067a578063eac471a01461068f578063eda4e6d6146106a5575b600080fd5b3480156101dc57600080fd5b506101fd6101eb3660046123b9565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561021c57600080fd5b506102256106bb565b60408051928352602083019190915201610207565b34801561024657600080fd5b506101fd6106f9565b34801561025b57600080fd5b5061022561026a3660046123d6565b609a602052600090815260409020600181015460029091015482565b34801561029257600080fd5b506102a66102a13660046123ef565b61071c565b005b3480156102b457600080fd5b506102a6610894565b3480156102c957600080fd5b506102dd6102d83660046123b9565b6109d9565b6040519015158152602001610207565b3480156102f957600080fd5b506101fd609e5481565b34801561030f57600080fd5b506101fd60a05481565b34801561032557600080fd5b506102a66103343660046123b9565b610b61565b34801561034557600080fd5b506102a66103543660046123d6565b610c2a565b34801561036557600080fd5b50606754610379906001600160a01b031681565b6040516102079190612430565b34801561039257600080fd5b50606554610379906001600160a01b031681565b3480156103b257600080fd5b506102dd6103c13660046123b9565b610cc8565b3480156103d257600080fd5b5060a3546102dd9060ff1681565b3480156103ec57600080fd5b506102dd610d2a565b6102a66104033660046124b1565b610fde565b34801561041457600080fd5b506102dd6104233660046123b9565b60aa6020526000908152604090205460ff1681565b34801561044457600080fd5b506104726104533660046123d6565b60a9602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610207565b34801561049557600080fd5b50606654610379906001600160a01b031681565b3480156104b557600080fd5b506101fd609c5481565b3480156104cb57600080fd5b506102dd6104da3660046123b9565b611098565b3480156104eb57600080fd5b506101fd60a75481565b34801561050157600080fd5b5060a854610379906001600160a01b031681565b34801561052157600080fd5b506101fd6110c4565b34801561053657600080fd5b506101fd60a55481565b34801561054c57600080fd5b506102dd61055b3660046123b9565b611284565b34801561056c57600080fd5b506101fd60a25481565b34801561058257600080fd5b506101fd60a65481565b34801561059857600080fd5b506101fd609f5481565b3480156105ae57600080fd5b506101fd6105bd366004612543565b6112b2565b3480156105ce57600080fd5b506101fd6105dd3660046123d6565b611456565b3480156105ee57600080fd5b506101fd6105fd3660046123b9565b60ab6020526000908152604090205481565b34801561061b57600080fd5b506101fd61062a3660046123d6565b61146b565b34801561063b57600080fd5b506101fd60a15481565b34801561065157600080fd5b506102a6611480565b34801561066657600080fd5b506102a6610675366004612602565b6114d6565b34801561068657600080fd5b50610379611525565b34801561069b57600080fd5b506101fd60a45481565b3480156106b157600080fd5b506101fd609d5481565b600080600062015180609d54426106d29190612635565b6106dc919061264c565b90506106e781611456565b6106f08261146b565b92509250509091565b60006201518060a6544261070d9190612635565b610717919061264c565b905090565b600054610100900460ff1680610735575060005460ff16155b61079d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff161580156107bf576000805461ffff19166101011790555b6000821161080f5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f6044820152606401610794565b610818846115bc565b60a282905560a880546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055605a60a455620249f0609f5561085b620151804261264c565b610868906201518061266e565b6108749061a8c061268d565b609d81905560a655801561088e576000805461ff00191690555b50505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b1580156108f257600080fd5b505afa158015610906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092a91906126a5565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b15801561097f57600080fd5b505afa158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b791906126a5565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080609d541180156109ee5750609d544210155b610a0a5760405162461bcd60e51b8152600401610794906126c2565b610a1382611284565b8015610a255750610a2382610cc8565b155b610a6b5760405162461bcd60e51b815260206004820152601760248201527634b9903737ba1030b71034b730b1ba34bb32903ab9b2b960491b6044820152606401610794565b6001600160a01b038216600090815260aa602052604090205460ff1615610ac55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e48199a5cda195960921b6044820152606401610794565b6001600160a01b038216600090815260aa60205260408120805460ff19166001179055610af06115df565b9050600160a06000828254610b059190612635565b90915550610b18905033826000806118ca565b6040518181526001600160a01b0384169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a350600192915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610baa5760405162461bcd60e51b8152600401610794906126f0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bdc611b4d565b6001600160a01b031614610c025760405162461bcd60e51b81526004016107949061272a565b610c0b81611b69565b60408051600080825260208201909252610c2791839190611b71565b50565b610c32611cb1565b60008111610c8c5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b6064820152608401610794565b60a48190556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610cea83611284565b15610d2157600062015180610cff8342612635565b610d09919061264c565b905060a254811015610d1f575060019392505050565b505b50600092915050565b600080609d54118015610d3f5750609d544210155b610d5b5760405162461bcd60e51b8152600401610794906126c2565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def91906126a5565b6001600160a01b0316633af32abf336040518263ffffffff1660e01b8152600401610e1a9190612430565b60206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190612764565b610eb35760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b6044820152606401610794565b6000610ebe33611d85565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610f2557600080fd5b505afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5d91906126a5565b9050818015610f7457506001600160a01b03811615155b15610fd85760405163748abee960e11b81526001600160a01b0382169063e9157dd290610fa5903390600401612430565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050505b50905090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110275760405162461bcd60e51b8152600401610794906126f0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611059611b4d565b6001600160a01b03161461107f5760405162461bcd60e51b81526004016107949061272a565b61108882611b69565b61109482826001611b71565b5050565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b600080609d541180156110d95750609d544210155b6110f55760405162461bcd60e51b8152600401610794906126c2565b6110fe33611284565b1580611119575033600090815260aa602052604090205460ff165b156111a45760a860009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190612781565b62015180609d54426111b69190612635565b6111c0919061264c565b609c5414156111e3576111d233611098565b6111dd5750609e5490565b50600090565b60006111ed611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161121d9190612430565b60206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d9190612781565b905060a0548161127d919061264c565b9250505090565b6001600160a01b0381166000908152609b6020526040812054156112aa57506001919050565b506000919050565b600080609d541180156112c75750609d544210155b6112e35760405162461bcd60e51b8152600401610794906126c2565b60005b825181101561142857609f545a1015611320576040518181526000805160206129b38339815191529060200160405180910390a192915050565b6113428382815181106113355761133561279a565b6020026020010151611284565b801561136d575061136b83828151811061135e5761135e61279a565b6020026020010151610cc8565b155b80156113b3575060aa600084838151811061138a5761138a61279a565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b15611418576113da8382815181106113cd576113cd61279a565b60200260200101516109d9565b6114185760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b6044820152606401610794565b611421816127b0565b90506112e6565b506000805160206129b3833981519152825160405161144991815260200190565b60405180910390a1505190565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b62015180609d54426114929190612635565b61149c919061264c565b609c8190556040519081527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea9060200160405180910390a1565b6114de611cb1565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610cbd565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640160206040518083038186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071791906126a5565b606780546001600160a01b0319166001600160a01b038316179055610c27610894565b60006115e9611480565b60a154609c54146118c35760006115fe611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161162e9190612430565b60206040518083038186803b15801561164657600080fd5b505afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190612781565b9050600060a75460a554611692919061266e565b9050600060a960006001609c546116a99190612635565b8152602001908152602001600020600101549050600060648260826116ce919061266e565b6116d8919061264c565b84101580156116fc575060646116ef84605061266e565b6116f9919061264c565b84115b905060a7546117096106f9565b1015806117135750805b1561182b5760a35460ff161561172b5761172b611ea3565b6040516370a0823160e01b81526001600160a01b038616906370a0823190611757903090600401612430565b60206040518083038186803b15801561176f57600080fd5b505afa158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612781565b935060a454846117b7919061264c565b60a55560a45460a7556117cc610e104261264c565b6117d890610e1061266e565b60a655609c5460a45460a554604080519384526020840188905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260a96020526040902060a354815460ff191660ff90911615151781556001810185905560a054156118775760a05460a554611873919061264c565b609e555b609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a15050505050505b50609e5490565b6000609a6000609c548152602001908152602001600020905060018160010160008282546118f8919061268d565b90915550506001600160a01b038516600090815260208281526040808320805460ff19166001908117909155609b835281842042905560ab909252822080549192909161194690849061268d565b90915550508115611a215760a854604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a90611982908990600401612430565b602060405180830381600087803b15801561199c57600080fd5b505af11580156119b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d49190612781565b9050808260020160008282546119ea919061268d565b90915550506040518181526001600160a01b0387169060008051602061294c8339815191529060200160405180910390a250611b46565b83816002016000828254611a35919061268d565b9091555060009050611a45611525565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611a7690899089906004016127cb565b602060405180830381600087803b158015611a9057600080fd5b505af1158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190612764565b611b0c5760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610794565b8315611b4457856001600160a01b031660008051602061294c83398151915286604051611b3b91815260200190565b60405180910390a25b505b5050505050565b60008051602061296c833981519152546001600160a01b031690565b610c27611cb1565b6000611b7b611b4d565b9050611b86846121a6565b600083511180611b935750815b15611ba457611ba28484612239565b505b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143805460ff16611b4657805460ff19166001178155604051611c1f908690611bf0908590602401612430565b60408051601f198184030181529190526020810180516001600160e01b0316631b2ce7f360e11b179052612239565b50805460ff19168155611c30611b4d565b6001600160a01b0316826001600160a01b031614611ca85760405162461bcd60e51b815260206004820152602f60248201527f45524331393637557067726164653a207570677261646520627265616b73206660448201526e75727468657220757067726164657360881b6064820152608401610794565b611b4685612324565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de6916004808301926020929190829003018186803b158015611cf557600080fd5b505afa158015611d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2d91906126a5565b6001600160a01b031614611d835760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610794565b565b600080611d906115df565b9050611d9b83611284565b8015611dc057506001600160a01b038316600090815260aa602052604090205460ff16155b8015611dd25750611dd083611098565b155b15611dee57611de58382600160006118ca565b50600192915050565b611df783611284565b1580611e1b57506001600160a01b038316600090815260aa602052604090205460ff165b15610d2157600160a06000828254611e33919061268d565b90915550506001600160a01b038316600090815260aa60205260408120805460ff19169055611e669084908060016118ca565b6040516001600160a01b038416907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a250600192915050565b6000611ead611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611edd9190612430565b60206040518083038186803b158015611ef557600080fd5b505afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d9190612781565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a0823192611f659290911690600401612430565b60206040518083038186803b158015611f7d57600080fd5b505afa158015611f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb59190612781565b6065546040519192506001600160a01b03169063d1b7089a908590611fe090309086906024016127cb565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b031916815261203b9392916001600160a01b03169060009060040161283c565b600060405180830381600087803b15801561205557600080fd5b505af1158015612069573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120919190810190612870565b50600090506120a0828461268d565b6040516370a0823160e01b81529091506001600160a01b038516906370a08231906120cf903090600401612430565b60206040518083038186803b1580156120e757600080fd5b505afa1580156120fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211f9190612781565b81146121675760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b6044820152606401610794565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba910160405180910390a150505050565b803b61220a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610794565b60008051602061296c83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060823b6122985760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610794565b600080846001600160a01b0316846040516122b391906128fc565b600060405180830381855af49150503d80600081146122ee576040519150601f19603f3d011682016040523d82523d6000602084013e6122f3565b606091505b509150915061231b828260405180606001604052806027815260200161298c60279139612364565b95945050505050565b61232d816121a6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060831561237357508161239d565b8251156123835782518084602001fd5b8160405162461bcd60e51b81526004016107949190612918565b9392505050565b6001600160a01b0381168114610c2757600080fd5b6000602082840312156123cb57600080fd5b813561239d816123a4565b6000602082840312156123e857600080fd5b5035919050565b60008060006060848603121561240457600080fd5b833561240f816123a4565b9250602084013561241f816123a4565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561248257612482612444565b604052919050565b60006001600160401b038211156124a3576124a3612444565b50601f01601f191660200190565b600080604083850312156124c457600080fd5b82356124cf816123a4565b915060208301356001600160401b038111156124ea57600080fd5b8301601f810185136124fb57600080fd5b803561250e6125098261248a565b61245a565b81815286602083850101111561252357600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602080838503121561255657600080fd5b82356001600160401b038082111561256d57600080fd5b818501915085601f83011261258157600080fd5b81358181111561259357612593612444565b8060051b91506125a484830161245a565b81815291830184019184810190888411156125be57600080fd5b938501935b838510156125e857843592506125d8836123a4565b82825293850193908501906125c3565b98975050505050505050565b8015158114610c2757600080fd5b60006020828403121561261457600080fd5b813561239d816125f4565b634e487b7160e01b600052601160045260246000fd5b6000828210156126475761264761261f565b500390565b60008261266957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126885761268861261f565b500290565b600082198211156126a0576126a061261f565b500190565b6000602082840312156126b757600080fd5b815161239d816123a4565b6020808252601490820152731b9bdd081a5b881c195c9a5bd914dd185c9d195960621b604082015260600190565b6020808252602c9082015260008051602061292c83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061292c83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561277657600080fd5b815161239d816125f4565b60006020828403121561279357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156127c4576127c461261f565b5060010190565b6001600160a01b03929092168252602082015260400190565b60005b838110156127ff5781810151838201526020016127e7565b8381111561088e5750506000910152565b600081518084526128288160208601602086016127e4565b601f01601f19169290920160200192915050565b600060018060a01b0380871683526080602084015261285e6080840187612810565b94166040830152506060015292915050565b6000806040838503121561288357600080fd5b825161288e816125f4565b60208401519092506001600160401b038111156128aa57600080fd5b8301601f810185136128bb57600080fd5b80516128c96125098261248a565b8181528660208385010111156128de57600080fd5b6128ef8260208301602086016127e4565b8093505050509250929050565b6000825161290e8184602087016127e4565b9190910192915050565b60208152600061239d602083018461281056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656472b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540fa26469706673582212206ac1d43e80813cd6c9d9b4eea1337800171f7e6c7ca09d9a678269e52530510164736f6c63430008080033",
846
+ "bytecode": "0x60a06040523060601b60805234801561001757600080fd5b5060805160601c61299e61004b60003960008181610b6c01528181610bac01528181610fe90152611029015261299e6000f3fe6080604052600436106101cb5760003560e01c8063013eba92146101d0578063069786ea146102105780630ce82d671461023a5780631248b1011461024f5780631794bb3c146102865780631b3c90a8146102a85780631bbc644c146102bd5780631d8f5ea9146102ed57806322b45727146103035780633659cfe6146103195780633d84ceca146103395780633e6326fc146103595780634162169f146103865780634202d214146103a6578063456ac1c2146103c65780634e71d92d146103e05780634f1ef286146103f55780635231e2f014610408578063560796d1146104385780635aef7de6146104895780635c9302c9146104a957806373b2e80e146104bf578063741470ac146104df5780638081cbbd146104f557806398d6621b146105155780639dc2c0331461052a578063a21f698a14610540578063b656223d14610560578063ba07541014610576578063c033abf21461058c578063c1337508146105a2578063c7a76adf146105c2578063cc054dfc146105e2578063cef636001461060f578063d7c4cbb81461062f578063dddc361614610645578063de1de3a01461065a578063e1758bd81461067a578063eac471a01461068f578063eda4e6d6146106a5575b600080fd5b3480156101dc57600080fd5b506101fd6101eb36600461234f565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561021c57600080fd5b506102256106bb565b60408051928352602083019190915201610207565b34801561024657600080fd5b506101fd6106f9565b34801561025b57600080fd5b5061022561026a36600461236c565b609a602052600090815260409020600181015460029091015482565b34801561029257600080fd5b506102a66102a1366004612385565b61071c565b005b3480156102b457600080fd5b506102a6610894565b3480156102c957600080fd5b506102dd6102d836600461234f565b6109d9565b6040519015158152602001610207565b3480156102f957600080fd5b506101fd609e5481565b34801561030f57600080fd5b506101fd60a05481565b34801561032557600080fd5b506102a661033436600461234f565b610b61565b34801561034557600080fd5b506102a661035436600461236c565b610c2a565b34801561036557600080fd5b50606754610379906001600160a01b031681565b60405161020791906123c6565b34801561039257600080fd5b50606554610379906001600160a01b031681565b3480156103b257600080fd5b506102dd6103c136600461234f565b610cc8565b3480156103d257600080fd5b5060a3546102dd9060ff1681565b3480156103ec57600080fd5b506102dd610d2a565b6102a6610403366004612447565b610fde565b34801561041457600080fd5b506102dd61042336600461234f565b60aa6020526000908152604090205460ff1681565b34801561044457600080fd5b5061047261045336600461236c565b60a9602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610207565b34801561049557600080fd5b50606654610379906001600160a01b031681565b3480156104b557600080fd5b506101fd609c5481565b3480156104cb57600080fd5b506102dd6104da36600461234f565b611098565b3480156104eb57600080fd5b506101fd60a75481565b34801561050157600080fd5b5060a854610379906001600160a01b031681565b34801561052157600080fd5b506101fd6110c4565b34801561053657600080fd5b506101fd60a55481565b34801561054c57600080fd5b506102dd61055b36600461234f565b611284565b34801561056c57600080fd5b506101fd60a25481565b34801561058257600080fd5b506101fd60a65481565b34801561059857600080fd5b506101fd609f5481565b3480156105ae57600080fd5b506101fd6105bd3660046124d9565b6112b2565b3480156105ce57600080fd5b506101fd6105dd36600461236c565b611456565b3480156105ee57600080fd5b506101fd6105fd36600461234f565b60ab6020526000908152604090205481565b34801561061b57600080fd5b506101fd61062a36600461236c565b61146b565b34801561063b57600080fd5b506101fd60a15481565b34801561065157600080fd5b506102a6611480565b34801561066657600080fd5b506102a6610675366004612598565b6114d6565b34801561068657600080fd5b50610379611525565b34801561069b57600080fd5b506101fd60a45481565b3480156106b157600080fd5b506101fd609d5481565b600080600062015180609d54426106d291906125cb565b6106dc91906125e2565b90506106e781611456565b6106f08261146b565b92509250509091565b60006201518060a6544261070d91906125cb565b61071791906125e2565b905090565b600054610100900460ff1680610735575060005460ff16155b61079d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff161580156107bf576000805461ffff19166101011790555b6000821161080f5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f6044820152606401610794565b610818846115bc565b60a282905560a880546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055605a60a455620249f0609f5561085b62015180426125e2565b6108689062015180612604565b6108749061a8c0612623565b609d81905560a655801561088e576000805461ff00191690555b50505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b1580156108f257600080fd5b505afa158015610906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092a919061263b565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b15801561097f57600080fd5b505afa158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b7919061263b565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080609d541180156109ee5750609d544210155b610a0a5760405162461bcd60e51b815260040161079490612658565b610a1382611284565b8015610a255750610a2382610cc8565b155b610a6b5760405162461bcd60e51b815260206004820152601760248201527634b9903737ba1030b71034b730b1ba34bb32903ab9b2b960491b6044820152606401610794565b6001600160a01b038216600090815260aa602052604090205460ff1615610ac55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e48199a5cda195960921b6044820152606401610794565b6001600160a01b038216600090815260aa60205260408120805460ff19166001179055610af06115df565b9050600160a06000828254610b0591906125cb565b90915550610b1890503382600080611860565b6040518181526001600160a01b0384169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a350600192915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610baa5760405162461bcd60e51b815260040161079490612686565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bdc611ae3565b6001600160a01b031614610c025760405162461bcd60e51b8152600401610794906126c0565b610c0b81611aff565b60408051600080825260208201909252610c2791839190611b07565b50565b610c32611c47565b60008111610c8c5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b6064820152608401610794565b60a48190556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610cea83611284565b15610d2157600062015180610cff83426125cb565b610d0991906125e2565b905060a254811015610d1f575060019392505050565b505b50600092915050565b600080609d54118015610d3f5750609d544210155b610d5b5760405162461bcd60e51b815260040161079490612658565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def919061263b565b6001600160a01b0316633af32abf336040518263ffffffff1660e01b8152600401610e1a91906123c6565b60206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a91906126fa565b610eb35760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b6044820152606401610794565b6000610ebe33611d1b565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610f2557600080fd5b505afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5d919061263b565b9050818015610f7457506001600160a01b03811615155b15610fd85760405163748abee960e11b81526001600160a01b0382169063e9157dd290610fa59033906004016123c6565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050505b50905090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110275760405162461bcd60e51b815260040161079490612686565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611059611ae3565b6001600160a01b03161461107f5760405162461bcd60e51b8152600401610794906126c0565b61108882611aff565b61109482826001611b07565b5050565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b600080609d541180156110d95750609d544210155b6110f55760405162461bcd60e51b815260040161079490612658565b6110fe33611284565b1580611119575033600090815260aa602052604090205460ff165b156111a45760a860009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190612717565b62015180609d54426111b691906125cb565b6111c091906125e2565b609c5414156111e3576111d233611098565b6111dd5750609e5490565b50600090565b60006111ed611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161121d91906123c6565b60206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d9190612717565b905060a0548161127d91906125e2565b9250505090565b6001600160a01b0381166000908152609b6020526040812054156112aa57506001919050565b506000919050565b600080609d541180156112c75750609d544210155b6112e35760405162461bcd60e51b815260040161079490612658565b60005b825181101561142857609f545a1015611320576040518181526000805160206129498339815191529060200160405180910390a192915050565b61134283828151811061133557611335612730565b6020026020010151611284565b801561136d575061136b83828151811061135e5761135e612730565b6020026020010151610cc8565b155b80156113b3575060aa600084838151811061138a5761138a612730565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b15611418576113da8382815181106113cd576113cd612730565b60200260200101516109d9565b6114185760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b6044820152606401610794565b61142181612746565b90506112e6565b50600080516020612949833981519152825160405161144991815260200190565b60405180910390a1505190565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b62015180609d544261149291906125cb565b61149c91906125e2565b609c8190556040519081527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea9060200160405180910390a1565b6114de611c47565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610cbd565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640160206040518083038186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610717919061263b565b606780546001600160a01b0319166001600160a01b038316179055610c27610894565b60006115e9611480565b60a154609c54146118595760006115fe611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161162e91906123c6565b60206040518083038186803b15801561164657600080fd5b505afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190612717565b9050600060a55460a4548361169391906125e2565b11905060a7546116a16106f9565b1015806116ab5750805b156117c35760a35460ff16156116c3576116c3611e39565b6040516370a0823160e01b81526001600160a01b038416906370a08231906116ef9030906004016123c6565b60206040518083038186803b15801561170757600080fd5b505afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f9190612717565b915060a4548261174f91906125e2565b60a55560a45460a755611764610e10426125e2565b61177090610e10612604565b60a655609c5460a45460a554604080519384526020840186905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260a96020526040902060a354815460ff191660ff90911615151781556001810183905560a0541561180f5760a05460a55461180b91906125e2565b609e555b609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a1505050505b50609e5490565b6000609a6000609c5481526020019081526020016000209050600181600101600082825461188e9190612623565b90915550506001600160a01b038516600090815260208281526040808320805460ff19166001908117909155609b835281842042905560ab90925282208054919290916118dc908490612623565b909155505081156119b75760a854604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a906119189089906004016123c6565b602060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196a9190612717565b9050808260020160008282546119809190612623565b90915550506040518181526001600160a01b038716906000805160206128e28339815191529060200160405180910390a250611adc565b838160020160008282546119cb9190612623565b90915550600090506119db611525565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611a0c9089908990600401612761565b602060405180830381600087803b158015611a2657600080fd5b505af1158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e91906126fa565b611aa25760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610794565b8315611ada57856001600160a01b03166000805160206128e283398151915286604051611ad191815260200190565b60405180910390a25b505b5050505050565b600080516020612902833981519152546001600160a01b031690565b610c27611c47565b6000611b11611ae3565b9050611b1c8461213c565b600083511180611b295750815b15611b3a57611b3884846121cf565b505b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143805460ff16611adc57805460ff19166001178155604051611bb5908690611b869085906024016123c6565b60408051601f198184030181529190526020810180516001600160e01b0316631b2ce7f360e11b1790526121cf565b50805460ff19168155611bc6611ae3565b6001600160a01b0316826001600160a01b031614611c3e5760405162461bcd60e51b815260206004820152602f60248201527f45524331393637557067726164653a207570677261646520627265616b73206660448201526e75727468657220757067726164657360881b6064820152608401610794565b611adc856122ba565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de6916004808301926020929190829003018186803b158015611c8b57600080fd5b505afa158015611c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc3919061263b565b6001600160a01b031614611d195760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610794565b565b600080611d266115df565b9050611d3183611284565b8015611d5657506001600160a01b038316600090815260aa602052604090205460ff16155b8015611d685750611d6683611098565b155b15611d8457611d7b838260016000611860565b50600192915050565b611d8d83611284565b1580611db157506001600160a01b038316600090815260aa602052604090205460ff165b15610d2157600160a06000828254611dc99190612623565b90915550506001600160a01b038316600090815260aa60205260408120805460ff19169055611dfc908490806001611860565b6040516001600160a01b038416907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a250600192915050565b6000611e43611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611e7391906123c6565b60206040518083038186803b158015611e8b57600080fd5b505afa158015611e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec39190612717565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a0823192611efb92909116906004016123c6565b60206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4b9190612717565b6065546040519192506001600160a01b03169063d1b7089a908590611f769030908690602401612761565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b0319168152611fd19392916001600160a01b0316906000906004016127d2565b600060405180830381600087803b158015611feb57600080fd5b505af1158015611fff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120279190810190612806565b50600090506120368284612623565b6040516370a0823160e01b81529091506001600160a01b038516906370a08231906120659030906004016123c6565b60206040518083038186803b15801561207d57600080fd5b505afa158015612091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b59190612717565b81146120fd5760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b6044820152606401610794565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba910160405180910390a150505050565b803b6121a05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610794565b60008051602061290283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060823b61222e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610794565b600080846001600160a01b0316846040516122499190612892565b600060405180830381855af49150503d8060008114612284576040519150601f19603f3d011682016040523d82523d6000602084013e612289565b606091505b50915091506122b18282604051806060016040528060278152602001612922602791396122fa565b95945050505050565b6122c38161213c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60608315612309575081612333565b8251156123195782518084602001fd5b8160405162461bcd60e51b815260040161079491906128ae565b9392505050565b6001600160a01b0381168114610c2757600080fd5b60006020828403121561236157600080fd5b81356123338161233a565b60006020828403121561237e57600080fd5b5035919050565b60008060006060848603121561239a57600080fd5b83356123a58161233a565b925060208401356123b58161233a565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612418576124186123da565b604052919050565b60006001600160401b03821115612439576124396123da565b50601f01601f191660200190565b6000806040838503121561245a57600080fd5b82356124658161233a565b915060208301356001600160401b0381111561248057600080fd5b8301601f8101851361249157600080fd5b80356124a461249f82612420565b6123f0565b8181528660208385010111156124b957600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208083850312156124ec57600080fd5b82356001600160401b038082111561250357600080fd5b818501915085601f83011261251757600080fd5b813581811115612529576125296123da565b8060051b915061253a8483016123f0565b818152918301840191848101908884111561255457600080fd5b938501935b8385101561257e578435925061256e8361233a565b8282529385019390850190612559565b98975050505050505050565b8015158114610c2757600080fd5b6000602082840312156125aa57600080fd5b81356123338161258a565b634e487b7160e01b600052601160045260246000fd5b6000828210156125dd576125dd6125b5565b500390565b6000826125ff57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561261e5761261e6125b5565b500290565b60008219821115612636576126366125b5565b500190565b60006020828403121561264d57600080fd5b81516123338161233a565b6020808252601490820152731b9bdd081a5b881c195c9a5bd914dd185c9d195960621b604082015260600190565b6020808252602c908201526000805160206128c283398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201526000805160206128c283398151915260408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561270c57600080fd5b81516123338161258a565b60006020828403121561272957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561275a5761275a6125b5565b5060010190565b6001600160a01b03929092168252602082015260400190565b60005b8381101561279557818101518382015260200161277d565b8381111561088e5750506000910152565b600081518084526127be81602086016020860161277a565b601f01601f19169290920160200192915050565b600060018060a01b038087168352608060208401526127f460808401876127a6565b94166040830152506060015292915050565b6000806040838503121561281957600080fd5b82516128248161258a565b60208401519092506001600160401b0381111561284057600080fd5b8301601f8101851361285157600080fd5b805161285f61249f82612420565b81815286602083850101111561287457600080fd5b61288582602083016020860161277a565b8093505050509250929050565b600082516128a481846020870161277a565b9190910192915050565b60208152600061233360208301846127a656fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656472b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540fa2646970667358221220695507988a874d54efcda5d25fd5f5bc1cf20d96ae696e2f1b942a23b5e008df64736f6c63430008080033",
847
+ "deployedBytecode": "0x6080604052600436106101cb5760003560e01c8063013eba92146101d0578063069786ea146102105780630ce82d671461023a5780631248b1011461024f5780631794bb3c146102865780631b3c90a8146102a85780631bbc644c146102bd5780631d8f5ea9146102ed57806322b45727146103035780633659cfe6146103195780633d84ceca146103395780633e6326fc146103595780634162169f146103865780634202d214146103a6578063456ac1c2146103c65780634e71d92d146103e05780634f1ef286146103f55780635231e2f014610408578063560796d1146104385780635aef7de6146104895780635c9302c9146104a957806373b2e80e146104bf578063741470ac146104df5780638081cbbd146104f557806398d6621b146105155780639dc2c0331461052a578063a21f698a14610540578063b656223d14610560578063ba07541014610576578063c033abf21461058c578063c1337508146105a2578063c7a76adf146105c2578063cc054dfc146105e2578063cef636001461060f578063d7c4cbb81461062f578063dddc361614610645578063de1de3a01461065a578063e1758bd81461067a578063eac471a01461068f578063eda4e6d6146106a5575b600080fd5b3480156101dc57600080fd5b506101fd6101eb36600461234f565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561021c57600080fd5b506102256106bb565b60408051928352602083019190915201610207565b34801561024657600080fd5b506101fd6106f9565b34801561025b57600080fd5b5061022561026a36600461236c565b609a602052600090815260409020600181015460029091015482565b34801561029257600080fd5b506102a66102a1366004612385565b61071c565b005b3480156102b457600080fd5b506102a6610894565b3480156102c957600080fd5b506102dd6102d836600461234f565b6109d9565b6040519015158152602001610207565b3480156102f957600080fd5b506101fd609e5481565b34801561030f57600080fd5b506101fd60a05481565b34801561032557600080fd5b506102a661033436600461234f565b610b61565b34801561034557600080fd5b506102a661035436600461236c565b610c2a565b34801561036557600080fd5b50606754610379906001600160a01b031681565b60405161020791906123c6565b34801561039257600080fd5b50606554610379906001600160a01b031681565b3480156103b257600080fd5b506102dd6103c136600461234f565b610cc8565b3480156103d257600080fd5b5060a3546102dd9060ff1681565b3480156103ec57600080fd5b506102dd610d2a565b6102a6610403366004612447565b610fde565b34801561041457600080fd5b506102dd61042336600461234f565b60aa6020526000908152604090205460ff1681565b34801561044457600080fd5b5061047261045336600461236c565b60a9602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610207565b34801561049557600080fd5b50606654610379906001600160a01b031681565b3480156104b557600080fd5b506101fd609c5481565b3480156104cb57600080fd5b506102dd6104da36600461234f565b611098565b3480156104eb57600080fd5b506101fd60a75481565b34801561050157600080fd5b5060a854610379906001600160a01b031681565b34801561052157600080fd5b506101fd6110c4565b34801561053657600080fd5b506101fd60a55481565b34801561054c57600080fd5b506102dd61055b36600461234f565b611284565b34801561056c57600080fd5b506101fd60a25481565b34801561058257600080fd5b506101fd60a65481565b34801561059857600080fd5b506101fd609f5481565b3480156105ae57600080fd5b506101fd6105bd3660046124d9565b6112b2565b3480156105ce57600080fd5b506101fd6105dd36600461236c565b611456565b3480156105ee57600080fd5b506101fd6105fd36600461234f565b60ab6020526000908152604090205481565b34801561061b57600080fd5b506101fd61062a36600461236c565b61146b565b34801561063b57600080fd5b506101fd60a15481565b34801561065157600080fd5b506102a6611480565b34801561066657600080fd5b506102a6610675366004612598565b6114d6565b34801561068657600080fd5b50610379611525565b34801561069b57600080fd5b506101fd60a45481565b3480156106b157600080fd5b506101fd609d5481565b600080600062015180609d54426106d291906125cb565b6106dc91906125e2565b90506106e781611456565b6106f08261146b565b92509250509091565b60006201518060a6544261070d91906125cb565b61071791906125e2565b905090565b600054610100900460ff1680610735575060005460ff16155b61079d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600054610100900460ff161580156107bf576000805461ffff19166101011790555b6000821161080f5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f6044820152606401610794565b610818846115bc565b60a282905560a880546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055605a60a455620249f0609f5561085b62015180426125e2565b6108689062015180612604565b6108749061a8c0612623565b609d81905560a655801561088e576000805461ff00191690555b50505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b1580156108f257600080fd5b505afa158015610906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092a919061263b565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b15801561097f57600080fd5b505afa158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b7919061263b565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600080609d541180156109ee5750609d544210155b610a0a5760405162461bcd60e51b815260040161079490612658565b610a1382611284565b8015610a255750610a2382610cc8565b155b610a6b5760405162461bcd60e51b815260206004820152601760248201527634b9903737ba1030b71034b730b1ba34bb32903ab9b2b960491b6044820152606401610794565b6001600160a01b038216600090815260aa602052604090205460ff1615610ac55760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e48199a5cda195960921b6044820152606401610794565b6001600160a01b038216600090815260aa60205260408120805460ff19166001179055610af06115df565b9050600160a06000828254610b0591906125cb565b90915550610b1890503382600080611860565b6040518181526001600160a01b0384169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a350600192915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610baa5760405162461bcd60e51b815260040161079490612686565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bdc611ae3565b6001600160a01b031614610c025760405162461bcd60e51b8152600401610794906126c0565b610c0b81611aff565b60408051600080825260208201909252610c2791839190611b07565b50565b610c32611c47565b60008111610c8c5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b6064820152608401610794565b60a48190556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610cea83611284565b15610d2157600062015180610cff83426125cb565b610d0991906125e2565b905060a254811015610d1f575060019392505050565b505b50600092915050565b600080609d54118015610d3f5750609d544210155b610d5b5760405162461bcd60e51b815260040161079490612658565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def919061263b565b6001600160a01b0316633af32abf336040518263ffffffff1660e01b8152600401610e1a91906123c6565b60206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a91906126fa565b610eb35760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b6044820152606401610794565b6000610ebe33611d1b565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac19060640160206040518083038186803b158015610f2557600080fd5b505afa158015610f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5d919061263b565b9050818015610f7457506001600160a01b03811615155b15610fd85760405163748abee960e11b81526001600160a01b0382169063e9157dd290610fa59033906004016123c6565b600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050505b50905090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110275760405162461bcd60e51b815260040161079490612686565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611059611ae3565b6001600160a01b03161461107f5760405162461bcd60e51b8152600401610794906126c0565b61108882611aff565b61109482826001611b07565b5050565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b600080609d541180156110d95750609d544210155b6110f55760405162461bcd60e51b815260040161079490612658565b6110fe33611284565b1580611119575033600090815260aa602052604090205460ff165b156111a45760a860009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190612717565b62015180609d54426111b691906125cb565b6111c091906125e2565b609c5414156111e3576111d233611098565b6111dd5750609e5490565b50600090565b60006111ed611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161121d91906123c6565b60206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d9190612717565b905060a0548161127d91906125e2565b9250505090565b6001600160a01b0381166000908152609b6020526040812054156112aa57506001919050565b506000919050565b600080609d541180156112c75750609d544210155b6112e35760405162461bcd60e51b815260040161079490612658565b60005b825181101561142857609f545a1015611320576040518181526000805160206129498339815191529060200160405180910390a192915050565b61134283828151811061133557611335612730565b6020026020010151611284565b801561136d575061136b83828151811061135e5761135e612730565b6020026020010151610cc8565b155b80156113b3575060aa600084838151811061138a5761138a612730565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b15611418576113da8382815181106113cd576113cd612730565b60200260200101516109d9565b6114185760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b6044820152606401610794565b61142181612746565b90506112e6565b50600080516020612949833981519152825160405161144991815260200190565b60405180910390a1505190565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b62015180609d544261149291906125cb565b61149c91906125e2565b609c8190556040519081527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea9060200160405180910390a1565b6114de611c47565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610cbd565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640160206040518083038186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610717919061263b565b606780546001600160a01b0319166001600160a01b038316179055610c27610894565b60006115e9611480565b60a154609c54146118595760006115fe611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161162e91906123c6565b60206040518083038186803b15801561164657600080fd5b505afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190612717565b9050600060a55460a4548361169391906125e2565b11905060a7546116a16106f9565b1015806116ab5750805b156117c35760a35460ff16156116c3576116c3611e39565b6040516370a0823160e01b81526001600160a01b038416906370a08231906116ef9030906004016123c6565b60206040518083038186803b15801561170757600080fd5b505afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f9190612717565b915060a4548261174f91906125e2565b60a55560a45460a755611764610e10426125e2565b61177090610e10612604565b60a655609c5460a45460a554604080519384526020840186905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260a96020526040902060a354815460ff191660ff90911615151781556001810183905560a0541561180f5760a05460a55461180b91906125e2565b609e555b609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a1505050505b50609e5490565b6000609a6000609c5481526020019081526020016000209050600181600101600082825461188e9190612623565b90915550506001600160a01b038516600090815260208281526040808320805460ff19166001908117909155609b835281842042905560ab90925282208054919290916118dc908490612623565b909155505081156119b75760a854604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a906119189089906004016123c6565b602060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196a9190612717565b9050808260020160008282546119809190612623565b90915550506040518181526001600160a01b038716906000805160206128e28339815191529060200160405180910390a250611adc565b838160020160008282546119cb9190612623565b90915550600090506119db611525565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611a0c9089908990600401612761565b602060405180830381600087803b158015611a2657600080fd5b505af1158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e91906126fa565b611aa25760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610794565b8315611ada57856001600160a01b03166000805160206128e283398151915286604051611ad191815260200190565b60405180910390a25b505b5050505050565b600080516020612902833981519152546001600160a01b031690565b610c27611c47565b6000611b11611ae3565b9050611b1c8461213c565b600083511180611b295750815b15611b3a57611b3884846121cf565b505b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143805460ff16611adc57805460ff19166001178155604051611bb5908690611b869085906024016123c6565b60408051601f198184030181529190526020810180516001600160e01b0316631b2ce7f360e11b1790526121cf565b50805460ff19168155611bc6611ae3565b6001600160a01b0316826001600160a01b031614611c3e5760405162461bcd60e51b815260206004820152602f60248201527f45524331393637557067726164653a207570677261646520627265616b73206660448201526e75727468657220757067726164657360881b6064820152608401610794565b611adc856122ba565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de6916004808301926020929190829003018186803b158015611c8b57600080fd5b505afa158015611c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc3919061263b565b6001600160a01b031614611d195760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610794565b565b600080611d266115df565b9050611d3183611284565b8015611d5657506001600160a01b038316600090815260aa602052604090205460ff16155b8015611d685750611d6683611098565b155b15611d8457611d7b838260016000611860565b50600192915050565b611d8d83611284565b1580611db157506001600160a01b038316600090815260aa602052604090205460ff165b15610d2157600160a06000828254611dc99190612623565b90915550506001600160a01b038316600090815260aa60205260408120805460ff19169055611dfc908490806001611860565b6040516001600160a01b038416907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a250600192915050565b6000611e43611525565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611e7391906123c6565b60206040518083038186803b158015611e8b57600080fd5b505afa158015611e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec39190612717565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a0823192611efb92909116906004016123c6565b60206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4b9190612717565b6065546040519192506001600160a01b03169063d1b7089a908590611f769030908690602401612761565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b0319168152611fd19392916001600160a01b0316906000906004016127d2565b600060405180830381600087803b158015611feb57600080fd5b505af1158015611fff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120279190810190612806565b50600090506120368284612623565b6040516370a0823160e01b81529091506001600160a01b038516906370a08231906120659030906004016123c6565b60206040518083038186803b15801561207d57600080fd5b505afa158015612091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b59190612717565b81146120fd5760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b6044820152606401610794565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba910160405180910390a150505050565b803b6121a05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610794565b60008051602061290283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060823b61222e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610794565b600080846001600160a01b0316846040516122499190612892565b600060405180830381855af49150503d8060008114612284576040519150601f19603f3d011682016040523d82523d6000602084013e612289565b606091505b50915091506122b18282604051806060016040528060278152602001612922602791396122fa565b95945050505050565b6122c38161213c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60608315612309575081612333565b8251156123195782518084602001fd5b8160405162461bcd60e51b815260040161079491906128ae565b9392505050565b6001600160a01b0381168114610c2757600080fd5b60006020828403121561236157600080fd5b81356123338161233a565b60006020828403121561237e57600080fd5b5035919050565b60008060006060848603121561239a57600080fd5b83356123a58161233a565b925060208401356123b58161233a565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612418576124186123da565b604052919050565b60006001600160401b03821115612439576124396123da565b50601f01601f191660200190565b6000806040838503121561245a57600080fd5b82356124658161233a565b915060208301356001600160401b0381111561248057600080fd5b8301601f8101851361249157600080fd5b80356124a461249f82612420565b6123f0565b8181528660208385010111156124b957600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208083850312156124ec57600080fd5b82356001600160401b038082111561250357600080fd5b818501915085601f83011261251757600080fd5b813581811115612529576125296123da565b8060051b915061253a8483016123f0565b818152918301840191848101908884111561255457600080fd5b938501935b8385101561257e578435925061256e8361233a565b8282529385019390850190612559565b98975050505050505050565b8015158114610c2757600080fd5b6000602082840312156125aa57600080fd5b81356123338161258a565b634e487b7160e01b600052601160045260246000fd5b6000828210156125dd576125dd6125b5565b500390565b6000826125ff57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561261e5761261e6125b5565b500290565b60008219821115612636576126366125b5565b500190565b60006020828403121561264d57600080fd5b81516123338161233a565b6020808252601490820152731b9bdd081a5b881c195c9a5bd914dd185c9d195960621b604082015260600190565b6020808252602c908201526000805160206128c283398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201526000805160206128c283398151915260408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561270c57600080fd5b81516123338161258a565b60006020828403121561272957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561275a5761275a6125b5565b5060010190565b6001600160a01b03929092168252602082015260400190565b60005b8381101561279557818101518382015260200161277d565b8381111561088e5750506000910152565b600081518084526127be81602086016020860161277a565b601f01601f19169290920160200192915050565b600060018060a01b038087168352608060208401526127f460808401876127a6565b94166040830152506060015292915050565b6000806040838503121561281957600080fd5b82516128248161258a565b60208401519092506001600160401b0381111561284057600080fd5b8301601f8101851361285157600080fd5b805161285f61249f82612420565b81815286602083850101111561287457600080fd5b61288582602083016020860161277a565b8093505050509250929050565b600082516128a481846020870161277a565b9190910192915050565b60208152600061233360208301846127a656fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656472b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540fa2646970667358221220695507988a874d54efcda5d25fd5f5bc1cf20d96ae696e2f1b942a23b5e008df64736f6c63430008080033",
848
848
  "linkReferences": {},
849
849
  "deployedLinkReferences": {}
850
850
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/70c43ece26055f8cce92e690f8aedb53.json"
3
+ "buildInfo": "../../../build-info/2770f69b68af6a8222314ccea46d1353.json"
4
4
  }
@@ -234,6 +234,21 @@ contract GReputation is Reputation {
234
234
  return getVotesAt(_user, true, block.number);
235
235
  }
236
236
 
237
+ /**
238
+ be compatible with compound
239
+ */
240
+ function getCurrentVotes(address _user) public view returns (uint256) {
241
+ return getVotesAt(_user, true, block.number);
242
+ }
243
+
244
+ function getPriorVotes(address _user, uint256 _block)
245
+ public
246
+ view
247
+ returns (uint256)
248
+ {
249
+ return getVotesAt(_user, true, _block);
250
+ }
251
+
237
252
  /**
238
253
  * @notice returns aggregated active votes in all blockchains and delegated at specific block
239
254
  * @param _user user to get active votes for
@@ -243,12 +243,10 @@ contract UBIScheme is DAOUpgradeableContract {
243
243
  if (currentDay != lastWithdrawDay) {
244
244
  IGoodDollar token = nativeToken();
245
245
  uint256 currentBalance = token.balanceOf(address(this));
246
- uint256 currentCycleStartingBalance = dailyCyclePool * currentCycleLength;
247
- //we start a new cycle earlier if we got some significant funds deposited (currentBalance > 1.3 * openBalance[prevDay]) and currentBalance > 80% of prev cycle starting balance
248
- uint256 prevDayBalance = dailyUBIHistory[currentDay - 1].openAmount;
249
- bool shouldStartEarlyCycle = currentBalance >=
250
- (prevDayBalance * 130) / 100 &&
251
- currentBalance > (currentCycleStartingBalance * 80) / 100;
246
+ //start early cycle if we can increase the daily UBI pool
247
+ bool shouldStartEarlyCycle = currentBalance / cycleLength >
248
+ dailyCyclePool;
249
+
252
250
  if (
253
251
  currentDayInCycle() >= currentCycleLength || shouldStartEarlyCycle
254
252
  ) //start of cycle or first time
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddollar/goodprotocol",
3
- "version": "1.0.0",
3
+ "version": "1.0.2-beta.3",
4
4
  "description": "GoodDollar Protocol",
5
5
  "scripts": {
6
6
  "build": "scripts/build.sh deploy",
@@ -24,15 +24,15 @@
24
24
  },
25
25
  "develop": {
26
26
  "governance": {
27
- "gdaoAirdrop": "0x2bc5d079ee076bebadc354ad388aff81fb0ade0b3fbb663d5ce45ec63bec31a2",
27
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
28
28
  "gdaoTotalSupply": "24000000000000000000000000",
29
29
  "proposalVotingPeriod": 241920
30
30
  }
31
31
  },
32
32
  "develop-mainnet": {
33
- "gdxAirdrop": "0x87db9fa52d55498bbf1e6005603afe05cb194c13e8ac4907282f4ea2717d0921",
33
+ "gdxAirdrop": "0x707f775d730a9b17ee62c21e00188da4dff26602a58c338269cd115f30acbe2f",
34
34
  "governance": {
35
- "gdaoAirdrop": "0x2bc5d079ee076bebadc354ad388aff81fb0ade0b3fbb663d5ce45ec63bec31a2",
35
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
36
36
  "gdaoTotalSupply": "24000000000000000000000000",
37
37
  "proposalVotingPeriod": 86040
38
38
  },
@@ -44,30 +44,30 @@
44
44
  },
45
45
  "dapptest": {
46
46
  "governance": {
47
- "gdaoAirdrop": "0x2bc5d079ee076bebadc354ad388aff81fb0ade0b3fbb663d5ce45ec63bec31a2",
47
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
48
48
  "gdaoTotalSupply": "24000000000000000000000000",
49
49
  "proposalVotingPeriod": 241920
50
50
  }
51
51
  },
52
52
  "dapptest-mainnet": {
53
- "gdxAirdrop": "0x87db9fa52d55498bbf1e6005603afe05cb194c13e8ac4907282f4ea2717d0921",
53
+ "gdxAirdrop": "0x707f775d730a9b17ee62c21e00188da4dff26602a58c338269cd115f30acbe2f",
54
54
  "governance": {
55
- "gdaoAirdrop": "0x2bc5d079ee076bebadc354ad388aff81fb0ade0b3fbb663d5ce45ec63bec31a2",
55
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
56
56
  "gdaoTotalSupply": "24000000000000000000000000",
57
57
  "proposalVotingPeriod": 86040
58
58
  }
59
59
  },
60
60
  "test": {
61
61
  "governance": {
62
- "gdaoAirdrop": "0x2bc5d079ee076bebadc354ad388aff81fb0ade0b3fbb663d5ce45ec63bec31a2",
62
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
63
63
  "gdaoTotalSupply": "24000000000000000000000000",
64
64
  "proposalVotingPeriod": 241920
65
65
  }
66
66
  },
67
67
  "test-mainnet": {
68
- "gdxAirdrop": "0x87db9fa52d55498bbf1e6005603afe05cb194c13e8ac4907282f4ea2717d0921",
68
+ "gdxAirdrop": "0x707f775d730a9b17ee62c21e00188da4dff26602a58c338269cd115f30acbe2f",
69
69
  "governance": {
70
- "gdaoAirdrop": "0x2bc5d079ee076bebadc354ad388aff81fb0ade0b3fbb663d5ce45ec63bec31a2",
70
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
71
71
  "gdaoTotalSupply": "24000000000000000000000000",
72
72
  "proposalVotingPeriod": 86040
73
73
  },
@@ -79,15 +79,15 @@
79
79
  },
80
80
  "fuse": {
81
81
  "governance": {
82
- "gdaoAirdrop": "0x9bf0fb0be13c4e1ab1da89850b23ab7919116fb9fc60ad08ec06bbca58516d11",
82
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
83
83
  "gdaoTotalSupply": "24000000000000000000000000",
84
84
  "proposalVotingPeriod": 241920
85
85
  }
86
86
  },
87
87
  "fuse-mainnet": {
88
- "gdxAirdrop": "0x79acf6e79283bda8d4ddb210e54a739ce9b56b85aaa07a4f6c1f5f3f20bca433",
88
+ "gdxAirdrop": "0x707f775d730a9b17ee62c21e00188da4dff26602a58c338269cd115f30acbe2f",
89
89
  "governance": {
90
- "gdaoAirdrop": "0x9bf0fb0be13c4e1ab1da89850b23ab7919116fb9fc60ad08ec06bbca58516d11",
90
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
91
91
  "gdaoTotalSupply": "24000000000000000000000000",
92
92
  "proposalVotingPeriod": 241920
93
93
  },
@@ -118,15 +118,15 @@
118
118
  },
119
119
  "staging": {
120
120
  "governance": {
121
- "gdaoAirdrop": "0x9bf0fb0be13c4e1ab1da89850b23ab7919116fb9fc60ad08ec06bbca58516d11",
121
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
122
122
  "gdaoTotalSupply": "24000000000000000000000000",
123
123
  "proposalVotingPeriod": 241920
124
124
  }
125
125
  },
126
126
  "staging-mainnet": {
127
- "gdxAirdrop": "0x79acf6e79283bda8d4ddb210e54a739ce9b56b85aaa07a4f6c1f5f3f20bca433",
127
+ "gdxAirdrop": "0x707f775d730a9b17ee62c21e00188da4dff26602a58c338269cd115f30acbe2f",
128
128
  "governance": {
129
- "gdaoAirdrop": "0x9bf0fb0be13c4e1ab1da89850b23ab7919116fb9fc60ad08ec06bbca58516d11",
129
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
130
130
  "gdaoTotalSupply": "24000000000000000000000000",
131
131
  "proposalVotingPeriod": 80640
132
132
  },
@@ -156,9 +156,9 @@
156
156
  }
157
157
  },
158
158
  "kovan-mainnet": {
159
- "gdxAirdrop": "0x87db9fa52d55498bbf1e6005603afe05cb194c13e8ac4907282f4ea2717d0921",
159
+ "gdxAirdrop": "0x707f775d730a9b17ee62c21e00188da4dff26602a58c338269cd115f30acbe2f",
160
160
  "governance": {
161
- "gdaoAirdrop": "0x2bc5d079ee076bebadc354ad388aff81fb0ade0b3fbb663d5ce45ec63bec31a2",
161
+ "gdaoAirdrop": "0x2feece0e9bc03b54e63e6eb7abb81a128f6bc7ce9a3bafd5ca2bea0c40e3634b",
162
162
  "gdaoTotalSupply": "24000000000000000000000000",
163
163
  "proposalVotingPeriod": 80640
164
164
  },
@@ -219,24 +219,24 @@
219
219
  "network": "dapptest-mainnet"
220
220
  },
221
221
  "staging-mainnet": {
222
- "NameService": "0xfb8E0A9626e6BDB3e34250aB19DaD0bFFc54B25B",
223
- "GReputation": "0xcF13438c29f7315A340d569ddBde1B3D84750B21",
224
- "CompoundVotingMachine": "0x2D091B0D4966Ca28D3EDf960b5C4137138896AdB",
225
- "GoodMarketMaker": "0xdd2E6A866e3A7AB2247C3A5C35CA4894fCE374aa",
226
- "GoodReserveCDai": "0x0D18BDa65c5eb374833Fc5779e5f36f144d83278",
227
- "ExchangeHelper": "0x47749C84379093723f0D4Add8A860304C231a30A",
228
- "GoodFundManager": "0x96ce11CDEe2CBEc11eAa230D92BD176306Fd4C37",
229
- "StakersDistribution": "0x61456d07Bd7DdfB4190b0Ad8653854949a2fdc73",
230
- "ProtocolUpgrade": "0x37A44c6F079F74604dC9eD1d6EF5b964e7b2d9Dd",
231
- "UniswapV2SwapHelper": "0x882B21CbE4ca48A28C6F39c0aB3c700BD7d531C9",
232
- "CompoundStakingFactory": "0x3c4fa47b15234A1181564B7Ac19FE05d58841d67",
233
- "AaveStakingFactory": "0x7b9C004996e9D3F5E496c32C48E011a57197F486",
234
- "DonationsStaking": "0x69820dE6a1d4a396Cb2eC051f72e68d3e596cFA9",
222
+ "NameService": "0x1C8F3CE77a6958fF2F4b422851b6Ce9C09dcAF8A",
223
+ "GReputation": "0xd398951013E1bd097B82Df94159e219455DA4fC5",
224
+ "CompoundVotingMachine": "0xB301e738A8A2c8c95BE0822b264653bBcd265362",
225
+ "GoodMarketMaker": "0x9B276580B1694143F59a853B47D9b4a72504A686",
226
+ "GoodReserveCDai": "0x17a399CdC103490E561b3CBFf5E4263C26f3000D",
227
+ "ExchangeHelper": "0xed768F4C9184cAead84679af39AEed9Fe542F59e",
228
+ "GoodFundManager": "0xCB67BCFEA070eF05533168A59DC1181FD6b39990",
229
+ "StakersDistribution": "0x56a8fA4a1F793fac39c7749F5ddF0ACDcaD4b951",
230
+ "ProtocolUpgrade": "0xc3069547cDAf7d7F8A9916B24702Da3CBbefFC78",
231
+ "UniswapV2SwapHelper": "0xCdDe99dDD1bf4fa22d808697F306DfC59412F46f",
232
+ "CompoundStakingFactory": "0x6049e33E3179a22cf79057B2C8E7dCDc775710ed",
233
+ "AaveStakingFactory": "0xFA3E3BD1149CeB820dbcaB6472e36d663C4F9066",
234
+ "DonationsStaking": "0x431B770626546153593E1576F8E66fa9E01E7b40",
235
235
  "network": "staging-mainnet",
236
236
  "networkId": 3,
237
237
  "ForeignBridge": "0xEDA39475415f1A2944a467Aa6359CB4C1c3ed50f",
238
238
  "Contribution": "0x7cC2CcDA5483e721778C4040B1DbD23B3Ab1B4A5",
239
- "StakingContracts": [["0xd7ebc4b9A53b21f384bF8C0A37DAd088501f78b9", 13888]],
239
+ "StakingContracts": [["0x61b36EcaEd25c4EE3017905B5Dd006129a4dfb0B", 13888]],
240
240
  "Identity": "0xfb5dAF44cd18Db7b96DB3F9c6E411D65fcf4f372",
241
241
  "GoodDollar": "0x4738C5e91C4F809da21DD0Df4B5aD5f699878C1c",
242
242
  "Controller": "0x589F7ae100a7dbd80DC512208b7a0F457A041BE6",
@@ -245,7 +245,7 @@
245
245
  "DAI": "0xB5E5D0F8C0cbA267CD3D7035d6AdC8eBA7Df7Cdd",
246
246
  "cDAI": "0x6ce27497a64fffb5517aa4aee908b1e7eb63b9ff",
247
247
  "COMP": "0xf76d4a441e4ba86a923ce32b89aff89dbccaa075",
248
- "ProxyFactory": "0xB68C6c2E29cf523ABF31F4308c567379f48AE1f2"
248
+ "ProxyFactory": "0x1268c5d249746546f95E2cE8Bf7477C9729EbaBE"
249
249
  },
250
250
  "staging": {
251
251
  "FuseFaucet": "0xDfCb356c9bd420263aC56D7980f409AcE9050896",
@@ -23,14 +23,8 @@ describe("UBIScheme cycle", () => {
23
23
  ubiScheme: UBIScheme;
24
24
 
25
25
  before(async () => {
26
- [
27
- root,
28
- acct,
29
- claimer1,
30
- claimer2,
31
- claimer3,
32
- ...signers
33
- ] = await ethers.getSigners();
26
+ [root, acct, claimer1, claimer2, claimer3, ...signers] =
27
+ await ethers.getSigners();
34
28
 
35
29
  const deployedDAO = await createDAO();
36
30
  let {
@@ -149,7 +143,7 @@ describe("UBIScheme cycle", () => {
149
143
  expect(cycleEvent.args.dailyUBIPool).to.be.equal(117187); //pool balance: (1000000 - 62500 given to first claimer) divided by 8 days - only first claimer got 62500 in first cycle
150
144
  });
151
145
 
152
- it("should calculate cycle early if (currentBalance > 1.3 * openBalance[prevDay]) and currentBalance > 80% of current cycle starting balance", async () => {
146
+ it("should calculate cycle early if we can increase current daily pool", async () => {
153
147
  //increase ubi pool balance
154
148
  let encoded = goodDollar.interface.encodeFunctionData("mint", [
155
149
  ubiScheme.address,
@@ -158,73 +152,40 @@ describe("UBIScheme cycle", () => {
158
152
  await genericCall(goodDollar.address, encoded);
159
153
  let balance = await goodDollar.balanceOf(ubiScheme.address);
160
154
 
155
+ const cycleLength = await ubiScheme.cycleLength();
156
+ const curDailyPool = await ubiScheme.dailyCyclePool();
157
+ console.log({ balance, cycleLength, curDailyPool });
158
+
159
+ //verify new daily pool IS gonna be larger than current
160
+ expect(balance.div(cycleLength)).to.be.gt(curDailyPool);
161
+
161
162
  await increaseTime(ONE_DAY); //make sure
162
163
  let transaction = await (await ubiScheme.connect(claimer1).claim()).wait();
163
- let cycleLength = await ubiScheme.cycleLength();
164
- let currentCycle = await ubiScheme.currentCycleLength();
164
+
165
165
  const cycleEvent = transaction.events.find(
166
166
  e => e.event === "UBICycleCalculated"
167
167
  );
168
+
169
+ expect(cycleEvent).to.be.not.empty;
168
170
  expect(cycleEvent.args.day.toNumber()).to.be.a("number");
169
171
  expect(cycleEvent.args.pool).to.be.equal(balance);
170
172
  expect(cycleEvent.args.cycleLength).to.be.equal(cycleLength);
171
173
  expect(cycleEvent.args.dailyUBIPool).to.be.equal(balance.div(cycleLength));
172
174
  });
173
175
 
174
- it("should not calculate cycle early if only currentBalance > 80% of current cycle starting balanc", async () => {
175
- //increase ubi pool balance
176
- let encoded = goodDollar.interface.encodeFunctionData("mint", [
177
- ubiScheme.address,
178
- 100000
179
- ]);
180
- await genericCall(goodDollar.address, encoded);
181
- let balance = await goodDollar.balanceOf(ubiScheme.address);
182
- const curCycleLen = await ubiScheme.currentCycleLength();
183
- const curDailyUbi = await ubiScheme.dailyUbi();
184
- const cycleStartingBalance = curCycleLen.mul(curDailyUbi);
185
-
186
- //pass one condition
187
- expect(balance).to.be.gt(cycleStartingBalance.mul(80).div(100));
188
-
189
- //dont pass other condition
190
- const curCycle = await ubiScheme.dailyUBIHistory(
191
- await ubiScheme.currentDay()
192
- );
193
- expect(balance).to.be.lt(curCycle.openAmount.mul(130).div(100));
194
-
195
- await increaseTime(ONE_DAY); //make sure
196
- let transaction = await (await ubiScheme.connect(claimer1).claim()).wait();
197
- const cycleEvent = transaction.events.find(
198
- e => e.event === "UBICycleCalculated"
199
- );
200
- expect(cycleEvent).to.be.undefined;
201
- });
202
-
203
- it("should not calculate cycle early if only currentBalance > 1.3 * openBalance[prevDay])", async () => {
204
- for (let i = 0; i < 13; i++) {
205
- await increaseTime(ONE_DAY); //make sure
206
- await ubiScheme.connect(claimer1).claim();
207
- await ubiScheme.connect(claimer2).claim();
208
- }
176
+ it("should not calculate cycle early if not possible to increase daily ubi pool", async () => {
209
177
  //increase ubi pool balance
210
178
  let encoded = goodDollar.interface.encodeFunctionData("mint", [
211
179
  ubiScheme.address,
212
- 55000
180
+ 1000
213
181
  ]);
214
182
  await genericCall(goodDollar.address, encoded);
215
183
  let balance = await goodDollar.balanceOf(ubiScheme.address);
216
- const curCycle = await ubiScheme.dailyUBIHistory(
217
- await ubiScheme.currentDay()
218
- );
219
-
220
- //verify we pass 1 condition for early cycle
221
- expect(balance).to.be.gt(curCycle.openAmount.mul(130).div(100));
222
-
223
- //dont pass second condition
224
- const curCycleLen = await ubiScheme.currentCycleLength();
225
- const curDailyUbi = await ubiScheme.dailyUbi();
226
- const cycleStartingBalance = curCycleLen.mul(curDailyUbi);
227
- expect(balance).to.be.lt(cycleStartingBalance.mul(80).div(100));
184
+ const curCycleLen = await ubiScheme.cycleLength();
185
+ const curDailyPool = await ubiScheme.dailyCyclePool();
186
+ console.log({ balance, curCycleLen, curDailyPool });
187
+ //verify new daily pool is not gonna be larger than current
188
+ expect(balance.div(curCycleLen)).to.be.lt(curDailyPool);
228
189
 
229
190
  await increaseTime(ONE_DAY); //make sure
230
191
  let transaction = await (await ubiScheme.connect(claimer1).claim()).wait();