@dolomite-exchange/dolomite-margin 0.2.6 → 0.2.7

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 (200) hide show
  1. package/build/contracts/Account.json +11 -11
  2. package/build/contracts/Actions.json +11 -11
  3. package/build/contracts/Address.json +1 -1
  4. package/build/contracts/Admin.json +23 -23
  5. package/build/contracts/AdminImpl.json +35 -307
  6. package/build/contracts/AdvancedMath.json +7 -7
  7. package/build/contracts/AmmRebalancerProxy.json +577 -621
  8. package/build/contracts/AmmRebalancerProxyV1.json +78 -32
  9. package/build/contracts/Babylonian.json +1 -1
  10. package/build/contracts/Bits.json +9 -9
  11. package/build/contracts/Cache.json +13 -13
  12. package/build/contracts/ChainlinkPriceOracleV1.json +16 -16
  13. package/build/contracts/Context.json +1 -1
  14. package/build/contracts/CustomTestToken.json +9 -9
  15. package/build/contracts/Decimal.json +9 -9
  16. package/build/contracts/DelayedMultiSig.json +9 -9
  17. package/build/contracts/DolomiteAmmERC20.json +11 -11
  18. package/build/contracts/DolomiteAmmFactory.json +14 -52
  19. package/build/contracts/DolomiteAmmLibrary.json +24 -24
  20. package/build/contracts/DolomiteAmmPair.json +27 -27
  21. package/build/contracts/DolomiteAmmRouterProxy.json +30 -363
  22. package/build/contracts/DolomiteMargin.json +21 -67
  23. package/build/contracts/DoubleExponentInterestSetter.json +15 -21
  24. package/build/contracts/EnumerableSet.json +7 -7
  25. package/build/contracts/ErroringOmiseToken.json +9 -9
  26. package/build/contracts/ErroringToken.json +10 -10
  27. package/build/contracts/Events.json +17 -17
  28. package/build/contracts/ExcessivelySafeCall.json +35 -35
  29. package/build/contracts/Exchange.json +15 -15
  30. package/build/contracts/Expiry.json +36 -36
  31. package/build/contracts/Getters.json +33 -33
  32. package/build/contracts/IAutoTrader.json +9 -9
  33. package/build/contracts/ICallee.json +7 -7
  34. package/build/contracts/IChainlinkAggregator.json +5 -5
  35. package/build/contracts/IDolomiteAmmERC20.json +5 -5
  36. package/build/contracts/IDolomiteAmmFactory.json +9 -9
  37. package/build/contracts/IDolomiteAmmPair.json +9 -9
  38. package/build/contracts/IDolomiteMargin.json +23 -23
  39. package/build/contracts/IERC20.json +1 -1
  40. package/build/contracts/IERC20Detailed.json +5 -5
  41. package/build/contracts/IExchangeWrapper.json +5 -5
  42. package/build/contracts/IExpiry.json +9 -9
  43. package/build/contracts/IInterestSetter.json +7 -7
  44. package/build/contracts/ILiquidationCallback.json +7 -7
  45. package/build/contracts/IMakerOracle.json +5 -5
  46. package/build/contracts/IOasisDex.json +5 -5
  47. package/build/contracts/IPriceOracle.json +7 -7
  48. package/build/contracts/IRecyclable.json +9 -9
  49. package/build/contracts/ITransferProxy.json +5 -5
  50. package/build/contracts/IUniswapV2Callee.json +5 -5
  51. package/build/contracts/IUniswapV2Factory.json +5 -5
  52. package/build/contracts/IUniswapV2Pair.json +5 -5
  53. package/build/contracts/IUniswapV2Router.json +5 -5
  54. package/build/contracts/IWETH.json +5 -5
  55. package/build/contracts/Interest.json +15 -15
  56. package/build/contracts/LiquidateOrVaporizeImpl.json +32 -83
  57. package/build/contracts/LiquidatorProxyHelper.json +23 -23
  58. package/build/contracts/LiquidatorProxyV1.json +30 -36
  59. package/build/contracts/LiquidatorProxyV1WithAmm.json +49 -105
  60. package/build/contracts/Math.json +1 -1
  61. package/build/contracts/Migrations.json +8 -14
  62. package/build/contracts/Monetary.json +7 -7
  63. package/build/contracts/MultiCall.json +8 -14
  64. package/build/contracts/MultiSig.json +7 -7
  65. package/build/contracts/OmiseToken.json +8 -8
  66. package/build/contracts/OnlyDolomiteMargin.json +11 -11
  67. package/build/contracts/Operation.json +15 -15
  68. package/build/contracts/OperationImpl.json +39 -47
  69. package/build/contracts/Ownable.json +1 -1
  70. package/build/contracts/PartiallyDelayedMultiSig.json +9 -9
  71. package/build/contracts/PayableProxy.json +17 -23
  72. package/build/contracts/Permission.json +11 -11
  73. package/build/contracts/PolynomialInterestSetter.json +13 -13
  74. package/build/contracts/RecyclableTokenProxy.json +25 -25
  75. package/build/contracts/ReentrancyGuard.json +1 -1
  76. package/build/contracts/Require.json +7 -7
  77. package/build/contracts/SafeERC20.json +1 -1
  78. package/build/contracts/SafeETH.json +7 -7
  79. package/build/contracts/SafeLiquidationCallback.json +17 -17
  80. package/build/contracts/SafeMath.json +1 -1
  81. package/build/contracts/SignedOperationProxy.json +21 -104
  82. package/build/contracts/SimpleFeeOwner.json +18 -63
  83. package/build/contracts/State.json +9 -9
  84. package/build/contracts/Storage.json +37 -37
  85. package/build/contracts/TestAmmRebalancerProxy.json +32 -58
  86. package/build/contracts/TestAutoTrader.json +22 -22
  87. package/build/contracts/TestBtcUsdChainlinkAggregator.json +10 -10
  88. package/build/contracts/TestCallee.json +19 -19
  89. package/build/contracts/TestChainlinkPriceOracleV1.json +10 -94
  90. package/build/contracts/TestCounter.json +7 -7
  91. package/build/contracts/TestDaiUsdChainlinkAggregator.json +11 -11
  92. package/build/contracts/TestDolomiteMargin.json +22 -22
  93. package/build/contracts/TestDoubleExponentInterestSetter.json +10 -10
  94. package/build/contracts/TestEthUsdChainlinkAggregator.json +11 -11
  95. package/build/contracts/TestExchangeWrapper.json +28 -28
  96. package/build/contracts/TestInterestSetter.json +13 -13
  97. package/build/contracts/TestLib.json +22 -22
  98. package/build/contracts/TestLinkUsdChainlinkAggregator.json +11 -11
  99. package/build/contracts/TestLiquidateCallback.json +719 -719
  100. package/build/contracts/TestLiquidationCallback.json +13 -13
  101. package/build/contracts/TestLrcEthChainlinkAggregator.json +11 -11
  102. package/build/contracts/TestMakerOracle.json +10 -10
  103. package/build/contracts/TestMaticUsdChainlinkAggregator.json +10 -10
  104. package/build/contracts/TestOasisDex.json +12 -12
  105. package/build/contracts/TestOperationImpl.json +14 -14
  106. package/build/contracts/TestPolynomialInterestSetter.json +10 -10
  107. package/build/contracts/TestPriceAggregator.json +9 -9
  108. package/build/contracts/TestPriceOracle.json +13 -13
  109. package/build/contracts/TestRecyclableToken.json +9 -9
  110. package/build/contracts/TestSimpleCallee.json +15 -15
  111. package/build/contracts/TestToken.json +9 -9
  112. package/build/contracts/TestTrader.json +17 -17
  113. package/build/contracts/TestUniswapAmmRebalancerProxy.json +16 -16
  114. package/build/contracts/TestUsdcUsdChainlinkAggregator.json +11 -11
  115. package/build/contracts/TestWETH.json +9 -9
  116. package/build/contracts/Time.json +9 -9
  117. package/build/contracts/Token.json +9 -9
  118. package/build/contracts/TokenA.json +10 -10
  119. package/build/contracts/TokenB.json +10 -10
  120. package/build/contracts/TokenC.json +10 -10
  121. package/build/contracts/TokenD.json +10 -10
  122. package/build/contracts/TokenE.json +10 -10
  123. package/build/contracts/TokenF.json +10 -10
  124. package/build/contracts/TransferProxy.json +22 -28
  125. package/build/contracts/TypedSignature.json +9 -9
  126. package/build/contracts/Types.json +9 -9
  127. package/build/contracts/UQ112x112.json +7 -7
  128. package/build/contracts/UniswapV2ERC20.json +7 -7
  129. package/build/contracts/UniswapV2Factory.json +12 -12
  130. package/build/contracts/UniswapV2Library.json +20 -20
  131. package/build/contracts/UniswapV2Pair.json +17 -17
  132. package/build/contracts/UniswapV2Router02.json +16 -16
  133. package/build/contracts/WETH9.json +1 -1
  134. package/contracts/external/amm/DolomiteAmmERC20.sol +135 -0
  135. package/contracts/external/amm/DolomiteAmmFactory.sol +122 -0
  136. package/contracts/external/amm/DolomiteAmmPair.sol +573 -0
  137. package/contracts/external/amm/SimpleFeeOwner.sol +107 -0
  138. package/contracts/external/helpers/LiquidatorProxyHelper.sol +252 -0
  139. package/contracts/external/helpers/OnlyDolomiteMargin.sol +63 -0
  140. package/contracts/external/interestsetters/DoubleExponentInterestSetter.sol +212 -0
  141. package/contracts/external/interestsetters/PolynomialInterestSetter.sol +205 -0
  142. package/contracts/external/interfaces/IChainlinkAggregator.sol +33 -0
  143. package/contracts/external/interfaces/IDolomiteAmmERC20.sol +52 -0
  144. package/contracts/external/interfaces/IDolomiteAmmFactory.sol +42 -0
  145. package/contracts/external/interfaces/IDolomiteAmmPair.sol +116 -0
  146. package/contracts/external/interfaces/IExpiry.sol +70 -0
  147. package/contracts/external/interfaces/IMakerOracle.sol +52 -0
  148. package/contracts/external/interfaces/IOasisDex.sol +326 -0
  149. package/contracts/external/interfaces/ITransferProxy.sol +53 -0
  150. package/contracts/external/interfaces/IUniswapV2Router.sol +134 -0
  151. package/contracts/external/lib/AdvancedMath.sol +23 -0
  152. package/contracts/external/lib/DolomiteAmmLibrary.sol +323 -0
  153. package/contracts/external/lib/TypedSignature.sol +120 -0
  154. package/contracts/external/lib/UQ112x112.sol +22 -0
  155. package/contracts/external/multisig/DelayedMultiSig.sol +206 -0
  156. package/contracts/external/multisig/MultiSig.sol +571 -0
  157. package/contracts/external/multisig/PartiallyDelayedMultiSig.sol +174 -0
  158. package/contracts/external/oracles/ChainlinkPriceOracleV1.sol +197 -0
  159. package/contracts/external/oracles/TestChainlinkPriceOracleV1.sol +98 -0
  160. package/contracts/external/proxies/AmmRebalancerProxyV1.sol +465 -0
  161. package/contracts/external/proxies/DolomiteAmmRouterProxy.sol +877 -0
  162. package/contracts/external/proxies/LiquidatorProxyV1.sol +507 -0
  163. package/contracts/external/proxies/LiquidatorProxyV1WithAmm.sol +574 -0
  164. package/contracts/external/proxies/PayableProxy.sol +146 -0
  165. package/contracts/external/proxies/RecyclableTokenProxy.sol +463 -0
  166. package/contracts/external/proxies/SignedOperationProxy.sol +553 -0
  167. package/contracts/external/proxies/TransferProxy.sol +207 -0
  168. package/contracts/external/traders/Expiry.sol +532 -0
  169. package/contracts/external/uniswap-v2/UniswapV2ERC20.sol +118 -0
  170. package/contracts/external/uniswap-v2/UniswapV2Factory.sol +67 -0
  171. package/contracts/external/uniswap-v2/UniswapV2Pair.sol +283 -0
  172. package/contracts/external/uniswap-v2/UniswapV2Router02.sol +566 -0
  173. package/contracts/external/uniswap-v2/interfaces/IUniswapV2Callee.sol +13 -0
  174. package/contracts/external/uniswap-v2/interfaces/IUniswapV2Factory.sol +18 -0
  175. package/contracts/external/uniswap-v2/interfaces/IUniswapV2Pair.sol +67 -0
  176. package/contracts/external/uniswap-v2/interfaces/IWETH.sol +7 -0
  177. package/contracts/external/uniswap-v2/libraries/SafeETH.sol +29 -0
  178. package/contracts/external/uniswap-v2/libraries/UniswapV2Library.sol +117 -0
  179. package/contracts/external/utils/MultiCall.sol +95 -0
  180. package/contracts/protocol/impl/artifacts/OperationImpl.json +80 -0
  181. package/contracts/protocol/impl/artifacts/OperationImpl_metadata.json +193 -0
  182. package/dist/build/published_contracts/AdminImpl.json +2 -2
  183. package/dist/build/published_contracts/AmmRebalancerProxyV1.json +5 -0
  184. package/dist/build/published_contracts/ChainlinkPriceOracleV1.json +1 -1
  185. package/dist/build/published_contracts/DolomiteAmmFactory.json +1 -1
  186. package/dist/build/published_contracts/DolomiteAmmRouterProxy.json +1 -1
  187. package/dist/build/published_contracts/DoubleExponentInterestSetter.json +2 -2
  188. package/dist/build/published_contracts/Expiry.json +1 -1
  189. package/dist/build/published_contracts/LiquidatorProxyV1.json +1 -1
  190. package/dist/build/published_contracts/LiquidatorProxyV1WithAmm.json +1 -1
  191. package/dist/build/published_contracts/MultiCall.json +1 -1
  192. package/dist/build/published_contracts/PayableProxy.json +2 -2
  193. package/dist/build/published_contracts/SignedOperationProxy.json +2 -2
  194. package/dist/build/published_contracts/SimpleFeeOwner.json +1 -1
  195. package/dist/build/published_contracts/TestUniswapAmmRebalancerProxy.json +140 -0
  196. package/dist/build/published_contracts/TransferProxy.json +1 -1
  197. package/dist/src/lib/Contracts.d.ts +3 -1
  198. package/dist/src/lib/Contracts.js +7 -3
  199. package/dist/src/lib/Contracts.js.map +1 -1
  200. package/package.json +2 -1
@@ -1155,15 +1155,15 @@
1155
1155
  "type": "function"
1156
1156
  }
1157
1157
  ],
1158
- "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MathGetPartial\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MathGetPartialRoundHalfUp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MathGetPartialRoundUp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"MathTo128\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"MathTo32\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"MathTo96\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"}],\"name\":\"RequireThat0\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"payloadA\",\"type\":\"uint256\"}],\"name\":\"RequireThat1\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"payloadA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payloadB\",\"type\":\"uint256\"}],\"name\":\"RequireThat2\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payloadA\",\"type\":\"address\"}],\"name\":\"RequireThatA0\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payloadA\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payloadB\",\"type\":\"uint256\"}],\"name\":\"RequireThatA1\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payloadA\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payloadB\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payloadC\",\"type\":\"uint256\"}],\"name\":\"RequireThatA2\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"payloadA\",\"type\":\"bytes32\"}],\"name\":\"RequireThatB0\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"payloadA\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"payloadB\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payloadC\",\"type\":\"uint256\"}],\"name\":\"RequireThatB2\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TimeCurrentTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"TokenBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenTransfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signatureWithType\",\"type\":\"bytes\"}],\"name\":\"TypedSignatureRecover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesParAdd\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesParEquals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesParIsNegative\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesParIsPositive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesParIsZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesParNegative\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesParSub\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesWeiAdd\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesWeiEquals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesWeiIsNegative\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesWeiIsPositive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesWeiIsZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesWeiNegative\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesWeiSub\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TypesZeroPar\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TypesZeroWei\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"dYdX * Contract for testing pure library functions\",\"methods\":{},\"title\":\"TestLib\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestLib.sol\":\"TestLib\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol\":{\"keccak256\":\"0x4b4eb5fd2869d6c410948f78163773442c11bc82e393307e41359bbdb21577bf\",\"urls\":[\"bzz-raw://9c9c3abae44173086bc08f5479fbc67151d5905f60e1032ec6f9e40f841f3365\",\"dweb:/ipfs/QmbsQRX3gmcpimjFEW5ULJVavHQtViyg7NSQ2Q8Qcu6F6V\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Math.sol\":{\"keccak256\":\"0x0c0c913b6ccdb69063f9ec84879fcad20a1ee6f44402c9f5ec2b4f5b9f2fa16b\",\"urls\":[\"bzz-raw://89b32eefb57e5e63ad8c6e079ae7bf2d2c8622776cd45af0cf304e1cafd6e078\",\"dweb:/ipfs/Qmcj7yRnYuTgKC3ZqZqe8rynHGYVDS3UrFExcVGcqeaDHY\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0xe641662503ea29ca959e84674188c3e9deaaf64c5623fb9560a4301c521ca1d3\",\"urls\":[\"bzz-raw://b10a04c7d014b99eb792c8c774e203c846d070b30cf0b715325fc07838ed6a6d\",\"dweb:/ipfs/QmUqZWnbchfEY9jM647yQamHe4GzspfUeRQF9k2nn1Hixd\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x233d6ebf965711bf980f4bb2e672fb1a11b4b879fd41c884b3c2b704417d0d0c\",\"urls\":[\"bzz-raw://6478ff81706d531f9438b96274a7b904abbbd9c631540c68c6a89c3accf27abf\",\"dweb:/ipfs/QmWe9vkz3qwVjrcbmcTL8wgkjLPsrEqxcqPJL9ujM8PPbp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0xd7bcae9e3c570544fc946a00cc7695106a64c20bc130d0183612c0410a531d19\",\"urls\":[\"bzz-raw://0ff5ffd6abb9ed223a64128c131afd962bec07fb9867cb62593906b339c76920\",\"dweb:/ipfs/QmbTrJL4bekvBqqaw6wXnBhYzS9uAqULSWF2VzW4cdfsM5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xab134538648a2e223a7fe61db03c14f687657a5d37147f93c9088f11735aa311\",\"urls\":[\"bzz-raw://79dc7d2b30576d2349b99267642ac8d5fb7939c920b8d8045379d3614238bdc3\",\"dweb:/ipfs/QmaQJYg1nirHoWSC6G38Cjsk9pZBzEaNrGXKqTsvAzbyES\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestLib.sol\":{\"keccak256\":\"0xb02ea2fd7a20122f7b1d898e5c9d643dd9a247690b48b5d51eb2f3358bca7152\",\"urls\":[\"bzz-raw://efed4e9d25ef1879cf8f38b8ab10f0a6127c8b5bf9af8ed3581a77cd233a93d0\",\"dweb:/ipfs/QmcBMj5sXXew5E3FoqciJfVNE8jg8v86XG6TwLmeFsXMhm\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
1159
- "bytecode": "0x608060405234801561001057600080fd5b50612aa7806100206000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80637f3a626211610145578063bc0e3880116100bd578063d42adff41161008c578063e50cc20511610071578063e50cc20514610503578063f60fdc7014610516578063fcdac08c1461052957610241565b8063d42adff4146104dd578063dde0973d146104f057610241565b8063bc0e388014610484578063c276f01314610497578063c36148ab146104b7578063d0ed88a3146104ca57610241565b80639cc6742011610114578063a0ea658d116100f9578063a0ea658d1461044b578063ae793bee1461045e578063b474633a1461047157610241565b80639cc6742014610425578063a03ff1bd1461043857610241565b80637f3a6262146103cc57806382678d45146103df57806383b726ca146103ff57806399ad7dc01461041257610241565b806348598965116101d85780635e2ff75f116101a7578063635a214e1161018c578063635a214e146103865780636f466706146103a657806379cfb7d0146103b957610241565b80635e2ff75f146103605780635f7d744c1461037357610241565b806348598965146103075780634f016c951461031a5780635604cbb21461032d5780635853940f1461034057610241565b80632a4e9808116102145780632a4e98081461029f5780632f2617cc146102b257806342d3116e146102d25780634384a0d2146102f257610241565b8063058b2b141461024657806320611e3f1461025b578063223dce9f1461026e57806324b02fce1461028c575b600080fd5b610259610254366004612369565b610531565b005b61025961026936600461213a565b610564565b610276610576565b60405161028391906128ae565b60405180910390f35b61027661029a3660046123b9565b61058b565b6102596102ad3660046122e0565b6105a6565b6102c56102c0366004612100565b6105d5565b60405161028391906128d8565b6102e56102e0366004612313565b61067a565b60405161028391906127e9565b6102fa610576565b60405161028391906128bc565b6102fa610315366004612407565b6106c6565b6102596103283660046122b0565b6106d8565b61025961033b36600461224b565b610709565b61035361034e3660046123e9565b610737565b604051610283919061283a565b61035361036e3660046123e9565b61074a565b6102596103813660046122b0565b610755565b61039961039436600461220e565b610782565b60405161028391906128e6565b6102596103b436600461226c565b61078d565b6102c56103c7366004612369565b6107bc565b6102c56103da366004612369565b6107c9565b6103f26103ed36600461220e565b6107d6565b60405161028391906128f4565b61035361040d36600461239b565b6107e1565b61035361042036600461239b565b6107ec565b610353610433366004612407565b6107f7565b61027661044636600461239b565b610803565b61025961045936600461222c565b610814565b61027661046c3660046123b9565b610841565b61025961047f36600461220e565b610853565b6102fa6104923660046123e9565b610882565b6104aa6104a536600461220e565b610893565b60405161028391906128ca565b6102c56104c5366004612369565b61089e565b6102596104d836600461219b565b6108ab565b6102fa6104eb366004612407565b6108b6565b6103536104fe36600461239b565b6108c8565b6103536105113660046123e9565b6108d3565b6103536105243660046123b9565b6108de565b6103996108ea565b61055f60007f546573744c6962000000000000000000000000000000000000000000000000008585856108f4565b505050565b61057084848484610a26565b50505050565b61057e611fdc565b610586610b3d565b905090565b610593611fdc565b61059d8383610b5d565b90505b92915050565b61057060007f546573744c69620000000000000000000000000000000000000000000000000086868686610b77565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a082319061062a9085906004016127e9565b60206040518083038186803b15801561064257600080fd5b505afa158015610656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061059d9190810190612437565b60006106bc8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6f92505050565b90505b9392505050565b6106ce611fdc565b61059d8383610ebf565b61070560007f546573744c6962000000000000000000000000000000000000000000000000008484610f51565b5050565b61055f60007f546573744c696200000000000000000000000000000000000000000000000000858585610fe9565b60006107428261104b565b90505b919050565b600061074282611062565b61070560007f546573744c696200000000000000000000000000000000000000000000000000848461106a565b6000610742826110cc565b61057060007f546573744c69620000000000000000000000000000000000000000000000000086868686611123565b60006106bc848484611185565b60006106bc8484846111a7565b600061074282611200565b60006107428261125f565b600061074282611279565b600061059d83836112a1565b61080b611fdc565b610742826112dd565b61070560007f546573744c6962000000000000000000000000000000000000000000000000008484611316565b610849611fdc565b61059d8383611378565b61087f60007f546573744c696200000000000000000000000000000000000000000000000000836114a2565b50565b61088a611fdc565b610742826114ec565b600061074282611513565b60006106bc848484611576565b61055f838383611600565b6108be611fdc565b61059d83836116ff565b600061074282611719565b600061074282611742565b600061059d8383611758565b60006105866117b1565b84610a1f57610902846117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061092c856117bc565b7f203c00000000000000000000000000000000000000000000000000000000000061095686611894565b7f2c2000000000000000000000000000000000000000000000000000000000000061098087611894565b6040516109b897969594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016126b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610a169160040161287d565b60405180910390fd5b5050505050565b801580610a5e57508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610a6857610570565b6040516105709085907f23b872dd0000000000000000000000000000000000000000000000000000000090610aa5908790879087906024016127f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601a81526020017f546f6b656e3a207472616e7366657246726f6d206661696c65640000000000008152506119a3565b610b45611fdc565b50604080518082019091526000808252602082015290565b610b65611fdc565b61059d83610b72846112dd565b611378565b85610c6757610b85856117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000610baf866117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610bd987611aa2565b7f2c20000000000000000000000000000000000000000000000000000000000000610c0388611894565b7f2c20000000000000000000000000000000000000000000000000000000000000610c2d89611894565b6040516109b8999897969594939291907f3e000000000000000000000000000000000000000000000000000000000000009060200161272d565b505050505050565b6000610cc060428351147f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265206c656e67746800000000000000006114a2565b602082015160408301516060840151600081901a9060011a610d26600382107f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e61747572652074797065000000000000000000006114a2565b60008160ff166003811115610d3757fe5b9050600080826003811115610d4857fe5b1415610d55575087610e44565b6001826003811115610d6357fe5b1415610dce576040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525089604051602001610db19291906127c7565b604051602081830303815290604052805190602001209050610e44565b6002826003811115610ddc57fe5b14610de357fe5b6040518060400160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a20000000000081525089604051602001610e2b9291906127c7565b6040516020818303038152906040528051906020012090505b60018185888860405160008152602001604052604051610e679493929190612848565b6020604051602081039080840390855afa158015610e89573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519a9950505050505050505050565b610ec7611fdc565b610ecf611fdc565b8251845115159015151415610f025783511515815260208085015190840151610ef89190611c05565b602082015261059d565b8260200151846020015110610f2b5783511515815260208085015190840151610ef89190611c44565b82511515815260208084015190850151610f459190611c44565b60208201529392505050565b8361057057610f5f836117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000610f89846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611894565b6040516109b89594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612653565b84610a1f57610ff7846117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000611021856117bc565b7f203c00000000000000000000000000000000000000000000000000000000000061095686611c86565b805160009015801561074257505060200151151590565b602001511590565b8361057057611078836117bc565b7f3a200000000000000000000000000000000000000000000000000000000000006110a2846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611aa2565b60008161074263ffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743332000000000000000000000084610f51565b85610c6757611131856117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061115b866117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610bd987611c86565b60006106bc8261119b868663ffffffff611dfd16565b9063ffffffff611e5116565b60008315806111b4575082155b156111cb576111c4600083611e51565b90506106bf565b6106bc60016111f48461119b836111e88a8a63ffffffff611dfd16565b9063ffffffff611c4416565b9063ffffffff611c0516565b6000816107426bffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743936000000000000000000000084610f51565b602001516fffffffffffffffffffffffffffffffff161590565b80516000908015610742575050602001516fffffffffffffffffffffffffffffffff16151590565b60008160200151836020015114156112d45760208301516112c4575060016105a0565b50805182511515901515146105a0565b50600092915050565b6112e5611fdc565b506040805180820190915281511581526020808301516fffffffffffffffffffffffffffffffff1690820152919050565b8361057057611324836117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061134e846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611c86565b611380611fdc565b611388611fdc565b82518451151590151514156113eb57835115158152602080850151908401516113cf916113ca916fffffffffffffffffffffffffffffffff9182169116611c05565b611513565b6fffffffffffffffffffffffffffffffff16602082015261059d565b82602001516fffffffffffffffffffffffffffffffff1684602001516fffffffffffffffffffffffffffffffff161061145157835115158152602080850151908401516113cf916113ca916fffffffffffffffffffffffffffffffff9182169116611c44565b82511515815260208084015190850151611484916113ca916fffffffffffffffffffffffffffffffff9182169116611c44565b6fffffffffffffffffffffffffffffffff1660208201529392505050565b8261055f576114b0826117bc565b7f3a200000000000000000000000000000000000000000000000000000000000006114da836117bc565b6040516020016109b89392919061262b565b6114f4611fdc565b5060408051808201909152815115815260208083015190820152919050565b6000816107426fffffffffffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743132380000000000000000000084610f51565b6000831580611583575082155b15611593576111c4600083611e51565b60006115a5858563ffffffff611dfd16565b90506115f76115c460016111f4600261119b888463ffffffff611c4416565b6115d4838663ffffffff611e9316565b10156115e15760006115e4565b60015b60ff166111f4838663ffffffff611e5116565b95945050505050565b801580611622575073ffffffffffffffffffffffffffffffffffffffff821630145b1561162c5761055f565b60405161055f9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090611667908690869060240161281f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601681526020017f546f6b656e3a207472616e73666572206661696c6564000000000000000000008152506119a3565b611707611fdc565b61059d83611714846114ec565b610ebf565b8051600090158015610742575050602001516fffffffffffffffffffffffffffffffff16151590565b8051600090801561074257505060200151151590565b600081602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff1614156112d45760208301516fffffffffffffffffffffffffffffffff166112c4575060016105a0565b6000610586426110cc565b606080826040516020016117d0919061260a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156118795781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061183c57fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156118745760010181529050610745565b611803565b5060408051600080825260208201909252905b509392505050565b6060816118d5575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610745565b8160005b81156118ed57600101600a820491506118d9565b6060816040519080825280601f01601f19166020018201604052801561191a576020820181803883390190505b508593509050815b801561199a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061196057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611922565b50949350505050565b600060608473ffffffffffffffffffffffffffffffffffffffff16846040516119cc919061261f565b6000604051808303816000865af19150503d8060008114611a09576040519150601f19603f3d011682016040523d82523d6000602084013e611a0e565b606091505b5091509150818390611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b50805115610a1f5780806020019051611a6991908101906121e8565b8390610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b6040805160428082526080820190925260609183918391602082018180388339019050509050603060f81b81600081518110611ada57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611b1b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b602081101561188c5760028102611b66600f8516611ed5565b838260410381518110611b7557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611bb7600f8516611ed5565b838260400381518110611bc657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611b4d565b60008282018381101561059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169061288e565b600061059d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef7565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110611cd257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611d1357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b601481101561188c5760028102611d5e600f8516611ed5565b838260290381518110611d6d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611daf600f8516611ed5565b838260280381518110611dbe57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611d45565b600082611e0c575060006105a0565b82820282848281611e1957fe5b041461059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169061289e565b600061059d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f3d565b600061059d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611f8e565b6000600a821015611eed57506030810160f81b610745565b5060570160f81b90565b60008184841115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b505050900390565b60008183611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b506000838581611f8457fe5b0495945050505050565b60008183611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b50828481611fd357fe5b06949350505050565b604080518082019091526000808252602082015290565b80356105a081612a35565b80356105a081612a49565b80516105a081612a49565b80356105a081612a52565b60008083601f84011261203157600080fd5b50813567ffffffffffffffff81111561204957600080fd5b60208301915083600182028301111561206157600080fd5b9250929050565b60006040828403121561207a57600080fd5b6120846040612902565b905060006120928484611ffe565b82525060206120a3848483016120ea565b60208301525092915050565b6000604082840312156120c157600080fd5b6120cb6040612902565b905060006120d98484611ffe565b82525060206120a384848301612014565b80356105a081612a5b565b80516105a081612a52565b6000806040838503121561211357600080fd5b600061211f8585611ff3565b925050602061213085828601611ff3565b9150509250929050565b6000806000806080858703121561215057600080fd5b600061215c8787611ff3565b945050602061216d87828801611ff3565b935050604061217e87828801611ff3565b925050606061218f87828801612014565b91505092959194509250565b6000806000606084860312156121b057600080fd5b60006121bc8686611ff3565b93505060206121cd86828701611ff3565b92505060406121de86828701612014565b9150509250925092565b6000602082840312156121fa57600080fd5b60006122068484612009565b949350505050565b60006020828403121561222057600080fd5b60006122068484612014565b6000806040838503121561223f57600080fd5b600061211f8585612014565b60008060006060848603121561226057600080fd5b60006121bc8686612014565b6000806000806080858703121561228257600080fd5b600061228e8787612014565b945050602061229f87828801611ff3565b935050604061217e87828801612014565b600080604083850312156122c357600080fd5b60006122cf8585612014565b925050602061213085828601612014565b600080600080608085870312156122f657600080fd5b60006123028787612014565b945050602061229f87828801612014565b60008060006040848603121561232857600080fd5b60006123348686612014565b935050602084013567ffffffffffffffff81111561235157600080fd5b61235d8682870161201f565b92509250509250925092565b60008060006060848603121561237e57600080fd5b600061238a8686612014565b93505060206121cd86828701612014565b6000604082840312156123ad57600080fd5b60006122068484612068565b600080608083850312156123cc57600080fd5b60006123d88585612068565b925050604061213085828601612068565b6000604082840312156123fb57600080fd5b600061220684846120af565b6000806080838503121561241a57600080fd5b600061242685856120af565b9250506040612130858286016120af565b60006020828403121561244957600080fd5b600061220684846120f5565b61245e81612936565b82525050565b61245e81612941565b61245e61247982612946565b612990565b61245e6124798261296b565b61245e81612990565b61245e61247982612990565b60006124aa82612929565b6124b48185610745565b93506124c48185602086016129e1565b9290920192915050565b60006124d982612929565b6124e3818561292d565b93506124f38185602086016129e1565b6124fc81612a0d565b9093019392505050565b6000612513601b8361292d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061254c60218361292d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b805160408301906125af8482612464565b50602082015161057060208501826125e6565b805160408301906125d38482612464565b506020820151610570602085018261248a565b61245e81612993565b61245e816129c1565b61245e816129ca565b61245e816129d0565b60006126168284612493565b50602001919050565b60006106bf828461249f565b6000612637828661249f565b9150612643828561247e565b6002820191506115f7828461249f565b600061265f828961249f565b915061266b828861247e565b60028201915061267b828761249f565b9150612687828661247e565b600282019150612697828561249f565b91506126a3828461246d565b506001019695505050505050565b60006126bd828b61249f565b91506126c9828a61247e565b6002820191506126d9828961249f565b91506126e5828861247e565b6002820191506126f5828761249f565b9150612701828661247e565b600282019150612711828561249f565b915061271d828461246d565b5060010198975050505050505050565b6000612739828d61249f565b9150612745828c61247e565b600282019150612755828b61249f565b9150612761828a61247e565b600282019150612771828961249f565b915061277d828861247e565b60028201915061278d828761249f565b9150612799828661247e565b6002820191506127a9828561249f565b91506127b5828461246d565b506001019a9950505050505050505050565b60006127d3828561249f565b91506127df8284612493565b5060200192915050565b602081016105a08284612455565b606081016128058286612455565b6128126020830185612455565b612206604083018461248a565b6040810161282d8285612455565b6106bf602083018461248a565b602081016105a08284612464565b60808101612856828761248a565b61286360208301866125f8565b612870604083018561248a565b6115f7606083018461248a565b6020808252810161059d81846124ce565b6020808252810161074281612506565b602080825281016107428161253f565b604081016105a0828461259e565b604081016105a082846125c2565b602081016105a082846125e6565b602081016105a0828461248a565b602081016105a082846125ef565b602081016105a08284612601565b60405181810167ffffffffffffffff8111828210171561292157600080fd5b604052919050565b5190565b90815260200190565b6000610742826129a8565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b6fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60005b838110156129fc5781810151838201526020016129e4565b838111156105705750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b612a3e81612936565b811461087f57600080fd5b612a3e81612941565b612a3e81612990565b612a3e8161299356fea365627a7a72315820b960f5c28a61d1d7b0e643775a199f040978bc1f9fc7ff7713eb925962bc1ab16c6578706572696d656e74616cf564736f6c63430005100040",
1160
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102415760003560e01c80637f3a626211610145578063bc0e3880116100bd578063d42adff41161008c578063e50cc20511610071578063e50cc20514610503578063f60fdc7014610516578063fcdac08c1461052957610241565b8063d42adff4146104dd578063dde0973d146104f057610241565b8063bc0e388014610484578063c276f01314610497578063c36148ab146104b7578063d0ed88a3146104ca57610241565b80639cc6742011610114578063a0ea658d116100f9578063a0ea658d1461044b578063ae793bee1461045e578063b474633a1461047157610241565b80639cc6742014610425578063a03ff1bd1461043857610241565b80637f3a6262146103cc57806382678d45146103df57806383b726ca146103ff57806399ad7dc01461041257610241565b806348598965116101d85780635e2ff75f116101a7578063635a214e1161018c578063635a214e146103865780636f466706146103a657806379cfb7d0146103b957610241565b80635e2ff75f146103605780635f7d744c1461037357610241565b806348598965146103075780634f016c951461031a5780635604cbb21461032d5780635853940f1461034057610241565b80632a4e9808116102145780632a4e98081461029f5780632f2617cc146102b257806342d3116e146102d25780634384a0d2146102f257610241565b8063058b2b141461024657806320611e3f1461025b578063223dce9f1461026e57806324b02fce1461028c575b600080fd5b610259610254366004612369565b610531565b005b61025961026936600461213a565b610564565b610276610576565b60405161028391906128ae565b60405180910390f35b61027661029a3660046123b9565b61058b565b6102596102ad3660046122e0565b6105a6565b6102c56102c0366004612100565b6105d5565b60405161028391906128d8565b6102e56102e0366004612313565b61067a565b60405161028391906127e9565b6102fa610576565b60405161028391906128bc565b6102fa610315366004612407565b6106c6565b6102596103283660046122b0565b6106d8565b61025961033b36600461224b565b610709565b61035361034e3660046123e9565b610737565b604051610283919061283a565b61035361036e3660046123e9565b61074a565b6102596103813660046122b0565b610755565b61039961039436600461220e565b610782565b60405161028391906128e6565b6102596103b436600461226c565b61078d565b6102c56103c7366004612369565b6107bc565b6102c56103da366004612369565b6107c9565b6103f26103ed36600461220e565b6107d6565b60405161028391906128f4565b61035361040d36600461239b565b6107e1565b61035361042036600461239b565b6107ec565b610353610433366004612407565b6107f7565b61027661044636600461239b565b610803565b61025961045936600461222c565b610814565b61027661046c3660046123b9565b610841565b61025961047f36600461220e565b610853565b6102fa6104923660046123e9565b610882565b6104aa6104a536600461220e565b610893565b60405161028391906128ca565b6102c56104c5366004612369565b61089e565b6102596104d836600461219b565b6108ab565b6102fa6104eb366004612407565b6108b6565b6103536104fe36600461239b565b6108c8565b6103536105113660046123e9565b6108d3565b6103536105243660046123b9565b6108de565b6103996108ea565b61055f60007f546573744c6962000000000000000000000000000000000000000000000000008585856108f4565b505050565b61057084848484610a26565b50505050565b61057e611fdc565b610586610b3d565b905090565b610593611fdc565b61059d8383610b5d565b90505b92915050565b61057060007f546573744c69620000000000000000000000000000000000000000000000000086868686610b77565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a082319061062a9085906004016127e9565b60206040518083038186803b15801561064257600080fd5b505afa158015610656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061059d9190810190612437565b60006106bc8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6f92505050565b90505b9392505050565b6106ce611fdc565b61059d8383610ebf565b61070560007f546573744c6962000000000000000000000000000000000000000000000000008484610f51565b5050565b61055f60007f546573744c696200000000000000000000000000000000000000000000000000858585610fe9565b60006107428261104b565b90505b919050565b600061074282611062565b61070560007f546573744c696200000000000000000000000000000000000000000000000000848461106a565b6000610742826110cc565b61057060007f546573744c69620000000000000000000000000000000000000000000000000086868686611123565b60006106bc848484611185565b60006106bc8484846111a7565b600061074282611200565b60006107428261125f565b600061074282611279565b600061059d83836112a1565b61080b611fdc565b610742826112dd565b61070560007f546573744c6962000000000000000000000000000000000000000000000000008484611316565b610849611fdc565b61059d8383611378565b61087f60007f546573744c696200000000000000000000000000000000000000000000000000836114a2565b50565b61088a611fdc565b610742826114ec565b600061074282611513565b60006106bc848484611576565b61055f838383611600565b6108be611fdc565b61059d83836116ff565b600061074282611719565b600061074282611742565b600061059d8383611758565b60006105866117b1565b84610a1f57610902846117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061092c856117bc565b7f203c00000000000000000000000000000000000000000000000000000000000061095686611894565b7f2c2000000000000000000000000000000000000000000000000000000000000061098087611894565b6040516109b897969594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016126b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610a169160040161287d565b60405180910390fd5b5050505050565b801580610a5e57508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610a6857610570565b6040516105709085907f23b872dd0000000000000000000000000000000000000000000000000000000090610aa5908790879087906024016127f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601a81526020017f546f6b656e3a207472616e7366657246726f6d206661696c65640000000000008152506119a3565b610b45611fdc565b50604080518082019091526000808252602082015290565b610b65611fdc565b61059d83610b72846112dd565b611378565b85610c6757610b85856117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000610baf866117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610bd987611aa2565b7f2c20000000000000000000000000000000000000000000000000000000000000610c0388611894565b7f2c20000000000000000000000000000000000000000000000000000000000000610c2d89611894565b6040516109b8999897969594939291907f3e000000000000000000000000000000000000000000000000000000000000009060200161272d565b505050505050565b6000610cc060428351147f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265206c656e67746800000000000000006114a2565b602082015160408301516060840151600081901a9060011a610d26600382107f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e61747572652074797065000000000000000000006114a2565b60008160ff166003811115610d3757fe5b9050600080826003811115610d4857fe5b1415610d55575087610e44565b6001826003811115610d6357fe5b1415610dce576040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525089604051602001610db19291906127c7565b604051602081830303815290604052805190602001209050610e44565b6002826003811115610ddc57fe5b14610de357fe5b6040518060400160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a20000000000081525089604051602001610e2b9291906127c7565b6040516020818303038152906040528051906020012090505b60018185888860405160008152602001604052604051610e679493929190612848565b6020604051602081039080840390855afa158015610e89573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519a9950505050505050505050565b610ec7611fdc565b610ecf611fdc565b8251845115159015151415610f025783511515815260208085015190840151610ef89190611c05565b602082015261059d565b8260200151846020015110610f2b5783511515815260208085015190840151610ef89190611c44565b82511515815260208084015190850151610f459190611c44565b60208201529392505050565b8361057057610f5f836117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000610f89846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611894565b6040516109b89594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612653565b84610a1f57610ff7846117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000611021856117bc565b7f203c00000000000000000000000000000000000000000000000000000000000061095686611c86565b805160009015801561074257505060200151151590565b602001511590565b8361057057611078836117bc565b7f3a200000000000000000000000000000000000000000000000000000000000006110a2846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611aa2565b60008161074263ffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743332000000000000000000000084610f51565b85610c6757611131856117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061115b866117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610bd987611c86565b60006106bc8261119b868663ffffffff611dfd16565b9063ffffffff611e5116565b60008315806111b4575082155b156111cb576111c4600083611e51565b90506106bf565b6106bc60016111f48461119b836111e88a8a63ffffffff611dfd16565b9063ffffffff611c4416565b9063ffffffff611c0516565b6000816107426bffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743936000000000000000000000084610f51565b602001516fffffffffffffffffffffffffffffffff161590565b80516000908015610742575050602001516fffffffffffffffffffffffffffffffff16151590565b60008160200151836020015114156112d45760208301516112c4575060016105a0565b50805182511515901515146105a0565b50600092915050565b6112e5611fdc565b506040805180820190915281511581526020808301516fffffffffffffffffffffffffffffffff1690820152919050565b8361057057611324836117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061134e846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611c86565b611380611fdc565b611388611fdc565b82518451151590151514156113eb57835115158152602080850151908401516113cf916113ca916fffffffffffffffffffffffffffffffff9182169116611c05565b611513565b6fffffffffffffffffffffffffffffffff16602082015261059d565b82602001516fffffffffffffffffffffffffffffffff1684602001516fffffffffffffffffffffffffffffffff161061145157835115158152602080850151908401516113cf916113ca916fffffffffffffffffffffffffffffffff9182169116611c44565b82511515815260208084015190850151611484916113ca916fffffffffffffffffffffffffffffffff9182169116611c44565b6fffffffffffffffffffffffffffffffff1660208201529392505050565b8261055f576114b0826117bc565b7f3a200000000000000000000000000000000000000000000000000000000000006114da836117bc565b6040516020016109b89392919061262b565b6114f4611fdc565b5060408051808201909152815115815260208083015190820152919050565b6000816107426fffffffffffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743132380000000000000000000084610f51565b6000831580611583575082155b15611593576111c4600083611e51565b60006115a5858563ffffffff611dfd16565b90506115f76115c460016111f4600261119b888463ffffffff611c4416565b6115d4838663ffffffff611e9316565b10156115e15760006115e4565b60015b60ff166111f4838663ffffffff611e5116565b95945050505050565b801580611622575073ffffffffffffffffffffffffffffffffffffffff821630145b1561162c5761055f565b60405161055f9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090611667908690869060240161281f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601681526020017f546f6b656e3a207472616e73666572206661696c6564000000000000000000008152506119a3565b611707611fdc565b61059d83611714846114ec565b610ebf565b8051600090158015610742575050602001516fffffffffffffffffffffffffffffffff16151590565b8051600090801561074257505060200151151590565b600081602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff1614156112d45760208301516fffffffffffffffffffffffffffffffff166112c4575060016105a0565b6000610586426110cc565b606080826040516020016117d0919061260a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156118795781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061183c57fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156118745760010181529050610745565b611803565b5060408051600080825260208201909252905b509392505050565b6060816118d5575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610745565b8160005b81156118ed57600101600a820491506118d9565b6060816040519080825280601f01601f19166020018201604052801561191a576020820181803883390190505b508593509050815b801561199a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061196057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611922565b50949350505050565b600060608473ffffffffffffffffffffffffffffffffffffffff16846040516119cc919061261f565b6000604051808303816000865af19150503d8060008114611a09576040519150601f19603f3d011682016040523d82523d6000602084013e611a0e565b606091505b5091509150818390611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b50805115610a1f5780806020019051611a6991908101906121e8565b8390610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b6040805160428082526080820190925260609183918391602082018180388339019050509050603060f81b81600081518110611ada57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611b1b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b602081101561188c5760028102611b66600f8516611ed5565b838260410381518110611b7557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611bb7600f8516611ed5565b838260400381518110611bc657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611b4d565b60008282018381101561059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169061288e565b600061059d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef7565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110611cd257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611d1357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b601481101561188c5760028102611d5e600f8516611ed5565b838260290381518110611d6d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611daf600f8516611ed5565b838260280381518110611dbe57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611d45565b600082611e0c575060006105a0565b82820282848281611e1957fe5b041461059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169061289e565b600061059d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f3d565b600061059d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611f8e565b6000600a821015611eed57506030810160f81b610745565b5060570160f81b90565b60008184841115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b505050900390565b60008183611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b506000838581611f8457fe5b0495945050505050565b60008183611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b50828481611fd357fe5b06949350505050565b604080518082019091526000808252602082015290565b80356105a081612a35565b80356105a081612a49565b80516105a081612a49565b80356105a081612a52565b60008083601f84011261203157600080fd5b50813567ffffffffffffffff81111561204957600080fd5b60208301915083600182028301111561206157600080fd5b9250929050565b60006040828403121561207a57600080fd5b6120846040612902565b905060006120928484611ffe565b82525060206120a3848483016120ea565b60208301525092915050565b6000604082840312156120c157600080fd5b6120cb6040612902565b905060006120d98484611ffe565b82525060206120a384848301612014565b80356105a081612a5b565b80516105a081612a52565b6000806040838503121561211357600080fd5b600061211f8585611ff3565b925050602061213085828601611ff3565b9150509250929050565b6000806000806080858703121561215057600080fd5b600061215c8787611ff3565b945050602061216d87828801611ff3565b935050604061217e87828801611ff3565b925050606061218f87828801612014565b91505092959194509250565b6000806000606084860312156121b057600080fd5b60006121bc8686611ff3565b93505060206121cd86828701611ff3565b92505060406121de86828701612014565b9150509250925092565b6000602082840312156121fa57600080fd5b60006122068484612009565b949350505050565b60006020828403121561222057600080fd5b60006122068484612014565b6000806040838503121561223f57600080fd5b600061211f8585612014565b60008060006060848603121561226057600080fd5b60006121bc8686612014565b6000806000806080858703121561228257600080fd5b600061228e8787612014565b945050602061229f87828801611ff3565b935050604061217e87828801612014565b600080604083850312156122c357600080fd5b60006122cf8585612014565b925050602061213085828601612014565b600080600080608085870312156122f657600080fd5b60006123028787612014565b945050602061229f87828801612014565b60008060006040848603121561232857600080fd5b60006123348686612014565b935050602084013567ffffffffffffffff81111561235157600080fd5b61235d8682870161201f565b92509250509250925092565b60008060006060848603121561237e57600080fd5b600061238a8686612014565b93505060206121cd86828701612014565b6000604082840312156123ad57600080fd5b60006122068484612068565b600080608083850312156123cc57600080fd5b60006123d88585612068565b925050604061213085828601612068565b6000604082840312156123fb57600080fd5b600061220684846120af565b6000806080838503121561241a57600080fd5b600061242685856120af565b9250506040612130858286016120af565b60006020828403121561244957600080fd5b600061220684846120f5565b61245e81612936565b82525050565b61245e81612941565b61245e61247982612946565b612990565b61245e6124798261296b565b61245e81612990565b61245e61247982612990565b60006124aa82612929565b6124b48185610745565b93506124c48185602086016129e1565b9290920192915050565b60006124d982612929565b6124e3818561292d565b93506124f38185602086016129e1565b6124fc81612a0d565b9093019392505050565b6000612513601b8361292d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061254c60218361292d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b805160408301906125af8482612464565b50602082015161057060208501826125e6565b805160408301906125d38482612464565b506020820151610570602085018261248a565b61245e81612993565b61245e816129c1565b61245e816129ca565b61245e816129d0565b60006126168284612493565b50602001919050565b60006106bf828461249f565b6000612637828661249f565b9150612643828561247e565b6002820191506115f7828461249f565b600061265f828961249f565b915061266b828861247e565b60028201915061267b828761249f565b9150612687828661247e565b600282019150612697828561249f565b91506126a3828461246d565b506001019695505050505050565b60006126bd828b61249f565b91506126c9828a61247e565b6002820191506126d9828961249f565b91506126e5828861247e565b6002820191506126f5828761249f565b9150612701828661247e565b600282019150612711828561249f565b915061271d828461246d565b5060010198975050505050505050565b6000612739828d61249f565b9150612745828c61247e565b600282019150612755828b61249f565b9150612761828a61247e565b600282019150612771828961249f565b915061277d828861247e565b60028201915061278d828761249f565b9150612799828661247e565b6002820191506127a9828561249f565b91506127b5828461246d565b506001019a9950505050505050505050565b60006127d3828561249f565b91506127df8284612493565b5060200192915050565b602081016105a08284612455565b606081016128058286612455565b6128126020830185612455565b612206604083018461248a565b6040810161282d8285612455565b6106bf602083018461248a565b602081016105a08284612464565b60808101612856828761248a565b61286360208301866125f8565b612870604083018561248a565b6115f7606083018461248a565b6020808252810161059d81846124ce565b6020808252810161074281612506565b602080825281016107428161253f565b604081016105a0828461259e565b604081016105a082846125c2565b602081016105a082846125e6565b602081016105a0828461248a565b602081016105a082846125ef565b602081016105a08284612601565b60405181810167ffffffffffffffff8111828210171561292157600080fd5b604052919050565b5190565b90815260200190565b6000610742826129a8565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b6fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60005b838110156129fc5781810151838201526020016129e4565b838111156105705750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b612a3e81612936565b811461087f57600080fd5b612a3e81612941565b612a3e81612990565b612a3e8161299356fea365627a7a72315820b960f5c28a61d1d7b0e643775a199f040978bc1f9fc7ff7713eb925962bc1ab16c6578706572696d656e74616cf564736f6c63430005100040",
1158
+ "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MathGetPartial\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MathGetPartialRoundHalfUp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"MathGetPartialRoundUp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"MathTo128\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"MathTo32\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"MathTo96\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"}],\"name\":\"RequireThat0\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"payloadA\",\"type\":\"uint256\"}],\"name\":\"RequireThat1\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"payloadA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payloadB\",\"type\":\"uint256\"}],\"name\":\"RequireThat2\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payloadA\",\"type\":\"address\"}],\"name\":\"RequireThatA0\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payloadA\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payloadB\",\"type\":\"uint256\"}],\"name\":\"RequireThatA1\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"payloadA\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payloadB\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payloadC\",\"type\":\"uint256\"}],\"name\":\"RequireThatA2\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"payloadA\",\"type\":\"bytes32\"}],\"name\":\"RequireThatB0\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"reason\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"payloadA\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"payloadB\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payloadC\",\"type\":\"uint256\"}],\"name\":\"RequireThatB2\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TimeCurrentTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"TokenBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenTransfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signatureWithType\",\"type\":\"bytes\"}],\"name\":\"TypedSignatureRecover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesParAdd\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesParEquals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesParIsNegative\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesParIsPositive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesParIsZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesParNegative\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesParSub\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesWeiAdd\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesWeiEquals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesWeiIsNegative\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesWeiIsPositive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesWeiIsZero\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"TypesWeiNegative\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"b\",\"type\":\"tuple\"}],\"name\":\"TypesWeiSub\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TypesZeroPar\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TypesZeroWei\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"dYdX * Contract for testing pure library functions\",\"methods\":{},\"title\":\"TestLib\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/testing/TestLib.sol\":\"TestLib\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol\":{\"keccak256\":\"0x4b4eb5fd2869d6c410948f78163773442c11bc82e393307e41359bbdb21577bf\",\"urls\":[\"bzz-raw://9c9c3abae44173086bc08f5479fbc67151d5905f60e1032ec6f9e40f841f3365\",\"dweb:/ipfs/QmbsQRX3gmcpimjFEW5ULJVavHQtViyg7NSQ2Q8Qcu6F6V\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Math.sol\":{\"keccak256\":\"0x0c0c913b6ccdb69063f9ec84879fcad20a1ee6f44402c9f5ec2b4f5b9f2fa16b\",\"urls\":[\"bzz-raw://89b32eefb57e5e63ad8c6e079ae7bf2d2c8622776cd45af0cf304e1cafd6e078\",\"dweb:/ipfs/Qmcj7yRnYuTgKC3ZqZqe8rynHGYVDS3UrFExcVGcqeaDHY\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0xe641662503ea29ca959e84674188c3e9deaaf64c5623fb9560a4301c521ca1d3\",\"urls\":[\"bzz-raw://b10a04c7d014b99eb792c8c774e203c846d070b30cf0b715325fc07838ed6a6d\",\"dweb:/ipfs/QmUqZWnbchfEY9jM647yQamHe4GzspfUeRQF9k2nn1Hixd\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x233d6ebf965711bf980f4bb2e672fb1a11b4b879fd41c884b3c2b704417d0d0c\",\"urls\":[\"bzz-raw://6478ff81706d531f9438b96274a7b904abbbd9c631540c68c6a89c3accf27abf\",\"dweb:/ipfs/QmWe9vkz3qwVjrcbmcTL8wgkjLPsrEqxcqPJL9ujM8PPbp\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0xd7bcae9e3c570544fc946a00cc7695106a64c20bc130d0183612c0410a531d19\",\"urls\":[\"bzz-raw://0ff5ffd6abb9ed223a64128c131afd962bec07fb9867cb62593906b339c76920\",\"dweb:/ipfs/QmbTrJL4bekvBqqaw6wXnBhYzS9uAqULSWF2VzW4cdfsM5\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xab134538648a2e223a7fe61db03c14f687657a5d37147f93c9088f11735aa311\",\"urls\":[\"bzz-raw://79dc7d2b30576d2349b99267642ac8d5fb7939c920b8d8045379d3614238bdc3\",\"dweb:/ipfs/QmaQJYg1nirHoWSC6G38Cjsk9pZBzEaNrGXKqTsvAzbyES\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/testing/TestLib.sol\":{\"keccak256\":\"0xb02ea2fd7a20122f7b1d898e5c9d643dd9a247690b48b5d51eb2f3358bca7152\",\"urls\":[\"bzz-raw://efed4e9d25ef1879cf8f38b8ab10f0a6127c8b5bf9af8ed3581a77cd233a93d0\",\"dweb:/ipfs/QmcBMj5sXXew5E3FoqciJfVNE8jg8v86XG6TwLmeFsXMhm\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
1159
+ "bytecode": "0x608060405234801561001057600080fd5b50612aa7806100206000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80637f3a626211610145578063bc0e3880116100bd578063d42adff41161008c578063e50cc20511610071578063e50cc20514610503578063f60fdc7014610516578063fcdac08c1461052957610241565b8063d42adff4146104dd578063dde0973d146104f057610241565b8063bc0e388014610484578063c276f01314610497578063c36148ab146104b7578063d0ed88a3146104ca57610241565b80639cc6742011610114578063a0ea658d116100f9578063a0ea658d1461044b578063ae793bee1461045e578063b474633a1461047157610241565b80639cc6742014610425578063a03ff1bd1461043857610241565b80637f3a6262146103cc57806382678d45146103df57806383b726ca146103ff57806399ad7dc01461041257610241565b806348598965116101d85780635e2ff75f116101a7578063635a214e1161018c578063635a214e146103865780636f466706146103a657806379cfb7d0146103b957610241565b80635e2ff75f146103605780635f7d744c1461037357610241565b806348598965146103075780634f016c951461031a5780635604cbb21461032d5780635853940f1461034057610241565b80632a4e9808116102145780632a4e98081461029f5780632f2617cc146102b257806342d3116e146102d25780634384a0d2146102f257610241565b8063058b2b141461024657806320611e3f1461025b578063223dce9f1461026e57806324b02fce1461028c575b600080fd5b610259610254366004612369565b610531565b005b61025961026936600461213a565b610564565b610276610576565b60405161028391906128ae565b60405180910390f35b61027661029a3660046123b9565b61058b565b6102596102ad3660046122e0565b6105a6565b6102c56102c0366004612100565b6105d5565b60405161028391906128d8565b6102e56102e0366004612313565b61067a565b60405161028391906127e9565b6102fa610576565b60405161028391906128bc565b6102fa610315366004612407565b6106c6565b6102596103283660046122b0565b6106d8565b61025961033b36600461224b565b610709565b61035361034e3660046123e9565b610737565b604051610283919061283a565b61035361036e3660046123e9565b61074a565b6102596103813660046122b0565b610755565b61039961039436600461220e565b610782565b60405161028391906128e6565b6102596103b436600461226c565b61078d565b6102c56103c7366004612369565b6107bc565b6102c56103da366004612369565b6107c9565b6103f26103ed36600461220e565b6107d6565b60405161028391906128f4565b61035361040d36600461239b565b6107e1565b61035361042036600461239b565b6107ec565b610353610433366004612407565b6107f7565b61027661044636600461239b565b610803565b61025961045936600461222c565b610814565b61027661046c3660046123b9565b610841565b61025961047f36600461220e565b610853565b6102fa6104923660046123e9565b610882565b6104aa6104a536600461220e565b610893565b60405161028391906128ca565b6102c56104c5366004612369565b61089e565b6102596104d836600461219b565b6108ab565b6102fa6104eb366004612407565b6108b6565b6103536104fe36600461239b565b6108c8565b6103536105113660046123e9565b6108d3565b6103536105243660046123b9565b6108de565b6103996108ea565b61055f60007f546573744c6962000000000000000000000000000000000000000000000000008585856108f4565b505050565b61057084848484610a26565b50505050565b61057e611fdc565b610586610b3d565b905090565b610593611fdc565b61059d8383610b5d565b90505b92915050565b61057060007f546573744c69620000000000000000000000000000000000000000000000000086868686610b77565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a082319061062a9085906004016127e9565b60206040518083038186803b15801561064257600080fd5b505afa158015610656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061059d9190810190612437565b60006106bc8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6f92505050565b90505b9392505050565b6106ce611fdc565b61059d8383610ebf565b61070560007f546573744c6962000000000000000000000000000000000000000000000000008484610f51565b5050565b61055f60007f546573744c696200000000000000000000000000000000000000000000000000858585610fe9565b60006107428261104b565b90505b919050565b600061074282611062565b61070560007f546573744c696200000000000000000000000000000000000000000000000000848461106a565b6000610742826110cc565b61057060007f546573744c69620000000000000000000000000000000000000000000000000086868686611123565b60006106bc848484611185565b60006106bc8484846111a7565b600061074282611200565b60006107428261125f565b600061074282611279565b600061059d83836112a1565b61080b611fdc565b610742826112dd565b61070560007f546573744c6962000000000000000000000000000000000000000000000000008484611316565b610849611fdc565b61059d8383611378565b61087f60007f546573744c696200000000000000000000000000000000000000000000000000836114a2565b50565b61088a611fdc565b610742826114ec565b600061074282611513565b60006106bc848484611576565b61055f838383611600565b6108be611fdc565b61059d83836116ff565b600061074282611719565b600061074282611742565b600061059d8383611758565b60006105866117b1565b84610a1f57610902846117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061092c856117bc565b7f203c00000000000000000000000000000000000000000000000000000000000061095686611894565b7f2c2000000000000000000000000000000000000000000000000000000000000061098087611894565b6040516109b897969594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016126b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610a169160040161287d565b60405180910390fd5b5050505050565b801580610a5e57508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610a6857610570565b6040516105709085907f23b872dd0000000000000000000000000000000000000000000000000000000090610aa5908790879087906024016127f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601a81526020017f546f6b656e3a207472616e7366657246726f6d206661696c65640000000000008152506119a3565b610b45611fdc565b50604080518082019091526000808252602082015290565b610b65611fdc565b61059d83610b72846112dd565b611378565b85610c6757610b85856117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000610baf866117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610bd987611aa2565b7f2c20000000000000000000000000000000000000000000000000000000000000610c0388611894565b7f2c20000000000000000000000000000000000000000000000000000000000000610c2d89611894565b6040516109b8999897969594939291907f3e000000000000000000000000000000000000000000000000000000000000009060200161272d565b505050505050565b6000610cc060428351147f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265206c656e67746800000000000000006114a2565b602082015160408301516060840151600081901a9060011a610d26600382107f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e61747572652074797065000000000000000000006114a2565b60008160ff166003811115610d3757fe5b9050600080826003811115610d4857fe5b1415610d55575087610e44565b6001826003811115610d6357fe5b1415610dce576040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525089604051602001610db19291906127c7565b604051602081830303815290604052805190602001209050610e44565b6002826003811115610ddc57fe5b14610de357fe5b6040518060400160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a20000000000081525089604051602001610e2b9291906127c7565b6040516020818303038152906040528051906020012090505b60018185888860405160008152602001604052604051610e679493929190612848565b6020604051602081039080840390855afa158015610e89573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519a9950505050505050505050565b610ec7611fdc565b610ecf611fdc565b8251845115159015151415610f025783511515815260208085015190840151610ef89190611c05565b602082015261059d565b8260200151846020015110610f2b5783511515815260208085015190840151610ef89190611c44565b82511515815260208084015190850151610f459190611c44565b60208201529392505050565b8361057057610f5f836117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000610f89846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611894565b6040516109b89594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612653565b84610a1f57610ff7846117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000611021856117bc565b7f203c00000000000000000000000000000000000000000000000000000000000061095686611c86565b805160009015801561074257505060200151151590565b602001511590565b8361057057611078836117bc565b7f3a200000000000000000000000000000000000000000000000000000000000006110a2846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611aa2565b60008161074263ffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743332000000000000000000000084610f51565b85610c6757611131856117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061115b866117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610bd987611c86565b60006106bc8261119b868663ffffffff611dfd16565b9063ffffffff611e5116565b60008315806111b4575082155b156111cb576111c4600083611e51565b90506106bf565b6106bc60016111f48461119b836111e88a8a63ffffffff611dfd16565b9063ffffffff611c4416565b9063ffffffff611c0516565b6000816107426bffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743936000000000000000000000084610f51565b602001516fffffffffffffffffffffffffffffffff161590565b80516000908015610742575050602001516fffffffffffffffffffffffffffffffff16151590565b60008160200151836020015114156112d45760208301516112c4575060016105a0565b50805182511515901515146105a0565b50600092915050565b6112e5611fdc565b506040805180820190915281511581526020808301516fffffffffffffffffffffffffffffffff1690820152919050565b8361057057611324836117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061134e846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611c86565b611380611fdc565b611388611fdc565b82518451151590151514156113eb57835115158152602080850151908401516113cf916113ca916fffffffffffffffffffffffffffffffff9182169116611c05565b611513565b6fffffffffffffffffffffffffffffffff16602082015261059d565b82602001516fffffffffffffffffffffffffffffffff1684602001516fffffffffffffffffffffffffffffffff161061145157835115158152602080850151908401516113cf916113ca916fffffffffffffffffffffffffffffffff9182169116611c44565b82511515815260208084015190850151611484916113ca916fffffffffffffffffffffffffffffffff9182169116611c44565b6fffffffffffffffffffffffffffffffff1660208201529392505050565b8261055f576114b0826117bc565b7f3a200000000000000000000000000000000000000000000000000000000000006114da836117bc565b6040516020016109b89392919061262b565b6114f4611fdc565b5060408051808201909152815115815260208083015190820152919050565b6000816107426fffffffffffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743132380000000000000000000084610f51565b6000831580611583575082155b15611593576111c4600083611e51565b60006115a5858563ffffffff611dfd16565b90506115f76115c460016111f4600261119b888463ffffffff611c4416565b6115d4838663ffffffff611e9316565b10156115e15760006115e4565b60015b60ff166111f4838663ffffffff611e5116565b95945050505050565b801580611622575073ffffffffffffffffffffffffffffffffffffffff821630145b1561162c5761055f565b60405161055f9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090611667908690869060240161281f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601681526020017f546f6b656e3a207472616e73666572206661696c6564000000000000000000008152506119a3565b611707611fdc565b61059d83611714846114ec565b610ebf565b8051600090158015610742575050602001516fffffffffffffffffffffffffffffffff16151590565b8051600090801561074257505060200151151590565b600081602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff1614156112d45760208301516fffffffffffffffffffffffffffffffff166112c4575060016105a0565b6000610586426110cc565b606080826040516020016117d0919061260a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156118795781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061183c57fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156118745760010181529050610745565b611803565b5060408051600080825260208201909252905b509392505050565b6060816118d5575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610745565b8160005b81156118ed57600101600a820491506118d9565b6060816040519080825280601f01601f19166020018201604052801561191a576020820181803883390190505b508593509050815b801561199a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061196057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611922565b50949350505050565b600060608473ffffffffffffffffffffffffffffffffffffffff16846040516119cc919061261f565b6000604051808303816000865af19150503d8060008114611a09576040519150601f19603f3d011682016040523d82523d6000602084013e611a0e565b606091505b5091509150818390611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b50805115610a1f5780806020019051611a6991908101906121e8565b8390610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b6040805160428082526080820190925260609183918391602082018180388339019050509050603060f81b81600081518110611ada57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611b1b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b602081101561188c5760028102611b66600f8516611ed5565b838260410381518110611b7557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611bb7600f8516611ed5565b838260400381518110611bc657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611b4d565b60008282018381101561059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169061288e565b600061059d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef7565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110611cd257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611d1357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b601481101561188c5760028102611d5e600f8516611ed5565b838260290381518110611d6d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611daf600f8516611ed5565b838260280381518110611dbe57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611d45565b600082611e0c575060006105a0565b82820282848281611e1957fe5b041461059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169061289e565b600061059d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f3d565b600061059d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611f8e565b6000600a821015611eed57506030810160f81b610745565b5060570160f81b90565b60008184841115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b505050900390565b60008183611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b506000838581611f8457fe5b0495945050505050565b60008183611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b50828481611fd357fe5b06949350505050565b604080518082019091526000808252602082015290565b80356105a081612a35565b80356105a081612a49565b80516105a081612a49565b80356105a081612a52565b60008083601f84011261203157600080fd5b50813567ffffffffffffffff81111561204957600080fd5b60208301915083600182028301111561206157600080fd5b9250929050565b60006040828403121561207a57600080fd5b6120846040612902565b905060006120928484611ffe565b82525060206120a3848483016120ea565b60208301525092915050565b6000604082840312156120c157600080fd5b6120cb6040612902565b905060006120d98484611ffe565b82525060206120a384848301612014565b80356105a081612a5b565b80516105a081612a52565b6000806040838503121561211357600080fd5b600061211f8585611ff3565b925050602061213085828601611ff3565b9150509250929050565b6000806000806080858703121561215057600080fd5b600061215c8787611ff3565b945050602061216d87828801611ff3565b935050604061217e87828801611ff3565b925050606061218f87828801612014565b91505092959194509250565b6000806000606084860312156121b057600080fd5b60006121bc8686611ff3565b93505060206121cd86828701611ff3565b92505060406121de86828701612014565b9150509250925092565b6000602082840312156121fa57600080fd5b60006122068484612009565b949350505050565b60006020828403121561222057600080fd5b60006122068484612014565b6000806040838503121561223f57600080fd5b600061211f8585612014565b60008060006060848603121561226057600080fd5b60006121bc8686612014565b6000806000806080858703121561228257600080fd5b600061228e8787612014565b945050602061229f87828801611ff3565b935050604061217e87828801612014565b600080604083850312156122c357600080fd5b60006122cf8585612014565b925050602061213085828601612014565b600080600080608085870312156122f657600080fd5b60006123028787612014565b945050602061229f87828801612014565b60008060006040848603121561232857600080fd5b60006123348686612014565b935050602084013567ffffffffffffffff81111561235157600080fd5b61235d8682870161201f565b92509250509250925092565b60008060006060848603121561237e57600080fd5b600061238a8686612014565b93505060206121cd86828701612014565b6000604082840312156123ad57600080fd5b60006122068484612068565b600080608083850312156123cc57600080fd5b60006123d88585612068565b925050604061213085828601612068565b6000604082840312156123fb57600080fd5b600061220684846120af565b6000806080838503121561241a57600080fd5b600061242685856120af565b9250506040612130858286016120af565b60006020828403121561244957600080fd5b600061220684846120f5565b61245e81612936565b82525050565b61245e81612941565b61245e61247982612946565b612990565b61245e6124798261296b565b61245e81612990565b61245e61247982612990565b60006124aa82612929565b6124b48185610745565b93506124c48185602086016129e1565b9290920192915050565b60006124d982612929565b6124e3818561292d565b93506124f38185602086016129e1565b6124fc81612a0d565b9093019392505050565b6000612513601b8361292d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061254c60218361292d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b805160408301906125af8482612464565b50602082015161057060208501826125e6565b805160408301906125d38482612464565b506020820151610570602085018261248a565b61245e81612993565b61245e816129c1565b61245e816129ca565b61245e816129d0565b60006126168284612493565b50602001919050565b60006106bf828461249f565b6000612637828661249f565b9150612643828561247e565b6002820191506115f7828461249f565b600061265f828961249f565b915061266b828861247e565b60028201915061267b828761249f565b9150612687828661247e565b600282019150612697828561249f565b91506126a3828461246d565b506001019695505050505050565b60006126bd828b61249f565b91506126c9828a61247e565b6002820191506126d9828961249f565b91506126e5828861247e565b6002820191506126f5828761249f565b9150612701828661247e565b600282019150612711828561249f565b915061271d828461246d565b5060010198975050505050505050565b6000612739828d61249f565b9150612745828c61247e565b600282019150612755828b61249f565b9150612761828a61247e565b600282019150612771828961249f565b915061277d828861247e565b60028201915061278d828761249f565b9150612799828661247e565b6002820191506127a9828561249f565b91506127b5828461246d565b506001019a9950505050505050505050565b60006127d3828561249f565b91506127df8284612493565b5060200192915050565b602081016105a08284612455565b606081016128058286612455565b6128126020830185612455565b612206604083018461248a565b6040810161282d8285612455565b6106bf602083018461248a565b602081016105a08284612464565b60808101612856828761248a565b61286360208301866125f8565b612870604083018561248a565b6115f7606083018461248a565b6020808252810161059d81846124ce565b6020808252810161074281612506565b602080825281016107428161253f565b604081016105a0828461259e565b604081016105a082846125c2565b602081016105a082846125e6565b602081016105a0828461248a565b602081016105a082846125ef565b602081016105a08284612601565b60405181810167ffffffffffffffff8111828210171561292157600080fd5b604052919050565b5190565b90815260200190565b6000610742826129a8565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b6fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60005b838110156129fc5781810151838201526020016129e4565b838111156105705750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b612a3e81612936565b811461087f57600080fd5b612a3e81612941565b612a3e81612990565b612a3e8161299356fea365627a7a72315820bf77d2ea4ae3b38da9bb0128a42ab0915d3f0ffef31406df0737cce2ae5027586c6578706572696d656e74616cf564736f6c63430005100040",
1160
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102415760003560e01c80637f3a626211610145578063bc0e3880116100bd578063d42adff41161008c578063e50cc20511610071578063e50cc20514610503578063f60fdc7014610516578063fcdac08c1461052957610241565b8063d42adff4146104dd578063dde0973d146104f057610241565b8063bc0e388014610484578063c276f01314610497578063c36148ab146104b7578063d0ed88a3146104ca57610241565b80639cc6742011610114578063a0ea658d116100f9578063a0ea658d1461044b578063ae793bee1461045e578063b474633a1461047157610241565b80639cc6742014610425578063a03ff1bd1461043857610241565b80637f3a6262146103cc57806382678d45146103df57806383b726ca146103ff57806399ad7dc01461041257610241565b806348598965116101d85780635e2ff75f116101a7578063635a214e1161018c578063635a214e146103865780636f466706146103a657806379cfb7d0146103b957610241565b80635e2ff75f146103605780635f7d744c1461037357610241565b806348598965146103075780634f016c951461031a5780635604cbb21461032d5780635853940f1461034057610241565b80632a4e9808116102145780632a4e98081461029f5780632f2617cc146102b257806342d3116e146102d25780634384a0d2146102f257610241565b8063058b2b141461024657806320611e3f1461025b578063223dce9f1461026e57806324b02fce1461028c575b600080fd5b610259610254366004612369565b610531565b005b61025961026936600461213a565b610564565b610276610576565b60405161028391906128ae565b60405180910390f35b61027661029a3660046123b9565b61058b565b6102596102ad3660046122e0565b6105a6565b6102c56102c0366004612100565b6105d5565b60405161028391906128d8565b6102e56102e0366004612313565b61067a565b60405161028391906127e9565b6102fa610576565b60405161028391906128bc565b6102fa610315366004612407565b6106c6565b6102596103283660046122b0565b6106d8565b61025961033b36600461224b565b610709565b61035361034e3660046123e9565b610737565b604051610283919061283a565b61035361036e3660046123e9565b61074a565b6102596103813660046122b0565b610755565b61039961039436600461220e565b610782565b60405161028391906128e6565b6102596103b436600461226c565b61078d565b6102c56103c7366004612369565b6107bc565b6102c56103da366004612369565b6107c9565b6103f26103ed36600461220e565b6107d6565b60405161028391906128f4565b61035361040d36600461239b565b6107e1565b61035361042036600461239b565b6107ec565b610353610433366004612407565b6107f7565b61027661044636600461239b565b610803565b61025961045936600461222c565b610814565b61027661046c3660046123b9565b610841565b61025961047f36600461220e565b610853565b6102fa6104923660046123e9565b610882565b6104aa6104a536600461220e565b610893565b60405161028391906128ca565b6102c56104c5366004612369565b61089e565b6102596104d836600461219b565b6108ab565b6102fa6104eb366004612407565b6108b6565b6103536104fe36600461239b565b6108c8565b6103536105113660046123e9565b6108d3565b6103536105243660046123b9565b6108de565b6103996108ea565b61055f60007f546573744c6962000000000000000000000000000000000000000000000000008585856108f4565b505050565b61057084848484610a26565b50505050565b61057e611fdc565b610586610b3d565b905090565b610593611fdc565b61059d8383610b5d565b90505b92915050565b61057060007f546573744c69620000000000000000000000000000000000000000000000000086868686610b77565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a082319061062a9085906004016127e9565b60206040518083038186803b15801561064257600080fd5b505afa158015610656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061059d9190810190612437565b60006106bc8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6f92505050565b90505b9392505050565b6106ce611fdc565b61059d8383610ebf565b61070560007f546573744c6962000000000000000000000000000000000000000000000000008484610f51565b5050565b61055f60007f546573744c696200000000000000000000000000000000000000000000000000858585610fe9565b60006107428261104b565b90505b919050565b600061074282611062565b61070560007f546573744c696200000000000000000000000000000000000000000000000000848461106a565b6000610742826110cc565b61057060007f546573744c69620000000000000000000000000000000000000000000000000086868686611123565b60006106bc848484611185565b60006106bc8484846111a7565b600061074282611200565b60006107428261125f565b600061074282611279565b600061059d83836112a1565b61080b611fdc565b610742826112dd565b61070560007f546573744c6962000000000000000000000000000000000000000000000000008484611316565b610849611fdc565b61059d8383611378565b61087f60007f546573744c696200000000000000000000000000000000000000000000000000836114a2565b50565b61088a611fdc565b610742826114ec565b600061074282611513565b60006106bc848484611576565b61055f838383611600565b6108be611fdc565b61059d83836116ff565b600061074282611719565b600061074282611742565b600061059d8383611758565b60006105866117b1565b84610a1f57610902846117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061092c856117bc565b7f203c00000000000000000000000000000000000000000000000000000000000061095686611894565b7f2c2000000000000000000000000000000000000000000000000000000000000061098087611894565b6040516109b897969594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016126b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610a169160040161287d565b60405180910390fd5b5050505050565b801580610a5e57508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610a6857610570565b6040516105709085907f23b872dd0000000000000000000000000000000000000000000000000000000090610aa5908790879087906024016127f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601a81526020017f546f6b656e3a207472616e7366657246726f6d206661696c65640000000000008152506119a3565b610b45611fdc565b50604080518082019091526000808252602082015290565b610b65611fdc565b61059d83610b72846112dd565b611378565b85610c6757610b85856117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000610baf866117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610bd987611aa2565b7f2c20000000000000000000000000000000000000000000000000000000000000610c0388611894565b7f2c20000000000000000000000000000000000000000000000000000000000000610c2d89611894565b6040516109b8999897969594939291907f3e000000000000000000000000000000000000000000000000000000000000009060200161272d565b505050505050565b6000610cc060428351147f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e6174757265206c656e67746800000000000000006114a2565b602082015160408301516060840151600081901a9060011a610d26600382107f54797065645369676e61747572650000000000000000000000000000000000007f496e76616c6964207369676e61747572652074797065000000000000000000006114a2565b60008160ff166003811115610d3757fe5b9050600080826003811115610d4857fe5b1415610d55575087610e44565b6001826003811115610d6357fe5b1415610dce576040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525089604051602001610db19291906127c7565b604051602081830303815290604052805190602001209050610e44565b6002826003811115610ddc57fe5b14610de357fe5b6040518060400160405280601b81526020017f19457468657265756d205369676e6564204d6573736167653a0a20000000000081525089604051602001610e2b9291906127c7565b6040516020818303038152906040528051906020012090505b60018185888860405160008152602001604052604051610e679493929190612848565b6020604051602081039080840390855afa158015610e89573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519a9950505050505050505050565b610ec7611fdc565b610ecf611fdc565b8251845115159015151415610f025783511515815260208085015190840151610ef89190611c05565b602082015261059d565b8260200151846020015110610f2b5783511515815260208085015190840151610ef89190611c44565b82511515815260208084015190850151610f459190611c44565b60208201529392505050565b8361057057610f5f836117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000610f89846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611894565b6040516109b89594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612653565b84610a1f57610ff7846117bc565b7f3a20000000000000000000000000000000000000000000000000000000000000611021856117bc565b7f203c00000000000000000000000000000000000000000000000000000000000061095686611c86565b805160009015801561074257505060200151151590565b602001511590565b8361057057611078836117bc565b7f3a200000000000000000000000000000000000000000000000000000000000006110a2846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611aa2565b60008161074263ffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743332000000000000000000000084610f51565b85610c6757611131856117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061115b866117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610bd987611c86565b60006106bc8261119b868663ffffffff611dfd16565b9063ffffffff611e5116565b60008315806111b4575082155b156111cb576111c4600083611e51565b90506106bf565b6106bc60016111f48461119b836111e88a8a63ffffffff611dfd16565b9063ffffffff611c4416565b9063ffffffff611c0516565b6000816107426bffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743936000000000000000000000084610f51565b602001516fffffffffffffffffffffffffffffffff161590565b80516000908015610742575050602001516fffffffffffffffffffffffffffffffff16151590565b60008160200151836020015114156112d45760208301516112c4575060016105a0565b50805182511515901515146105a0565b50600092915050565b6112e5611fdc565b506040805180820190915281511581526020808301516fffffffffffffffffffffffffffffffff1690820152919050565b8361057057611324836117bc565b7f3a2000000000000000000000000000000000000000000000000000000000000061134e846117bc565b7f203c000000000000000000000000000000000000000000000000000000000000610fb385611c86565b611380611fdc565b611388611fdc565b82518451151590151514156113eb57835115158152602080850151908401516113cf916113ca916fffffffffffffffffffffffffffffffff9182169116611c05565b611513565b6fffffffffffffffffffffffffffffffff16602082015261059d565b82602001516fffffffffffffffffffffffffffffffff1684602001516fffffffffffffffffffffffffffffffff161061145157835115158152602080850151908401516113cf916113ca916fffffffffffffffffffffffffffffffff9182169116611c44565b82511515815260208084015190850151611484916113ca916fffffffffffffffffffffffffffffffff9182169116611c44565b6fffffffffffffffffffffffffffffffff1660208201529392505050565b8261055f576114b0826117bc565b7f3a200000000000000000000000000000000000000000000000000000000000006114da836117bc565b6040516020016109b89392919061262b565b6114f4611fdc565b5060408051808201909152815115815260208083015190820152919050565b6000816107426fffffffffffffffffffffffffffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e743132380000000000000000000084610f51565b6000831580611583575082155b15611593576111c4600083611e51565b60006115a5858563ffffffff611dfd16565b90506115f76115c460016111f4600261119b888463ffffffff611c4416565b6115d4838663ffffffff611e9316565b10156115e15760006115e4565b60015b60ff166111f4838663ffffffff611e5116565b95945050505050565b801580611622575073ffffffffffffffffffffffffffffffffffffffff821630145b1561162c5761055f565b60405161055f9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090611667908690869060240161281f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280601681526020017f546f6b656e3a207472616e73666572206661696c6564000000000000000000008152506119a3565b611707611fdc565b61059d83611714846114ec565b610ebf565b8051600090158015610742575050602001516fffffffffffffffffffffffffffffffff16151590565b8051600090801561074257505060200151151590565b600081602001516fffffffffffffffffffffffffffffffff1683602001516fffffffffffffffffffffffffffffffff1614156112d45760208301516fffffffffffffffffffffffffffffffff166112c4575060016105a0565b6000610586426110cc565b606080826040516020016117d0919061260a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156118795781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061183c57fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156118745760010181529050610745565b611803565b5060408051600080825260208201909252905b509392505050565b6060816118d5575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610745565b8160005b81156118ed57600101600a820491506118d9565b6060816040519080825280601f01601f19166020018201604052801561191a576020820181803883390190505b508593509050815b801561199a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061196057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611922565b50949350505050565b600060608473ffffffffffffffffffffffffffffffffffffffff16846040516119cc919061261f565b6000604051808303816000865af19150503d8060008114611a09576040519150601f19603f3d011682016040523d82523d6000602084013e611a0e565b606091505b5091509150818390611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b50805115610a1f5780806020019051611a6991908101906121e8565b8390610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b6040805160428082526080820190925260609183918391602082018180388339019050509050603060f81b81600081518110611ada57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611b1b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b602081101561188c5760028102611b66600f8516611ed5565b838260410381518110611b7557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611bb7600f8516611ed5565b838260400381518110611bc657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611b4d565b60008282018381101561059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169061288e565b600061059d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef7565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110611cd257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110611d1357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b601481101561188c5760028102611d5e600f8516611ed5565b838260290381518110611d6d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350611daf600f8516611ed5565b838260280381518110611dbe57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101611d45565b600082611e0c575060006105a0565b82820282848281611e1957fe5b041461059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a169061289e565b600061059d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f3d565b600061059d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611f8e565b6000600a821015611eed57506030810160f81b610745565b5060570160f81b90565b60008184841115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b505050900390565b60008183611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b506000838581611f8457fe5b0495945050505050565b60008183611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a16919061287d565b50828481611fd357fe5b06949350505050565b604080518082019091526000808252602082015290565b80356105a081612a35565b80356105a081612a49565b80516105a081612a49565b80356105a081612a52565b60008083601f84011261203157600080fd5b50813567ffffffffffffffff81111561204957600080fd5b60208301915083600182028301111561206157600080fd5b9250929050565b60006040828403121561207a57600080fd5b6120846040612902565b905060006120928484611ffe565b82525060206120a3848483016120ea565b60208301525092915050565b6000604082840312156120c157600080fd5b6120cb6040612902565b905060006120d98484611ffe565b82525060206120a384848301612014565b80356105a081612a5b565b80516105a081612a52565b6000806040838503121561211357600080fd5b600061211f8585611ff3565b925050602061213085828601611ff3565b9150509250929050565b6000806000806080858703121561215057600080fd5b600061215c8787611ff3565b945050602061216d87828801611ff3565b935050604061217e87828801611ff3565b925050606061218f87828801612014565b91505092959194509250565b6000806000606084860312156121b057600080fd5b60006121bc8686611ff3565b93505060206121cd86828701611ff3565b92505060406121de86828701612014565b9150509250925092565b6000602082840312156121fa57600080fd5b60006122068484612009565b949350505050565b60006020828403121561222057600080fd5b60006122068484612014565b6000806040838503121561223f57600080fd5b600061211f8585612014565b60008060006060848603121561226057600080fd5b60006121bc8686612014565b6000806000806080858703121561228257600080fd5b600061228e8787612014565b945050602061229f87828801611ff3565b935050604061217e87828801612014565b600080604083850312156122c357600080fd5b60006122cf8585612014565b925050602061213085828601612014565b600080600080608085870312156122f657600080fd5b60006123028787612014565b945050602061229f87828801612014565b60008060006040848603121561232857600080fd5b60006123348686612014565b935050602084013567ffffffffffffffff81111561235157600080fd5b61235d8682870161201f565b92509250509250925092565b60008060006060848603121561237e57600080fd5b600061238a8686612014565b93505060206121cd86828701612014565b6000604082840312156123ad57600080fd5b60006122068484612068565b600080608083850312156123cc57600080fd5b60006123d88585612068565b925050604061213085828601612068565b6000604082840312156123fb57600080fd5b600061220684846120af565b6000806080838503121561241a57600080fd5b600061242685856120af565b9250506040612130858286016120af565b60006020828403121561244957600080fd5b600061220684846120f5565b61245e81612936565b82525050565b61245e81612941565b61245e61247982612946565b612990565b61245e6124798261296b565b61245e81612990565b61245e61247982612990565b60006124aa82612929565b6124b48185610745565b93506124c48185602086016129e1565b9290920192915050565b60006124d982612929565b6124e3818561292d565b93506124f38185602086016129e1565b6124fc81612a0d565b9093019392505050565b6000612513601b8361292d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061254c60218361292d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b805160408301906125af8482612464565b50602082015161057060208501826125e6565b805160408301906125d38482612464565b506020820151610570602085018261248a565b61245e81612993565b61245e816129c1565b61245e816129ca565b61245e816129d0565b60006126168284612493565b50602001919050565b60006106bf828461249f565b6000612637828661249f565b9150612643828561247e565b6002820191506115f7828461249f565b600061265f828961249f565b915061266b828861247e565b60028201915061267b828761249f565b9150612687828661247e565b600282019150612697828561249f565b91506126a3828461246d565b506001019695505050505050565b60006126bd828b61249f565b91506126c9828a61247e565b6002820191506126d9828961249f565b91506126e5828861247e565b6002820191506126f5828761249f565b9150612701828661247e565b600282019150612711828561249f565b915061271d828461246d565b5060010198975050505050505050565b6000612739828d61249f565b9150612745828c61247e565b600282019150612755828b61249f565b9150612761828a61247e565b600282019150612771828961249f565b915061277d828861247e565b60028201915061278d828761249f565b9150612799828661247e565b6002820191506127a9828561249f565b91506127b5828461246d565b506001019a9950505050505050505050565b60006127d3828561249f565b91506127df8284612493565b5060200192915050565b602081016105a08284612455565b606081016128058286612455565b6128126020830185612455565b612206604083018461248a565b6040810161282d8285612455565b6106bf602083018461248a565b602081016105a08284612464565b60808101612856828761248a565b61286360208301866125f8565b612870604083018561248a565b6115f7606083018461248a565b6020808252810161059d81846124ce565b6020808252810161074281612506565b602080825281016107428161253f565b604081016105a0828461259e565b604081016105a082846125c2565b602081016105a082846125e6565b602081016105a0828461248a565b602081016105a082846125ef565b602081016105a08284612601565b60405181810167ffffffffffffffff8111828210171561292157600080fd5b604052919050565b5190565b90815260200190565b6000610742826129a8565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b6fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60005b838110156129fc5781810151838201526020016129e4565b838111156105705750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b612a3e81612936565b811461087f57600080fd5b612a3e81612941565b612a3e81612990565b612a3e8161299356fea365627a7a72315820bf77d2ea4ae3b38da9bb0128a42ab0915d3f0ffef31406df0737cce2ae5027586c6578706572696d656e74616cf564736f6c63430005100040",
1161
1161
  "sourceMap": "1156:7536:98:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1156:7536:98;;;;;;;",
1162
1162
  "deployedSourceMap": "1156:7536:98:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1156:7536:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3298:278;;;;;;;;;:::i;:::-;;5617:261;;;;;;;;;:::i;5934:132::-;;;:::i;:::-;;;;;;;;;;;;;;;;6072:189;;;;;;;;;:::i;4674:327::-;;;;;;;;;:::i;5240:198::-;;;;;;;;;:::i;:::-;;;;;;;;1323:232;;;;;;;;;:::i;:::-;;;;;;;;7315:132;;;:::i;:::-;;;;;;;;7648:189;;;;;;;;;:::i;3062:230::-;;;;;;;;;:::i;3819:279::-;;;;;;;;;:::i;8206:160::-;;;;;;;;;:::i;:::-;;;;;;;;8538:152;;;;;;;;;:::i;4437:231::-;;;;;;;;;:::i;2678:138::-;;;;;;;;;:::i;:::-;;;;;;;;4104:327;;;;;;;;;:::i;1610:241::-;;;;;;;;;:::i;2126:255::-;;;;;;;;;:::i;2534:138::-;;;;;;;;;:::i;:::-;;;;;;;;7157:152;;;;;;;;;:::i;6991:160::-;;;;;;;;;:::i;7843:183::-;;;;;;;;;:::i;6651:168::-;;;;;;;;;:::i;3582:231::-;;;;;;;;;:::i;6267:189::-;;;;;;;;;:::i;2874:182::-;;;;;;;;;:::i;8032:168::-;;;;;;;;;:::i;2387:141::-;;;;;;;;;:::i;:::-;;;;;;;;1857:263;;;;;;;;;:::i;5444:167::-;;;;;;;;;:::i;7453:189::-;;;;;;;;;:::i;6825:160::-;;;;;;;;;:::i;8372:::-;;;;;;;;;:::i;6462:183::-;;;;;;;;;:::i;5056:128::-;;;:::i;3298:278::-;3446:123;3472:5;3491:4;3509:6;3529:8;3551;3446:12;:123::i;:::-;3298:278;;;:::o;5617:261::-;5770:101;5802:5;5821:4;5839:2;5855:6;5770:18;:101::i;:::-;5617:261;;;;:::o;5934:132::-;6005:16;;:::i;:::-;6044:15;:13;:15::i;:::-;6037:22;;5934:132;:::o;6072:189::-;6200:16;;:::i;:::-;6239:15;6249:1;6252;6239:9;:15::i;:::-;6232:22;;6072:189;;;;;:::o;4674:327::-;4849:145;4875:5;4894:4;4912:6;4932:8;4954;4976;4849:12;:145::i;5240:198::-;5393:38;;;;;5363:7;;5393:31;;;;;;:38;;5425:5;;5393:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5393:38:98;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5393:38:98;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5393:38:98;;;;;;;;1323:232;1471:7;1501:47;1524:4;1530:17;;1501:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1501:22:98;;-1:-1:-1;;;1501:47:98:i;:::-;1494:54;;1323:232;;;;;;:::o;7648:189::-;7776:16;;:::i;:::-;7815:15;7825:1;7828;7815:9;:15::i;3062:230::-;3184:101;3210:5;3229:4;3247:6;3267:8;3184:12;:101::i;:::-;3062:230;;:::o;3819:279::-;3968:123;3994:5;4013:4;4031:6;4051:8;4073;3968:12;:123::i;8206:160::-;8313:4;8340:19;8357:1;8340:16;:19::i;:::-;8333:26;;8206:160;;;;:::o;8538:152::-;8641:4;8668:15;8681:1;8668:12;:15::i;4437:231::-;4560:101;4586:5;4605:4;4623:6;4643:8;4560:12;:101::i;2678:138::-;2768:6;2797:12;2807:1;2797:9;:12::i;4104:327::-;4279:145;4305:5;4324:4;4342:6;4362:8;4384;4406;4279:12;:145::i;1610:241::-;1767:7;1797:47;1813:6;1821:9;1832:11;1797:15;:47::i;2126:255::-;2290:7;2320:54;2343:6;2351:9;2362:11;2320:22;:54::i;2534:138::-;2624:6;2653:12;2663:1;2653:9;:12::i;7157:152::-;7260:4;7287:15;7300:1;7287:12;:15::i;6991:160::-;7098:4;7125:19;7142:1;7125:16;:19::i;7843:183::-;7974:4;8001:18;8014:1;8017;8001:12;:18::i;6651:168::-;6756:16;;:::i;:::-;6795:17;6810:1;6795:14;:17::i;3582:231::-;3705:101;3731:5;3750:4;3768:6;3788:8;3705:12;:101::i;6267:189::-;6395:16;;:::i;:::-;6434:15;6444:1;6447;6434:9;:15::i;2874:182::-;2970:79;2996:5;3015:4;3033:6;2970:12;:79::i;:::-;2874:182;:::o;8032:168::-;8137:16;;:::i;:::-;8176:17;8191:1;8176:14;:17::i;2387:141::-;2478:7;2508:13;2519:1;2508:10;:13::i;1857:263::-;2025:7;2055:58;2082:6;2090:9;2101:11;2055:26;:58::i;5444:167::-;5571:33;5586:5;5593:2;5597:6;5571:14;:33::i;7453:189::-;7581:16;;:::i;:::-;7620:15;7630:1;7633;7620:9;:15::i;6825:160::-;6932:4;6959:19;6976:1;6959:16;:19::i;8372:160::-;8479:4;8506:19;8523:1;8506:16;:19::i;6462:183::-;6593:4;6620:18;6633:1;6636;6620:12;:18::i;5056:128::-;5130:6;5159:18;:16;:18::i;2293:663:77:-;2479:4;2474:476;;2593:24;2612:4;2593:18;:24::i;:::-;2643:5;2674:26;2693:6;2674:18;:26::i;:::-;2726:6;2758:19;2768:8;2758:9;:19::i;:::-;2803:5;2834:19;2844:8;2834:9;:19::i;:::-;2551:356;;;;;;;;;;;2879:6;;2551:356;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2551:356:77;;;;2499:440;;;;;;;;;;;;;;;;;2474:476;2293:663;;;;;:::o;1465:493:81:-;1617:11;;;:25;;;1638:4;1632:10;;:2;:10;;;1617:25;1613:62;;;1658:7;;1613:62;1776:85;;1724:189;;1757:5;;1799:43;;1776:85;;1844:4;;1850:2;;1854:6;;1776:85;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1776:85:81;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;1776:85:81;1724:189;;;;;;;;;;;;;;;;;:19;:189::i;1897:168:82:-;1963:10;;:::i;:::-;-1:-1:-1;1996:62:82;;;;;;;;;-1:-1:-1;1996:62:82;;;;;;;1897:168;:::o;2071:169::-;2181:10;;:::i;:::-;2214:19;2218:1;2221:11;2230:1;2221:8;:11::i;:::-;2214:3;:19::i;5536:765:77:-;5748:4;5743:552;;5862:24;5881:4;5862:18;:24::i;:::-;5912:5;5943:26;5962:6;5943:18;:26::i;:::-;5995:6;6027:19;6037:8;6027:9;:19::i;:::-;6072:5;6103:19;6113:8;6103:9;:19::i;:::-;6148:5;6179:19;6189:8;6179:9;:19::i;:::-;5820:432;;;;;;;;;;;;;6224:6;;5820:432;;;;5743:552;5536:765;;;;;;:::o;2305:1437:20:-;2437:7;2460:141;1337:2;2486:17;:24;:47;2547:4;2460:141;:12;:141::i;:::-;2818:4;2795:28;;2789:35;2871:4;2848:28;;2842:35;2935:4;2912:28;;2906:35;2612:9;2959:17;;;;3008:1;3003:17;3040:133;3085:21;3066:41;;3121:4;3040:133;:12;:133::i;:::-;3184:21;3222:10;3208:25;;;;;;;;;;3184:49;-1:-1:-1;3244:18:20;;3276:7;:34;;;;;;;;;3272:358;;;-1:-1:-1;3339:4:20;3272:358;;;3375:21;3364:7;:32;;;;;;;;;3360:270;;;3452:11;;;;;;;;;;;;;;;;;3465:4;3435:35;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3435:35:20;;;3425:46;;;;;;3412:59;;3360:270;;;3520:25;3509:7;:36;;;;;;;;;3502:44;;;;3600:11;;;;;;;;;;;;;;;;;3613:4;3583:35;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3583:35:20;;;3573:46;;;;;;3560:59;;3360:270;3647:88;3670:10;3694:1;3709;3724;3647:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3647:88:20;;;;;;2305:1437;-1:-1:-1;;;;;;;;;;2305:1437:20:o;4730:610:82:-;4840:10;;:::i;:::-;4866:17;;:::i;:::-;4907:6;;4897;;:16;;;;;;4893:418;;;4943:6;;4929:20;;;;4991:7;;;;;5000;;;;4978:30;;4991:7;4978:12;:30::i;:::-;4963:12;;;:45;4893:418;;;5054:1;:7;;;5043:1;:7;;;:18;5039:262;;5095:6;;5081:20;;;;5147:7;;;;;5156;;;;5134:30;;5147:7;5134:12;:30::i;5039:262::-;5217:6;;5203:20;;;;5269:7;;;;;5278;;;;5256:30;;5269:7;5256:12;:30::i;:::-;5241:12;;;:45;5327:6;4730:610;-1:-1:-1;;;4730:610:82:o;1726:561:77:-;1886:4;1881:400;;2000:24;2019:4;2000:18;:24::i;:::-;2050:5;2081:26;2100:6;2081:18;:26::i;:::-;2133:6;2165:19;2175:8;2165:9;:19::i;:::-;1958:280;;;;;;;;;2210:6;;1958:280;;;;3529:663;3715:4;3710:476;;3829:24;3848:4;3829:18;:24::i;:::-;3879:5;3910:26;3929:6;3910:18;:26::i;:::-;3962:6;3994:19;4004:8;3994:9;:19::i;5869:151:82:-;5992:6;;5964:4;;5991:7;:22;;;;-1:-1:-1;;6002:7:82;;;:11;;;5869:151::o;6182:137::-;6300:7;;;:12;;6182:137::o;4969:561:77:-;5129:4;5124:400;;5243:24;5262:4;5243:18;:24::i;:::-;5293:5;5324:26;5343:6;5324:18;:26::i;:::-;5376:6;5408:19;5418:8;5408:9;:19::i;3426:310:75:-;3517:6;3562;3579:127;3605:16;;;;;3635:4;3579:127;3562:6;3579:12;:127::i;4198:765:77:-;4410:4;4405:552;;4524:24;4543:4;4524:18;:24::i;:::-;4574:5;4605:26;4624:6;4605:18;:26::i;:::-;4657:6;4689:19;4699:8;4689:9;:19::i;1110:228:75:-;1263:7;1293:38;1319:11;1293:21;:6;1304:9;1293:21;:10;:21;:::i;:::-;:25;:38;:25;:38;:::i;1494:409::-;1654:7;1681:11;;;:29;;-1:-1:-1;1696:14:75;;1681:29;1677:151;;;1789:28;1802:1;1805:11;1789:12;:28::i;:::-;1782:35;;;;1677:151;1844:52;1894:1;1844:45;1877:11;1844:28;1894:1;1844:21;:6;1855:9;1844:21;:10;:21;:::i;:::-;:25;:28;:25;:28;:::i;:45::-;:49;:52;:49;:52;:::i;3110:310::-;3201:6;3246;3263:127;3289:16;;;;;3319:4;3263:127;3246:6;3263:12;:127::i;3722:137:82:-;3840:7;;;:12;;;;3722:137::o;3566:150::-;3688:6;;3661:4;;3688:21;;;;-1:-1:-1;;3698:7:82;;;:11;;;;;3566:150::o;5346:308::-;5459:4;5494:1;:7;;;5483:1;:7;;;:18;5479:147;;;5521:7;;;;5517:62;;-1:-1:-1;5560:4:82;5553:11;;5517:62;-1:-1:-1;5609:6:82;;5599;;:16;;;;;;5592:23;;5479:147;-1:-1:-1;5642:5:82;5346:308;;;;:::o;3200:203::-;3293:10;;:::i;:::-;-1:-1:-1;3326:70:82;;;;;;;;;3351:6;;3350:7;3326:70;;;3378:7;;;;3326:70;;;;;;3200:203;;;:::o;2962:561:77:-;3122:4;3117:400;;3236:24;3255:4;3236:18;:24::i;:::-;3286:5;3317:26;3336:6;3317:18;:26::i;:::-;3369:6;3401:19;3411:8;3401:9;:19::i;2246:634:82:-;2356:10;;:::i;:::-;2382:17;;:::i;:::-;2423:6;;2413;;:16;;;;;;2409:442;;;2459:6;;2445:20;;;;2507:7;;;;;2516;;;;2494:38;;:30;;;;;;;;:12;:30::i;:::-;:36;:38::i;:::-;2479:53;;:12;;;:53;2409:442;;;2578:1;:7;;;2567:18;;:1;:7;;;:18;;;2563:278;;2619:6;;2605:20;;;;2671:7;;;;;2680;;;;2658:38;;:30;;;;;;;;:12;:30::i;2563:278::-;2749:6;;2735:20;;;;2801:7;;;;;2810;;;;2788:38;;:30;;;;;;;;:12;:30::i;:38::-;2773:53;;:12;;;:53;:12;2246:634;-1:-1:-1;;;2246:634:82:o;1294:426:77:-;1428:4;1423:291;;1542:24;1561:4;1542:18;:24::i;:::-;1592:5;1623:26;1642:6;1623:18;:26::i;:::-;1500:171;;;;;;;;;;;5660:203:82;5753:10;;:::i;:::-;-1:-1:-1;5786:70:82;;;;;;;;;5811:6;;5810:7;5786:70;;;5838:7;;;;5786:70;;;;5660:203;;;:::o;2789:315:75:-;2881:7;2929:6;2946:128;2972:16;;;;;3002:4;2946:128;2929:6;2946:12;:128::i;2059:724::-;2223:7;2250:11;;;:29;;-1:-1:-1;2265:14:75;;2250:29;2246:151;;;2358:28;2371:1;2374:11;2358:12;:28::i;2246:151::-;2406:11;2420:21;:6;2431:9;2420:21;:10;:21;:::i;:::-;2406:35;-1:-1:-1;2680:96:75;2735:32;2765:1;2735:25;2758:1;2735:18;:11;2765:1;2735:18;:15;:18;:::i;:32::-;2708:23;:6;2719:11;2708:23;:10;:23;:::i;:::-;:59;;:67;;2774:1;2708:67;;;2770:1;2708:67;2680:96;;:23;:6;2691:11;2680:23;:10;:23;:::i;:96::-;2673:103;2059:724;-1:-1:-1;;;;;2059:724:75:o;1074:385:81:-;1200:11;;;:34;;-1:-1:-1;1215:19:81;;;1229:4;1215:19;1200:34;1196:71;;;1250:7;;1196:71;1329:75;;1277:175;;1310:5;;1352:39;;1329:75;;1393:2;;1397:6;;1329:75;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1329:75:81;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;1329:75:81;1277:175;;;;;;;;;;;;;;;;;:19;:175::i;4555:169:82:-;4665:10;;:::i;:::-;4698:19;4702:1;4705:11;4714:1;4705:8;:11::i;:::-;4698:3;:19::i;3409:151::-;3532:6;;3504:4;;3531:7;:22;;;;-1:-1:-1;;3542:7:82;;;:11;;;;;3409:151::o;6026:150::-;6148:6;;6121:4;;6148:21;;;;-1:-1:-1;;6158:7:82;;;:11;;;6026:150::o;2886:308::-;2999:4;3034:1;:7;;;3023:18;;:1;:7;;;:18;;;3019:147;;;3061:7;;;;:12;;3057:62;;-1:-1:-1;3100:4:82;3093:11;;910:132:80;980:6;1009:26;1019:15;1009:9;:26::i;6359:966:77:-;6462:12;6537:19;6576:5;6559:23;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;6559:23:77;;;;-1:-1:-1;49:4;6688:571:77;6709:5;;6688:571;;6960:9;;6862:3;;;;;6960:6;;6862:3;;6960:9;;;;;;;;;;;;:14;6956:293;;7015:1;7011:5;7141:22;;7148:6;-1:-1:-1;7221:13:77;;6956:293;6688:571;;;-1:-1:-1;7306:12:77;;;7316:1;7306:12;;;;;;;;;;;-1:-1:-1;7299:19:77;6359:966;-1:-1:-1;;;6359:966:77:o;7331:912::-;7425:12;7457:10;7453:51;;-1:-1:-1;7483:10:77;;;;;;;;;;;;;;;;;;;7453:51;7565:5;7553:9;7604:69;7611:6;;7604:69;;7633:8;;7660:2;7655:7;;;;7604:69;;;7714:17;7744:6;7734:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;7734:17:77;87:34:-1;135:17;;-1:-1;7734:17:77;-1:-1:-1;7843:5:77;;-1:-1:-1;7714:37:77;-1:-1:-1;7875:6:77;7858:357;7883:5;;7858:357;;8036:3;;8132:2;8128:1;:6;902:2;8114:21;8103:34;;8093:4;8098:1;8093:7;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;8202:2:77;8197:7;;;;7858:357;;;-1:-1:-1;8232:4:77;7331:912;-1:-1:-1;;;;7331:912:77:o;2016:897:81:-;2669:12;2683:23;2710:5;:10;;2721:4;2710:16;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2668:58:81;;;;2744:7;2753:5;2736:23;;;;;;;;;;;;;;;;-1:-1:-1;2774:17:81;;:21;2770:137;;2869:10;2858:30;;;;;;;;;;;;;;2890:5;2850:46;;;;;;;;;;;;;;;9217:960:77;9487:13;;;9497:2;9487:13;;;;;;;;;9311:12;;9359:5;;9311:12;;9487:13;;;21:6:-1;;104:10;9487:13:77;87:34:-1;135:17;;-1:-1;9487:13:77;9465:35;;902:2;9564:23;;9552:6;9559:1;9552:9;;;;;;;;;;;:35;;;;;;;;;;;1010:3;9609:27;;9597:6;9604:1;9597:9;;;;;;;;;;;:39;;;;;;;;;;-1:-1:-1;9750:9:77;9745:402;9769:2;9765:1;:6;9745:402;;;9858:1;9854:5;;9951:23;1232:3;9956:17;;9951:4;:23::i;:::-;9930:6;9942:5;9937:2;:10;9930:18;;;;;;;;;;;:44;;;;;;;;;;;9997:1;9992;:6;;9988:10;;10089:23;1232:3;10094:1;:17;10089:4;:23::i;:::-;10068:6;10080:5;10075:2;:10;10068:18;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;;10135:1:77;10130:6;;;;;9773:3;;9745:402;;834:176:124;892:7;923:5;;;946:6;;;;938:46;;;;;;;;;;;;;1274:134;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;8249:962:77:-;8521:13;;;8531:2;8521:13;;;8343:12;8521:13;;;;;;8383:14;;;;8343:12;;8521:13;;;21:6:-1;;104:10;8521:13:77;87:34:-1;135:17;;-1:-1;8521:13:77;8499:35;;902:2;8598:23;;8586:6;8593:1;8586:9;;;;;;;;;;;:35;;;;;;;;;;;1010:3;8643:27;;8631:6;8638:1;8631:9;;;;;;;;;;;:39;;;;;;;;;;-1:-1:-1;8784:9:77;8779:402;8803:2;8799:1;:6;8779:402;;;8892:1;8888:5;;8985:23;1232:3;8990:17;;8985:4;:23::i;:::-;8964:6;8976:5;8971:2;:10;8964:18;;;;;;;;;;;:44;;;;;;;;;;;9031:1;9026;:6;;9022:10;;9123:23;1232:3;9128:1;:17;9123:4;:23::i;:::-;9102:6;9114:5;9109:2;:10;9102:18;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;;9169:1:77;9164:6;;;;;8807:3;;8779:402;;2159:459:124;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:124;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;;;;;;;;;;3073:130;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;4500:128::-;4558:7;4584:37;4588:1;4591;4584:37;;;;;;;;;;;;;;;;;:3;:37::i;10183:325:77:-;10272:4;10340:2;10332:5;:10;10328:79;;;-1:-1:-1;902:2:77;10376:18;;10365:31;;10358:38;;10328:79;-1:-1:-1;956:2:77;10472:27;10461:40;;;10183:325::o;1732:187:124:-;1818:7;1853:12;1845:6;;;;1837:29;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:124;;;1732:187::o;3718:338::-;3804:7;3904:12;3897:5;3889:28;;;;;;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;;3718:338;-1:-1:-1;;;;;3718:338:124:o;5132:163::-;5218:7;5253:12;5245:6;5237:29;;;;;;;;;;;;;;;;5287:1;5283;:5;;;;;;;5132:163;-1:-1:-1;;;;5132:163:124:o;1156:7536:98:-;;;;;;;;;;-1:-1:-1;1156:7536:98;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:124;206:20;;231:30;206:20;231:30;;273:128;348:13;;366:30;348:13;366:30;;408:130;475:20;;500:33;475:20;500:33;;559:336;;;673:3;666:4;658:6;654:17;650:27;640:2;;691:1;688;681:12;640:2;-1:-1;711:20;;751:18;740:30;;737:2;;;783:1;780;773:12;737:2;817:4;809:6;805:17;793:29;;868:3;860:4;852:6;848:17;838:8;834:32;831:41;828:2;;;885:1;882;875:12;828:2;633:262;;;;;;926:462;;1037:4;1025:9;1020:3;1016:19;1012:30;1009:2;;;1055:1;1052;1045:12;1009:2;1073:20;1088:4;1073:20;;;1064:29;-1:-1;1143:1;1175:46;1217:3;1197:9;1175:46;;;1150:72;;-1:-1;1284:2;1317:49;1362:3;1338:22;;;1317:49;;;1310:4;1303:5;1299:16;1292:75;1243:135;1003:385;;;;;1418:462;;1529:4;1517:9;1512:3;1508:19;1504:30;1501:2;;;1547:1;1544;1537:12;1501:2;1565:20;1580:4;1565:20;;;1556:29;-1:-1;1635:1;1667:46;1709:3;1689:9;1667:46;;;1642:72;;-1:-1;1776:2;1809:49;1854:3;1830:22;;;1809:49;;1887:130;1954:20;;1979:33;1954:20;1979:33;;2161:134;2239:13;;2257:33;2239:13;2257:33;;2302:366;;;2423:2;2411:9;2402:7;2398:23;2394:32;2391:2;;;2439:1;2436;2429:12;2391:2;2474:1;2491:53;2536:7;2516:9;2491:53;;;2481:63;;2453:97;2581:2;2599:53;2644:7;2635:6;2624:9;2620:22;2599:53;;;2589:63;;2560:98;2385:283;;;;;;2675:617;;;;;2830:3;2818:9;2809:7;2805:23;2801:33;2798:2;;;2847:1;2844;2837:12;2798:2;2882:1;2899:53;2944:7;2924:9;2899:53;;;2889:63;;2861:97;2989:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;;;2997:63;;2968:98;3097:2;3115:53;3160:7;3151:6;3140:9;3136:22;3115:53;;;3105:63;;3076:98;3205:2;3223:53;3268:7;3259:6;3248:9;3244:22;3223:53;;;3213:63;;3184:98;2792:500;;;;;;;;3299:491;;;;3437:2;3425:9;3416:7;3412:23;3408:32;3405:2;;;3453:1;3450;3443:12;3405:2;3488:1;3505:53;3550:7;3530:9;3505:53;;;3495:63;;3467:97;3595:2;3613:53;3658:7;3649:6;3638:9;3634:22;3613:53;;;3603:63;;3574:98;3703:2;3721:53;3766:7;3757:6;3746:9;3742:22;3721:53;;;3711:63;;3682:98;3399:391;;;;;;3797:257;;3909:2;3897:9;3888:7;3884:23;3880:32;3877:2;;;3925:1;3922;3915:12;3877:2;3960:1;3977:61;4030:7;4010:9;3977:61;;;3967:71;3871:183;-1:-1;;;;3871:183;4061:241;;4165:2;4153:9;4144:7;4140:23;4136:32;4133:2;;;4181:1;4178;4171:12;4133:2;4216:1;4233:53;4278:7;4258:9;4233:53;;4309:366;;;4430:2;4418:9;4409:7;4405:23;4401:32;4398:2;;;4446:1;4443;4436:12;4398:2;4481:1;4498:53;4543:7;4523:9;4498:53;;4682:491;;;;4820:2;4808:9;4799:7;4795:23;4791:32;4788:2;;;4836:1;4833;4826:12;4788:2;4871:1;4888:53;4933:7;4913:9;4888:53;;5180:617;;;;;5335:3;5323:9;5314:7;5310:23;5306:33;5303:2;;;5352:1;5349;5342:12;5303:2;5387:1;5404:53;5449:7;5429:9;5404:53;;;5394:63;;5366:97;5494:2;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;;;5502:63;;5473:98;5602:2;5620:53;5665:7;5656:6;5645:9;5641:22;5620:53;;5804:366;;;5925:2;5913:9;5904:7;5900:23;5896:32;5893:2;;;5941:1;5938;5931:12;5893:2;5976:1;5993:53;6038:7;6018:9;5993:53;;;5983:63;;5955:97;6083:2;6101:53;6146:7;6137:6;6126:9;6122:22;6101:53;;6177:617;;;;;6332:3;6320:9;6311:7;6307:23;6303:33;6300:2;;;6349:1;6346;6339:12;6300:2;6384:1;6401:53;6446:7;6426:9;6401:53;;;6391:63;;6363:97;6491:2;6509:53;6554:7;6545:6;6534:9;6530:22;6509:53;;6801:490;;;;6941:2;6929:9;6920:7;6916:23;6912:32;6909:2;;;6957:1;6954;6947:12;6909:2;6992:1;7009:53;7054:7;7034:9;7009:53;;;6999:63;;6971:97;7127:2;7116:9;7112:18;7099:32;7151:18;7143:6;7140:30;7137:2;;;7183:1;7180;7173:12;7137:2;7211:64;7267:7;7258:6;7247:9;7243:22;7211:64;;;7201:74;;;;7078:203;6903:388;;;;;;7671:491;;;;7809:2;7797:9;7788:7;7784:23;7780:32;7777:2;;;7825:1;7822;7815:12;7777:2;7860:1;7877:53;7922:7;7902:9;7877:53;;;7867:63;;7839:97;7967:2;7985:53;8030:7;8021:6;8010:9;8006:22;7985:53;;8169:285;;8295:2;8283:9;8274:7;8270:23;8266:32;8263:2;;;8311:1;8308;8301:12;8263:2;8346:1;8363:75;8430:7;8410:9;8363:75;;8461:455;;;8626:3;8614:9;8605:7;8601:23;8597:33;8594:2;;;8643:1;8640;8633:12;8594:2;8678:1;8695:75;8762:7;8742:9;8695:75;;;8685:85;;8657:119;8807:2;8825:75;8892:7;8883:6;8872:9;8868:22;8825:75;;8923:285;;9049:2;9037:9;9028:7;9024:23;9020:32;9017:2;;;9065:1;9062;9055:12;9017:2;9100:1;9117:75;9184:7;9164:9;9117:75;;9215:455;;;9380:3;9368:9;9359:7;9355:23;9351:33;9348:2;;;9397:1;9394;9387:12;9348:2;9432:1;9449:75;9516:7;9496:9;9449:75;;;9439:85;;9411:119;9561:2;9579:75;9646:7;9637:6;9626:9;9622:22;9579:75;;9925:263;;10040:2;10028:9;10019:7;10015:23;10011:32;10008:2;;;10056:1;10053;10046:12;10008:2;10091:1;10108:64;10164:7;10144:9;10108:64;;10693:113;10776:24;10794:5;10776:24;;;10771:3;10764:37;10758:48;;;10813:94;10880:21;10895:5;10880:21;;11025:148;11124:43;11143:23;11160:5;11143:23;;;11124:43;;11180:148;11279:43;11298:23;11315:5;11298:23;;11335:113;11418:24;11436:5;11418:24;;11455:152;11556:45;11576:24;11594:5;11576:24;;11614:356;;11742:38;11774:5;11742:38;;;11792:88;11873:6;11868:3;11792:88;;;11785:95;;11885:52;11930:6;11925:3;11918:4;11911:5;11907:16;11885:52;;;11949:16;;;;;11722:248;-1:-1;;11722:248;12332:347;;12444:39;12477:5;12444:39;;;12495:71;12559:6;12554:3;12495:71;;;12488:78;;12571:52;12616:6;12611:3;12604:4;12597:5;12593:16;12571:52;;;12644:29;12666:6;12644:29;;;12635:39;;;;12424:255;-1:-1;;;12424:255;12687:327;;12847:67;12911:2;12906:3;12847:67;;;12947:29;12927:50;;13005:2;12996:12;;12833:181;-1:-1;;12833:181;13023:370;;13183:67;13247:2;13242:3;13183:67;;;13283:34;13263:55;;13352:3;13347:2;13338:12;;13331:25;13384:2;13375:12;;13169:224;-1:-1;;13169:224;13444:465;13647:23;;13581:4;13572:14;;;13676:57;13576:3;13647:23;13676:57;;;13601:138;13813:4;13806:5;13802:16;13796:23;13825:63;13882:4;13877:3;13873:14;13859:12;13825:63;;13959:465;14162:23;;14096:4;14087:14;;;14191:57;14091:3;14162:23;14191:57;;;14116:138;14328:4;14321:5;14317:16;14311:23;14340:63;14397:4;14392:3;14388:14;14374:12;14340:63;;14431:103;14504:24;14522:5;14504:24;;14891:110;14972:23;14989:5;14972:23;;15008:107;15087:22;15103:5;15087:22;;15122:110;15203:23;15220:5;15203:23;;15239:244;;15358:75;15429:3;15420:6;15358:75;;;-1:-1;15455:2;15446:12;;15346:137;-1:-1;15346:137;15490:262;;15634:93;15723:3;15714:6;15634:93;;15759:553;;15975:93;16064:3;16055:6;15975:93;;;15968:100;;16079:73;16148:3;16139:6;16079:73;;;16174:1;16169:3;16165:11;16158:18;;16194:93;16283:3;16274:6;16194:93;;16319:978;;16633:93;16722:3;16713:6;16633:93;;;16626:100;;16737:73;16806:3;16797:6;16737:73;;;16832:1;16827:3;16823:11;16816:18;;16852:93;16941:3;16932:6;16852:93;;;16845:100;;16956:73;17025:3;17016:6;16956:73;;;17051:1;17046:3;17042:11;17035:18;;17071:93;17160:3;17151:6;17071:93;;;17064:100;;17175:73;17244:3;17235:6;17175:73;;;-1:-1;17270:1;17261:11;;16614:683;-1:-1;;;;;;16614:683;17304:1269;;17690:93;17779:3;17770:6;17690:93;;;17683:100;;17794:73;17863:3;17854:6;17794:73;;;17889:1;17884:3;17880:11;17873:18;;17909:93;17998:3;17989:6;17909:93;;;17902:100;;18013:73;18082:3;18073:6;18013:73;;;18108:1;18103:3;18099:11;18092:18;;18128:93;18217:3;18208:6;18128:93;;;18121:100;;18232:73;18301:3;18292:6;18232:73;;;18327:1;18322:3;18318:11;18311:18;;18347:93;18436:3;18427:6;18347:93;;;18340:100;;18451:73;18520:3;18511:6;18451:73;;;-1:-1;18546:1;18537:11;;17671:902;-1:-1;;;;;;;;17671:902;18580:1560;;19038:93;19127:3;19118:6;19038:93;;;19031:100;;19142:73;19211:3;19202:6;19142:73;;;19237:1;19232:3;19228:11;19221:18;;19257:93;19346:3;19337:6;19257:93;;;19250:100;;19361:73;19430:3;19421:6;19361:73;;;19456:1;19451:3;19447:11;19440:18;;19476:93;19565:3;19556:6;19476:93;;;19469:100;;19580:73;19649:3;19640:6;19580:73;;;19675:1;19670:3;19666:11;19659:18;;19695:93;19784:3;19775:6;19695:93;;;19688:100;;19799:73;19868:3;19859:6;19799:73;;;19894:1;19889:3;19885:11;19878:18;;19914:93;20003:3;19994:6;19914:93;;;19907:100;;20018:73;20087:3;20078:6;20018:73;;;-1:-1;20113:1;20104:11;;19019:1121;-1:-1;;;;;;;;;;19019:1121;20147:393;;20315:89;20400:3;20391:6;20315:89;;;20308:96;;20415:75;20486:3;20477:6;20415:75;;;-1:-1;20512:2;20503:12;;20296:244;-1:-1;;20296:244;20547:213;20665:2;20650:18;;20679:71;20654:9;20723:6;20679:71;;20767:435;20941:2;20926:18;;20955:71;20930:9;20999:6;20955:71;;;21037:72;21105:2;21094:9;21090:18;21081:6;21037:72;;;21120;21188:2;21177:9;21173:18;21164:6;21120:72;;21209:324;21355:2;21340:18;;21369:71;21344:9;21413:6;21369:71;;;21451:72;21519:2;21508:9;21504:18;21495:6;21451:72;;21540:201;21652:2;21637:18;;21666:65;21641:9;21704:6;21666:65;;21748:539;21946:3;21931:19;;21961:71;21935:9;22005:6;21961:71;;;22043:68;22107:2;22096:9;22092:18;22083:6;22043:68;;;22122:72;22190:2;22179:9;22175:18;22166:6;22122:72;;;22205;22273:2;22262:9;22258:18;22249:6;22205:72;;22294:301;22432:2;22446:47;;;22417:18;;22507:78;22417:18;22571:6;22507:78;;22602:407;22793:2;22807:47;;;22778:18;;22868:131;22778:18;22868:131;;23016:407;23207:2;23221:47;;;23192:18;;23282:131;23192:18;23282:131;;23430:301;23592:2;23577:18;;23606:115;23581:9;23694:6;23606:115;;23738:301;23900:2;23885:18;;23914:115;23889:9;24002:6;23914:115;;24046:213;24164:2;24149:18;;24178:71;24153:9;24222:6;24178:71;;24266:213;24384:2;24369:18;;24398:71;24373:9;24442:6;24398:71;;24486:209;24602:2;24587:18;;24616:69;24591:9;24658:6;24616:69;;24702:209;24818:2;24803:18;;24832:69;24807:9;24874:6;24832:69;;24918:256;24980:2;24974:9;25006:17;;;25081:18;25066:34;;25102:22;;;25063:62;25060:2;;;25138:1;25135;25128:12;25060:2;25154;25147:22;24958:216;;-1:-1;24958:216;25181:117;25264:12;;25235:63;25716:163;25819:19;;;25868:4;25859:14;;25812:67;25887:91;;25949:24;25967:5;25949:24;;25985:85;26051:13;26044:21;;26027:43;26077:144;26149:66;26138:78;;26121:100;26228:144;26300:66;26289:78;;26272:100;26379:72;26441:5;26424:27;26458:113;26531:34;26520:46;;26503:68;26578:121;26651:42;26640:54;;26623:76;26785:88;26857:10;26846:22;;26829:44;26880:81;26951:4;26940:16;;26923:38;26968:104;27040:26;27029:38;;27012:60;27080:268;27145:1;27152:101;27166:6;27163:1;27160:13;27152:101;;;27233:11;;;27227:18;27214:11;;;27207:39;27188:2;27181:10;27152:101;;;27268:6;27265:1;27262:13;27259:2;;;-1:-1;;27333:1;27315:16;;27308:27;27129:219;27597:97;27685:2;27665:14;27681:7;27661:28;;27645:49;27702:117;27771:24;27789:5;27771:24;;;27764:5;27761:35;27751:2;;27810:1;27807;27800:12;27826:111;27892:21;27907:5;27892:21;;27944:117;28013:24;28031:5;28013:24;;28068:117;28137:24;28155:5;28137:24;",
1163
1163
  "source": "/*\n\n Copyright 2019 dYdX Trading Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.7;\npragma experimental ABIEncoderV2;\n\nimport { TypedSignature } from \"../external/lib/TypedSignature.sol\";\nimport { IERC20Detailed } from \"../protocol/interfaces/IERC20Detailed.sol\";\nimport { Math } from \"../protocol/lib/Math.sol\";\nimport { Require } from \"../protocol/lib/Require.sol\";\nimport { Time } from \"../protocol/lib/Time.sol\";\nimport { Token } from \"../protocol/lib/Token.sol\";\nimport { Types } from \"../protocol/lib/Types.sol\";\n\n\n/**\n * @title TestLib\n * @author dYdX\n *\n * Contract for testing pure library functions\n */\ncontract TestLib {\n\n // ============ Constants ============\n\n bytes32 constant FILE = \"TestLib\";\n\n // ============ TypedSignature Functions ============\n\n function TypedSignatureRecover(\n bytes32 hash,\n bytes calldata signatureWithType\n )\n external\n pure\n returns (address)\n {\n return TypedSignature.recover(hash, signatureWithType);\n }\n\n // ============ Math Functions ============\n\n function MathGetPartial(\n uint256 target,\n uint256 numerator,\n uint256 denominator\n )\n external\n pure\n returns (uint256)\n {\n return Math.getPartial(target, numerator, denominator);\n }\n\n function MathGetPartialRoundHalfUp(\n uint256 target,\n uint256 numerator,\n uint256 denominator\n )\n external\n pure\n returns (uint256)\n {\n return Math.getPartialRoundHalfUp(target, numerator, denominator);\n }\n\n function MathGetPartialRoundUp(\n uint256 target,\n uint256 numerator,\n uint256 denominator\n )\n external\n pure\n returns (uint256)\n {\n return Math.getPartialRoundUp(target, numerator, denominator);\n }\n\n function MathTo128(\n uint256 x\n )\n external\n pure\n returns (uint128)\n {\n return Math.to128(x);\n }\n\n function MathTo96(\n uint256 x\n )\n external\n pure\n returns (uint96)\n {\n return Math.to96(x);\n }\n\n function MathTo32(\n uint256 x\n )\n external\n pure\n returns (uint32)\n {\n return Math.to32(x);\n }\n\n // ============ Require Functions ============\n\n function RequireThat0(\n bytes32 reason\n )\n external\n pure\n {\n Require.that(\n false,\n FILE,\n reason\n );\n }\n\n function RequireThat1(\n bytes32 reason,\n uint256 payloadA\n )\n external\n pure\n {\n Require.that(\n false,\n FILE,\n reason,\n payloadA\n );\n }\n\n function RequireThat2(\n bytes32 reason,\n uint256 payloadA,\n uint256 payloadB\n )\n external\n pure\n {\n Require.that(\n false,\n FILE,\n reason,\n payloadA,\n payloadB\n );\n }\n\n function RequireThatA0(\n bytes32 reason,\n address payloadA\n )\n external\n pure\n {\n Require.that(\n false,\n FILE,\n reason,\n payloadA\n );\n }\n\n function RequireThatA1(\n bytes32 reason,\n address payloadA,\n uint256 payloadB\n )\n external\n pure\n {\n Require.that(\n false,\n FILE,\n reason,\n payloadA,\n payloadB\n );\n }\n\n function RequireThatA2(\n bytes32 reason,\n address payloadA,\n uint256 payloadB,\n uint256 payloadC\n )\n external\n pure\n {\n Require.that(\n false,\n FILE,\n reason,\n payloadA,\n payloadB,\n payloadC\n );\n }\n\n function RequireThatB0(\n bytes32 reason,\n bytes32 payloadA\n )\n external\n pure\n {\n Require.that(\n false,\n FILE,\n reason,\n payloadA\n );\n }\n\n function RequireThatB2(\n bytes32 reason,\n bytes32 payloadA,\n uint256 payloadB,\n uint256 payloadC\n )\n external\n pure\n {\n Require.that(\n false,\n FILE,\n reason,\n payloadA,\n payloadB,\n payloadC\n );\n }\n\n // ============ Time Functions ============\n\n function TimeCurrentTime()\n external\n view\n returns (uint32)\n {\n return Time.currentTime();\n }\n\n // ============ Token Functions ============\n\n function TokenBalanceOf(\n address token,\n address owner\n )\n external\n view\n returns (uint256)\n {\n return IERC20Detailed(token).balanceOf(owner);\n }\n\n function TokenTransfer(\n address token,\n address to,\n uint256 amount\n )\n external\n {\n Token.transfer(token, to, amount);\n }\n\n function TokenTransferFrom(\n address token,\n address from,\n address to,\n uint256 amount\n )\n external\n {\n Token.transferFrom(\n token,\n from,\n to,\n amount\n );\n }\n\n // ============ Types Functions ============\n\n function TypesZeroPar()\n external\n pure\n returns (Types.Par memory)\n {\n return Types.zeroPar();\n }\n\n function TypesParSub(\n Types.Par memory a,\n Types.Par memory b\n )\n public\n pure\n returns (Types.Par memory)\n {\n return Types.sub(a, b);\n }\n\n function TypesParAdd(\n Types.Par memory a,\n Types.Par memory b\n )\n public\n pure\n returns (Types.Par memory)\n {\n return Types.add(a, b);\n }\n\n function TypesParEquals(\n Types.Par memory a,\n Types.Par memory b\n )\n public\n pure\n returns (bool)\n {\n return Types.equals(a, b);\n }\n\n function TypesParNegative(\n Types.Par memory a\n )\n public\n pure\n returns (Types.Par memory)\n {\n return Types.negative(a);\n }\n\n function TypesParIsNegative(\n Types.Par memory a\n )\n public\n pure\n returns (bool)\n {\n return Types.isNegative(a);\n }\n\n function TypesParIsPositive(\n Types.Par memory a\n )\n public\n pure\n returns (bool)\n {\n return Types.isPositive(a);\n }\n\n function TypesParIsZero(\n Types.Par memory a\n )\n public\n pure\n returns (bool)\n {\n return Types.isZero(a);\n }\n\n function TypesZeroWei()\n external\n pure\n returns (Types.Wei memory)\n {\n return Types.zeroWei();\n }\n\n function TypesWeiSub(\n Types.Wei memory a,\n Types.Wei memory b\n )\n public\n pure\n returns (Types.Wei memory)\n {\n return Types.sub(a, b);\n }\n\n function TypesWeiAdd(\n Types.Wei memory a,\n Types.Wei memory b\n )\n public\n pure\n returns (Types.Wei memory)\n {\n return Types.add(a, b);\n }\n\n function TypesWeiEquals(\n Types.Wei memory a,\n Types.Wei memory b\n )\n public\n pure\n returns (bool)\n {\n return Types.equals(a, b);\n }\n\n function TypesWeiNegative(\n Types.Wei memory a\n )\n public\n pure\n returns (Types.Wei memory)\n {\n return Types.negative(a);\n }\n\n function TypesWeiIsNegative(\n Types.Wei memory a\n )\n public\n pure\n returns (bool)\n {\n return Types.isNegative(a);\n }\n\n function TypesWeiIsPositive(\n Types.Wei memory a\n )\n public\n pure\n returns (bool)\n {\n return Types.isPositive(a);\n }\n\n function TypesWeiIsZero(\n Types.Wei memory a\n )\n public\n pure\n returns (bool)\n {\n return Types.isZero(a);\n }\n}\n",
1164
- "sourcePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestLib.sol",
1164
+ "sourcePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/testing/TestLib.sol",
1165
1165
  "ast": {
1166
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestLib.sol",
1166
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/testing/TestLib.sol",
1167
1167
  "exportedSymbols": {
1168
1168
  "TestLib": [
1169
1169
  36576
@@ -1193,7 +1193,7 @@
1193
1193
  "src": "627:33:98"
1194
1194
  },
1195
1195
  {
1196
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol",
1196
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol",
1197
1197
  "file": "../external/lib/TypedSignature.sol",
1198
1198
  "id": 36011,
1199
1199
  "nodeType": "ImportDirective",
@@ -1209,7 +1209,7 @@
1209
1209
  "unitAlias": ""
1210
1210
  },
1211
1211
  {
1212
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol",
1212
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IERC20Detailed.sol",
1213
1213
  "file": "../protocol/interfaces/IERC20Detailed.sol",
1214
1214
  "id": 36013,
1215
1215
  "nodeType": "ImportDirective",
@@ -1225,7 +1225,7 @@
1225
1225
  "unitAlias": ""
1226
1226
  },
1227
1227
  {
1228
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Math.sol",
1228
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Math.sol",
1229
1229
  "file": "../protocol/lib/Math.sol",
1230
1230
  "id": 36015,
1231
1231
  "nodeType": "ImportDirective",
@@ -1241,7 +1241,7 @@
1241
1241
  "unitAlias": ""
1242
1242
  },
1243
1243
  {
1244
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
1244
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol",
1245
1245
  "file": "../protocol/lib/Require.sol",
1246
1246
  "id": 36017,
1247
1247
  "nodeType": "ImportDirective",
@@ -1257,7 +1257,7 @@
1257
1257
  "unitAlias": ""
1258
1258
  },
1259
1259
  {
1260
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol",
1260
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Time.sol",
1261
1261
  "file": "../protocol/lib/Time.sol",
1262
1262
  "id": 36019,
1263
1263
  "nodeType": "ImportDirective",
@@ -1273,7 +1273,7 @@
1273
1273
  "unitAlias": ""
1274
1274
  },
1275
1275
  {
1276
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol",
1276
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Token.sol",
1277
1277
  "file": "../protocol/lib/Token.sol",
1278
1278
  "id": 36021,
1279
1279
  "nodeType": "ImportDirective",
@@ -1289,7 +1289,7 @@
1289
1289
  "unitAlias": ""
1290
1290
  },
1291
1291
  {
1292
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
1292
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol",
1293
1293
  "file": "../protocol/lib/Types.sol",
1294
1294
  "id": 36023,
1295
1295
  "nodeType": "ImportDirective",
@@ -8254,7 +8254,7 @@
8254
8254
  "src": "603:8090:98"
8255
8255
  },
8256
8256
  "legacyAST": {
8257
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestLib.sol",
8257
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/testing/TestLib.sol",
8258
8258
  "exportedSymbols": {
8259
8259
  "TestLib": [
8260
8260
  36576
@@ -8284,7 +8284,7 @@
8284
8284
  "src": "627:33:98"
8285
8285
  },
8286
8286
  {
8287
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol",
8287
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol",
8288
8288
  "file": "../external/lib/TypedSignature.sol",
8289
8289
  "id": 36011,
8290
8290
  "nodeType": "ImportDirective",
@@ -8300,7 +8300,7 @@
8300
8300
  "unitAlias": ""
8301
8301
  },
8302
8302
  {
8303
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol",
8303
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IERC20Detailed.sol",
8304
8304
  "file": "../protocol/interfaces/IERC20Detailed.sol",
8305
8305
  "id": 36013,
8306
8306
  "nodeType": "ImportDirective",
@@ -8316,7 +8316,7 @@
8316
8316
  "unitAlias": ""
8317
8317
  },
8318
8318
  {
8319
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Math.sol",
8319
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Math.sol",
8320
8320
  "file": "../protocol/lib/Math.sol",
8321
8321
  "id": 36015,
8322
8322
  "nodeType": "ImportDirective",
@@ -8332,7 +8332,7 @@
8332
8332
  "unitAlias": ""
8333
8333
  },
8334
8334
  {
8335
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
8335
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol",
8336
8336
  "file": "../protocol/lib/Require.sol",
8337
8337
  "id": 36017,
8338
8338
  "nodeType": "ImportDirective",
@@ -8348,7 +8348,7 @@
8348
8348
  "unitAlias": ""
8349
8349
  },
8350
8350
  {
8351
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol",
8351
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Time.sol",
8352
8352
  "file": "../protocol/lib/Time.sol",
8353
8353
  "id": 36019,
8354
8354
  "nodeType": "ImportDirective",
@@ -8364,7 +8364,7 @@
8364
8364
  "unitAlias": ""
8365
8365
  },
8366
8366
  {
8367
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol",
8367
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Token.sol",
8368
8368
  "file": "../protocol/lib/Token.sol",
8369
8369
  "id": 36021,
8370
8370
  "nodeType": "ImportDirective",
@@ -8380,7 +8380,7 @@
8380
8380
  "unitAlias": ""
8381
8381
  },
8382
8382
  {
8383
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
8383
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol",
8384
8384
  "file": "../protocol/lib/Types.sol",
8385
8385
  "id": 36023,
8386
8386
  "nodeType": "ImportDirective",
@@ -15353,11 +15353,11 @@
15353
15353
  "events": {},
15354
15354
  "links": {},
15355
15355
  "address": "0x67B5656d60a809915323Bf2C40A8bEF15A152e3e",
15356
- "transactionHash": "0x1d35137bd5b5fc9653c348cee6a1d48c27ed159210c7d5fa454cd717596b6c0c"
15356
+ "transactionHash": "0x9e260535f165bcac9ba9784f96a24c636cdeee5a64974234962bb0536d62afcb"
15357
15357
  }
15358
15358
  },
15359
15359
  "schemaVersion": "3.0.23",
15360
- "updatedAt": "2022-02-04T01:55:01.264Z",
15360
+ "updatedAt": "2022-02-07T07:18:45.418Z",
15361
15361
  "devdoc": {
15362
15362
  "author": "dYdX * Contract for testing pure library functions",
15363
15363
  "methods": {},