@coti-io/coti-contracts 0.1.0 → 1.0.2

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 (125) hide show
  1. package/.github/workflows/npm-publish.yml +2 -1
  2. package/CONTRIBUTING.md +2 -2
  3. package/LICENSE +1 -1
  4. package/README.md +18 -35
  5. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +3 -115
  6. package/contracts/mocks/README.md +1 -1
  7. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +257 -280
  8. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +93 -187
  9. package/contracts/mocks/utils/mpc/{Comparison1Tests.Contract.sol → Comparison1TestsContract.sol} +67 -115
  10. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +76 -116
  11. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +69 -164
  12. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +103 -56
  13. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +270 -0
  14. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +127 -0
  15. package/contracts/mocks/utils/mpc/README.md +12 -12
  16. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +54 -211
  17. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +165 -640
  18. package/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.sol +222 -0
  19. package/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.sol +222 -0
  20. package/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol +223 -0
  21. package/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.sol +222 -0
  22. package/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.sol +265 -0
  23. package/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol +281 -0
  24. package/contracts/onboard/AccountOnboard.sol +3 -3
  25. package/contracts/token/PrivateERC20/PrivateERC20.sol +1 -1
  26. package/contracts/token/PrivateERC721/IERC721Errors.sol +57 -0
  27. package/contracts/token/PrivateERC721/PrivateERC721.sol +1 -1
  28. package/contracts/utils/mpc/MpcCore.sol +2835 -988
  29. package/contracts/utils/mpc/MpcInterface.sol +6 -4
  30. package/hardhat.config.ts +17 -6
  31. package/package.json +20 -4
  32. package/test/token/PrivateERC20/PrivateERC20.test.ts +2 -2
  33. package/test/utils/accounts.ts +1 -1
  34. package/test/utils/mpc/Precompile.test.ts +42 -39
  35. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract.ts +374 -0
  36. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract.ts +374 -0
  37. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/index.ts +5 -0
  38. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.ts +96 -10
  39. package/typechain-types/contracts/mocks/utils/mpc/BitwiseTestsContract.ts +45 -5
  40. package/typechain-types/contracts/mocks/utils/mpc/Comparison1TestsContract.ts +374 -0
  41. package/typechain-types/contracts/mocks/utils/mpc/Comparison2TestsContract.ts +45 -5
  42. package/typechain-types/contracts/mocks/utils/mpc/MinMaxTestsContract.ts +25 -5
  43. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.ts +62 -0
  44. package/typechain-types/contracts/mocks/utils/mpc/MiscellaneousTestsContract.ts +396 -0
  45. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.ts +251 -0
  46. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract.ts +11 -8
  47. package/typechain-types/contracts/mocks/utils/mpc/TransferScalarTestsContract.ts +15 -15
  48. package/typechain-types/contracts/mocks/utils/mpc/TransferTestsContract.ts +15 -15
  49. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowance64TestsContract.ts +251 -0
  50. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowanceTestsContract.ts +250 -0
  51. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/index.ts +5 -0
  52. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.ts +389 -0
  53. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.ts +391 -0
  54. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.ts +391 -0
  55. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_64TestsContract.ts +391 -0
  56. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_8TestsContract.ts +391 -0
  57. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/index.ts +5 -0
  58. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.ts +391 -0
  59. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.ts +391 -0
  60. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.ts +306 -0
  61. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferTestsContract.ts +125 -0
  62. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferWithAllowanceTestsContract.ts +125 -0
  63. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/index.ts +5 -0
  64. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.ts +296 -0
  65. package/typechain-types/contracts/mocks/utils/mpc/index.ts +9 -6
  66. package/typechain-types/contracts/onboard/AccountOnboard.ts +9 -4
  67. package/typechain-types/contracts/token/PrivateERC721/IERC721Errors.ts +69 -0
  68. package/typechain-types/contracts/token/PrivateERC721/index.ts +1 -0
  69. package/typechain-types/contracts/utils/mpc/MpcCore.ts +84 -0
  70. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +81 -40
  71. package/typechain-types/contracts/utils/mpc/index.ts +1 -0
  72. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  73. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +1 -1
  74. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  75. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract__factory.ts +387 -0
  76. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract__factory.ts +388 -0
  77. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/index.ts +5 -0
  78. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +92 -7
  79. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +38 -2
  80. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract__factory.ts +1 -1
  81. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +387 -0
  82. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +38 -2
  83. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +15 -2
  84. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +66 -1
  85. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous2TestsContract__factory.ts +1 -1
  86. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +424 -0
  87. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +285 -0
  88. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract__factory.ts +19 -3
  89. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  90. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  91. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +4 -4
  92. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +4 -4
  93. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowance64TestsContract__factory.ts +294 -0
  94. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowanceTestsContract__factory.ts +292 -0
  95. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/index.ts +5 -0
  96. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract__factory.ts +720 -0
  97. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +724 -0
  98. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +724 -0
  99. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_64TestsContract__factory.ts +724 -0
  100. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_8TestsContract__factory.ts +724 -0
  101. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/index.ts +5 -0
  102. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +724 -0
  103. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +724 -0
  104. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +507 -0
  105. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferTestsContract__factory.ts +150 -0
  106. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferWithAllowanceTestsContract__factory.ts +150 -0
  107. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/index.ts +5 -0
  108. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +434 -0
  109. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +9 -4
  110. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  111. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +8 -2
  112. package/typechain-types/factories/contracts/token/PrivateERC721/IERC721Errors__factory.ts +128 -0
  113. package/typechain-types/factories/contracts/token/PrivateERC721/index.ts +1 -0
  114. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +77 -0
  115. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +124 -61
  116. package/typechain-types/factories/contracts/utils/mpc/index.ts +1 -0
  117. package/typechain-types/hardhat.d.ts +152 -26
  118. package/typechain-types/index.ts +20 -8
  119. package/contracts/access/DataPrivacyFramework/README.md +0 -68
  120. package/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.sol +0 -448
  121. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol +0 -81
  122. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +0 -311
  123. package/contracts/token/PrivateERC20/README.md +0 -104
  124. package/contracts/token/PrivateERC721/README.md +0 -282
  125. package/contracts/utils/mpc/README.md +0 -82
@@ -575,7 +575,7 @@ const _abi = [
575
575
  ] as const;
576
576
 
577
577
  const _bytecode =
578
- "0x60806040523480156200001157600080fd5b506040518060400160405280600781526020017f4578616d706c65000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f45584c000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b612ca6806200041b6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636352211e11610097578063a22cb46511610066578063a22cb46514610284578063b88d4fde146102a0578063c87b56dd146102bc578063e985e9c5146102ec576100f5565b80636352211e146101ea57806368862e1b1461021a57806370a082311461023657806395d89b4114610266576100f5565b8063095ea7b3116100d3578063095ea7b31461017857806318160ddd1461019457806323b872dd146101b257806342842e0e146101ce576100f5565b806301ffc9a7146100fa57806306fdde031461012a578063081812fc14610148575b600080fd5b610114600480360381019061010f9190611e3b565b61031c565b6040516101219190611e83565b60405180910390f35b610132610379565b60405161013f9190611f2e565b60405180910390f35b610162600480360381019061015d9190611f86565b61040b565b60405161016f9190611ff4565b60405180910390f35b610192600480360381019061018d919061203b565b610427565b005b61019c61043d565b6040516101a9919061208a565b60405180910390f35b6101cc60048036038101906101c791906120a5565b610447565b005b6101e860048036038101906101e391906120a5565b610549565b005b61020460048036038101906101ff9190611f86565b610569565b6040516102119190611ff4565b60405180910390f35b610234600480360381019061022f919061211c565b61057b565b005b610250600480360381019061024b9190612178565b6105fa565b60405161025d919061208a565b60405180910390f35b61026e6106b4565b60405161027b9190611f2e565b60405180910390f35b61029e600480360381019061029991906121d1565b610746565b005b6102ba60048036038101906102b59190612346565b61075c565b005b6102d660048036038101906102d19190611f86565b610779565b6040516102e391906124dd565b60405180910390f35b610306600480360381019061030191906124ff565b610801565b6040516103139190611e83565b60405180910390f35b60008060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610372575061037182610895565b5b9050919050565b6060600080546103889061256e565b80601f01602080910402602001604051908101604052809291908181526020018280546103b49061256e565b80156104015780601f106103d657610100808354040283529160200191610401565b820191906000526020600020905b8154815290600101906020018083116103e457829003601f168201915b5050505050905090565b60006104168261090f565b5061042082610997565b9050919050565b61043982826104346109d4565b6109dc565b5050565b6000600754905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104b95760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104b09190611ff4565b60405180910390fd5b60006104cd83836104c86109d4565b6109ee565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610543578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161053a9392919061259f565b60405180910390fd5b50505050565b6105648383836040518060200160405280600081525061075c565b505050565b60006105748261090f565b9050919050565b6000600754905061058c8382610a9c565b610597338284610b95565b6001600760008282546105aa9190612605565b92505081905550808373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe60405160405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361066d5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106649190611ff4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546106c39061256e565b80601f01602080910402602001604051908101604052809291908181526020018280546106ef9061256e565b801561073c5780601f106107115761010080835404028352916020019161073c565b820191906000526020600020905b81548152906001019060200180831161071f57829003601f168201915b5050505050905090565b6107586107516109d4565b8383610bbe565b5050565b610767848484610447565b61077384848484610d2d565b50505050565b610781611cff565b60066000838152602001908152602001600020600101604051806020016040529081600082018054806020026020016040519081016040528092919081815260200182805480156107f157602002820191906000526020600020905b8154815260200190600101908083116107dd575b5050505050815250509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610908575061090782610ee4565b5b9050919050565b60008061091b83610f4e565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361098e57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610985919061208a565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6109e98383836001610f8b565b505050565b600080610a726006600086815260200190815260200160002060000160405180602001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610a6457602002820191906000526020600020905b815481526020019060010190808311610a50575b505050505081525050611150565b90506000610a8186868661122e565b9050610a908686846000611448565b80925050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b0e5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610b059190611ff4565b60405180910390fd5b6000610b1c838360006109ee565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b905760006040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401610b879190611ff4565b60405180910390fd5b505050565b6000610ba982610ba4906128f8565b611584565b9050610bb88484836001611448565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c2f57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610c269190611ff4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d209190611e83565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115610ede578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610d716109d4565b8685856040518563ffffffff1660e01b8152600401610d939493929190612960565b6020604051808303816000875af1925050508015610dcf57506040513d601f19601f82011682018060405250810190610dcc91906129c1565b60015b610e53573d8060008114610dff576040519150601f19603f3d011682016040523d82523d6000602084013e610e04565b606091505b506000815103610e4b57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610e429190611ff4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610edc57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610ed39190611ff4565b60405180910390fd5b505b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080610fc45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156110f8576000610fd48461090f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561103f57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561105257506110508184610801565b155b1561109457826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161108b9190611ff4565b60405180910390fd5b81156110f657838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611158611d12565b60008260000151519050600060405180602001604052808367ffffffffffffffff8111156111895761118861221b565b5b6040519080825280602002602001820160405280156111b75781602001602082028036833780820191505090505b50815250905060005b82811015611223576111ef856000015182815181106111e2576111e16129ee565b5b60200260200101516116eb565b82600001518281518110611206576112056129ee565b5b6020026020010181815250508061121c90612a1d565b90506111c0565b508092505050919050565b60008061123a84610f4e565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461127c5761127b818486611788565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461130d576112be600085600080610f8b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611390576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff1661146984610569565b73ffffffffffffffffffffffffffffffffffffffff16036114c157826040517f868439130000000000000000000000000000000000000000000000000000000081526004016114b8919061208a565b60405180910390fd5b60006114cd838661184c565b90508115611541578060066000868152602001908152602001600020600082015181600001600082015181600001908051906020019061150e929190611d25565b5050506020820151816001016000820151816000019080519060200190611536929190611d25565b50505090505061157d565b8060200151600660008681526020019081526020016000206001016000820151816000019080519060200190611578929190611d25565b509050505b5050505050565b61158c611d12565b600082602001515190508083600001516000015151146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890612ab1565b60405180910390fd5b600060405180602001604052808367ffffffffffffffff8111156116085761160761221b565b5b6040519080825280602002602001820160405280156116365781602001602082028036833780820191505090505b508152509050611644611d72565b60005b838110156116df57856000015160000151818151811061166a576116696129ee565b5b602002602001015182600001818152505085602001518181518110611692576116916129ee565b5b602002602001015182602001819052506116ab8261187d565b836000015182815181106116c2576116c16129ee565b5b602002602001018181525050806116d890612a1d565b9050611647565b50819350505050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d2c135e560048081111561171d5761171c612ad1565b5b60f81b846040518363ffffffff1660e01b815260040161173e929190612b3b565b6020604051808303816000875af115801561175d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117819190612b79565b9050919050565b611793838383611924565b61184757600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361180857806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016117ff919061208a565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161183e929190612ba6565b60405180910390fd5b505050565b611854611d8c565b61185d836119e5565b816000018190525061186f8383611ac3565b816020018190525092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663e4f36e106004808111156118af576118ae612ad1565b5b60f81b846000015185602001516040518463ffffffff1660e01b81526004016118da93929190612bcf565b6020604051808303816000875af11580156118f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191d9190612b79565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119dc57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061199d575061199c8484610801565b5b806119db57508273ffffffffffffffffffffffffffffffffffffffff166119c383610997565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6119ed611cff565b60008260000151519050600060405180602001604052808367ffffffffffffffff811115611a1e57611a1d61221b565b5b604051908082528060200260200182016040528015611a4c5781602001602082028036833780820191505090505b50815250905060005b82811015611ab857611a8485600001518281518110611a7757611a766129ee565b5b6020026020010151611ba3565b82600001518281518110611a9b57611a9a6129ee565b5b60200260200101818152505080611ab190612a1d565b9050611a55565b508092505050919050565b611acb611cff565b60008360000151519050600060405180602001604052808367ffffffffffffffff811115611afc57611afb61221b565b5b604051908082528060200260200182016040528015611b2a5781602001602082028036833780820191505090505b50815250905060005b82811015611b9757611b6386600001518281518110611b5557611b546129ee565b5b602002602001015186611c40565b82600001518281518110611b7a57611b796129ee565b5b60200260200101818152505080611b9090612a1d565b9050611b33565b50809250505092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663c50c9c02600480811115611bd557611bd4612ad1565b5b60f81b846040518363ffffffff1660e01b8152600401611bf6929190612b3b565b6020604051808303816000875af1158015611c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c399190612b79565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff16633c6f0e68600480811115611c7257611c71612ad1565b5b60f81b8585604051602001611c879190612c55565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611cb493929190612bcf565b6020604051808303816000875af1158015611cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf79190612b79565b905092915050565b6040518060200160405280606081525090565b6040518060200160405280606081525090565b828054828255906000526020600020908101928215611d61579160200282015b82811115611d60578251825591602001919060010190611d45565b5b509050611d6e9190611db2565b5090565b604051806040016040528060008152602001606081525090565b6040518060400160405280611d9f611cff565b8152602001611dac611cff565b81525090565b5b80821115611dcb576000816000905550600101611db3565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e1881611de3565b8114611e2357600080fd5b50565b600081359050611e3581611e0f565b92915050565b600060208284031215611e5157611e50611dd9565b5b6000611e5f84828501611e26565b91505092915050565b60008115159050919050565b611e7d81611e68565b82525050565b6000602082019050611e986000830184611e74565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ed8578082015181840152602081019050611ebd565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f0082611e9e565b611f0a8185611ea9565b9350611f1a818560208601611eba565b611f2381611ee4565b840191505092915050565b60006020820190508181036000830152611f488184611ef5565b905092915050565b6000819050919050565b611f6381611f50565b8114611f6e57600080fd5b50565b600081359050611f8081611f5a565b92915050565b600060208284031215611f9c57611f9b611dd9565b5b6000611faa84828501611f71565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fde82611fb3565b9050919050565b611fee81611fd3565b82525050565b60006020820190506120096000830184611fe5565b92915050565b61201881611fd3565b811461202357600080fd5b50565b6000813590506120358161200f565b92915050565b6000806040838503121561205257612051611dd9565b5b600061206085828601612026565b925050602061207185828601611f71565b9150509250929050565b61208481611f50565b82525050565b600060208201905061209f600083018461207b565b92915050565b6000806000606084860312156120be576120bd611dd9565b5b60006120cc86828701612026565b93505060206120dd86828701612026565b92505060406120ee86828701611f71565b9150509250925092565b600080fd5b600060408284031215612113576121126120f8565b5b81905092915050565b6000806040838503121561213357612132611dd9565b5b600061214185828601612026565b925050602083013567ffffffffffffffff81111561216257612161611dde565b5b61216e858286016120fd565b9150509250929050565b60006020828403121561218e5761218d611dd9565b5b600061219c84828501612026565b91505092915050565b6121ae81611e68565b81146121b957600080fd5b50565b6000813590506121cb816121a5565b92915050565b600080604083850312156121e8576121e7611dd9565b5b60006121f685828601612026565b9250506020612207858286016121bc565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61225382611ee4565b810181811067ffffffffffffffff821117156122725761227161221b565b5b80604052505050565b6000612285611dcf565b9050612291828261224a565b919050565b600067ffffffffffffffff8211156122b1576122b061221b565b5b6122ba82611ee4565b9050602081019050919050565b82818337600083830152505050565b60006122e96122e484612296565b61227b565b90508281526020810184848401111561230557612304612216565b5b6123108482856122c7565b509392505050565b600082601f83011261232d5761232c612211565b5b813561233d8482602086016122d6565b91505092915050565b600080600080608085870312156123605761235f611dd9565b5b600061236e87828801612026565b945050602061237f87828801612026565b935050604061239087828801611f71565b925050606085013567ffffffffffffffff8111156123b1576123b0611dde565b5b6123bd87828801612318565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b600061241a61241561241084611f50565b6123f5565b611f50565b9050919050565b61242a816123ff565b82525050565b600061243c8383612421565b60208301905092915050565b6000602082019050919050565b6000612460826123c9565b61246a81856123d4565b9350612475836123e5565b8060005b838110156124a657815161248d8882612430565b975061249883612448565b925050600181019050612479565b5085935050505092915050565b600060208301600083015184820360008601526124d08282612455565b9150508091505092915050565b600060208201905081810360008301526124f781846124b3565b905092915050565b6000806040838503121561251657612515611dd9565b5b600061252485828601612026565b925050602061253585828601612026565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061258657607f821691505b6020821081036125995761259861253f565b5b50919050565b60006060820190506125b46000830186611fe5565b6125c1602083018561207b565b6125ce6040830184611fe5565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061261082611f50565b915061261b83611f50565b9250828201905080821115612633576126326125d6565b5b92915050565b600080fd5b600080fd5b600067ffffffffffffffff82111561265e5761265d61221b565b5b602082029050602081019050919050565b600080fd5b61267d81611f50565b811461268857600080fd5b50565b60008135905061269a81612674565b92915050565b60006126b36126ae84612643565b61227b565b905080838252602082019050602084028301858111156126d6576126d561266f565b5b835b818110156126ff57806126eb888261268b565b8452602084019350506020810190506126d8565b5050509392505050565b600082601f83011261271e5761271d612211565b5b813561272e8482602086016126a0565b91505092915050565b60006020828403121561274d5761274c612639565b5b612757602061227b565b9050600082013567ffffffffffffffff8111156127775761277661263e565b5b61278384828501612709565b60008301525092915050565b600067ffffffffffffffff8211156127aa576127a961221b565b5b602082029050602081019050919050565b60006127ce6127c98461278f565b61227b565b905080838252602082019050602084028301858111156127f1576127f061266f565b5b835b8181101561283857803567ffffffffffffffff81111561281657612815612211565b5b8086016128238982612318565b855260208501945050506020810190506127f3565b5050509392505050565b600082601f83011261285757612856612211565b5b81356128678482602086016127bb565b91505092915050565b60006040828403121561288657612885612639565b5b612890604061227b565b9050600082013567ffffffffffffffff8111156128b0576128af61263e565b5b6128bc84828501612737565b600083015250602082013567ffffffffffffffff8111156128e0576128df61263e565b5b6128ec84828501612842565b60208301525092915050565b60006129043683612870565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006129328261290b565b61293c8185612916565b935061294c818560208601611eba565b61295581611ee4565b840191505092915050565b60006080820190506129756000830187611fe5565b6129826020830186611fe5565b61298f604083018561207b565b81810360608301526129a18184612927565b905095945050505050565b6000815190506129bb81611e0f565b92915050565b6000602082840312156129d7576129d6611dd9565b5b60006129e5848285016129ac565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612a2882611f50565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a5a57612a596125d6565b5b600182019050919050565b7f4d50435f434f52453a20494e56414c49445f494e5055545f5445585400000000600082015250565b6000612a9b601c83611ea9565b9150612aa682612a65565b602082019050919050565b60006020820190508181036000830152612aca81612a8e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612b3581612b00565b82525050565b6000604082019050612b506000830185612b2c565b612b5d602083018461207b565b9392505050565b600081519050612b7381611f5a565b92915050565b600060208284031215612b8f57612b8e611dd9565b5b6000612b9d84828501612b64565b91505092915050565b6000604082019050612bbb6000830185611fe5565b612bc8602083018461207b565b9392505050565b6000606082019050612be46000830186612b2c565b612bf1602083018561207b565b8181036040830152612c038184612927565b9050949350505050565b60008160601b9050919050565b6000612c2582612c0d565b9050919050565b6000612c3782612c1a565b9050919050565b612c4f612c4a82611fd3565b612c2c565b82525050565b6000612c618284612c3e565b6014820191508190509291505056fea2646970667358221220965dd8f88bf3e1221f9a29ff95bb95f0eca59f2883e14695f81679ea51ade90364736f6c63430008140033";
578
+ "0x60806040523480156200001157600080fd5b50604051806040016040528060078152602001664578616d706c6560c81b8152506040518060400160405280600381526020016211561360ea1b81525081600090816200005f91906200011c565b5060016200006e82826200011c565b505050620001e8565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000a257607f821691505b602082108103620000c357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200011757600081815260208120601f850160051c81016020861015620000f25750805b601f850160051c820191505b818110156200011357828155600101620000fe565b5050505b505050565b81516001600160401b0381111562000138576200013862000077565b62000150816200014984546200008d565b84620000c9565b602080601f8311600181146200018857600084156200016f5750858301515b600019600386901b1c1916600185901b17855562000113565b600085815260208120601f198616915b82811015620001b95788860151825594840194600190910190840162000198565b5085821015620001d85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611fee80620001f86000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636352211e11610097578063a22cb46511610066578063a22cb465146101fd578063b88d4fde14610210578063c87b56dd14610223578063e985e9c51461024357600080fd5b80636352211e146101bc57806368862e1b146101cf57806370a08231146101e257806395d89b41146101f557600080fd5b8063095ea7b3116100d3578063095ea7b31461016f57806318160ddd1461018457806323b872dd1461019657806342842e0e146101a957600080fd5b806301ffc9a7146100fa57806306fdde0314610122578063081812fc14610137575b600080fd5b61010d610108366004611843565b61028c565b60405190151581526020015b60405180910390f35b61012a6102c7565b60405161011991906118c4565b61014a6101453660046118d7565b610359565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610119565b61018261017d366004611919565b61038f565b005b6007545b604051908152602001610119565b6101826101a4366004611943565b61039e565b6101826101b7366004611943565b610494565b61014a6101ca3660046118d7565b6104b4565b6101826101dd36600461197f565b6104bf565b6101886101f03660046119d4565b610537565b61012a6105b2565b61018261020b3660046119ef565b6105c1565b61018261021e366004611b78565b6105cc565b6102366102313660046118d7565b6105e3565b6040516101199190611be0565b61010d610251366004611c30565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60007fffffffff00000000000000000000000000000000000000000000000000000000821615806102c157506102c182610660565b92915050565b6060600080546102d690611c63565b80601f016020809104026020016040519081016040528092919081815260200182805461030290611c63565b801561034f5780601f106103245761010080835404028352916020019161034f565b820191906000526020600020905b81548152906001019060200180831161033257829003601f168201915b5050505050905090565b6000610364826106f7565b5060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff166102c1565b61039a828233610756565b5050565b73ffffffffffffffffffffffffffffffffffffffff82166103f3576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b6000610400838333610763565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461048e576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015260248201849052821660448201526064016103ea565b50505050565b6104af838383604051806020016040528060008152506105cc565b505050565b60006102c1826106f7565b6007546104cc83826107f9565b6104d73382846108aa565b6001600760008282546104ea9190611ce5565b9091555050604051819073ffffffffffffffffffffffffffffffffffffffff8516907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe90600090a3505050565b600073ffffffffffffffffffffffffffffffffffffffff8216610589576040517f89c62b64000000000000000000000000000000000000000000000000000000008152600060048201526024016103ea565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6060600180546102d690611c63565b61039a3383836108cc565b6105d784848461039e565b61048e848484846109c9565b604080516020808201835260608252600084815260068252839020835160019091018054808402830186018652928201838152939491939092849284919084018282801561065057602002820191906000526020600020905b81548152602001906001019080831161063c575b5050505050815250509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806102c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102c1565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806102c1576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018490526024016103ea565b6104af8383836001610bc0565b60008281526006602090815260408083208151815480850282018401845293810184815285946107d29492939284929184918401828280156107c457602002820191906000526020600020905b8154815260200190600101908083116107b0575b505050505081525050610d8b565b905060006107e1868686610e5b565b90506107f08686846000610fd8565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216610849576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024016103ea565b600061085783836000610763565b905073ffffffffffffffffffffffffffffffffffffffff8116156104af576040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600060048201526024016103ea565b60006108bd6108b883611da1565b6110d4565b905061048e8484836001610fd8565b73ffffffffffffffffffffffffffffffffffffffff8216610931576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016103ea565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83163b1561048e576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290610a3e903390889087908790600401611e91565b6020604051808303816000875af1925050508015610a97575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9491810190611eda565b60015b610b26573d808015610ac5576040519150601f19603f3d011682016040523d82523d6000602084013e610aca565b606091505b508051600003610b1e576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016103ea565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014610bb9576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016103ea565b5050505050565b8080610be1575073ffffffffffffffffffffffffffffffffffffffff821615155b15610d36576000610bf1846106f7565b905073ffffffffffffffffffffffffffffffffffffffff831615801590610c4457508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610c83575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209387168352929052205460ff16155b15610cd2576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016103ea565b8115610d3457838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040805160208101909152606081528151516040805160208101909152600090808367ffffffffffffffff811115610dc557610dc5611a20565b604051908082528060200260200182016040528015610dee578160200160208202803683370190505b509052905060005b82811015610e5357610e2485600001518281518110610e1757610e17611ef7565b6020026020010151611254565b8251805183908110610e3857610e38611ef7565b6020908102919091010152610e4c81611f26565b9050610df6565b509392505050565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff90811690831615610e9557610e958184866112f1565b73ffffffffffffffffffffffffffffffffffffffff811615610f0b57610ebf600085600080610bc0565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff851615610f545773ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6000610fe3846104b4565b73ffffffffffffffffffffffffffffffffffffffff1603611033576040517f86843913000000000000000000000000000000000000000000000000000000008152600481018490526024016103ea565b600061103f83866113a1565b9050811561109e5760008481526006602090815260409091208251805180518594849261107292849291909101906117b2565b505050602082810151805180519192600185019261109392849201906117b2565b505050905050610bb9565b602080820151600086815260068352604090208151805192936001909201926110ca92849201906117b2565b5050505050505050565b604080516020810190915260608152602082015151825151518114611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4d50435f434f52453a20494e56414c49445f494e5055545f544558540000000060448201526064016103ea565b600060405180602001604052808367ffffffffffffffff81111561117b5761117b611a20565b6040519080825280602002602001820160405280156111a4578160200160208202803683370190505b50905260408051808201909152600081526060602082015290915060005b8381101561124a578551518051829081106111df576111df611ef7565b602090810291909101810151835286015180518290811061120257611202611ef7565b6020026020010151826020018190525061121b826113ec565b835180518390811061122f5761122f611ef7565b602090810291909101015261124381611f26565b90506111c2565b5090949350505050565b6000606463d2c135e560045b60f81b846040518363ffffffff1660e01b81526004016112ae9291907fff00000000000000000000000000000000000000000000000000000000000000929092168252602082015260400190565b6020604051808303816000875af11580156112cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c19190611f5e565b6112fc838383611455565b6104af5773ffffffffffffffffffffffffffffffffffffffff8316611350576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018290526024016103ea565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602481018290526044016103ea565b6113cc6040805160608082018352818301818152825282516020818101909452908152909182015290565b6113d58361151c565b81526113e183836115e4565b602082015292915050565b805160208201516040517fe4f36e1000000000000000000000000000000000000000000000000000000000815260009260649263e4f36e10926112ae927f0400000000000000000000000000000000000000000000000000000000000000929091600401611f77565b600073ffffffffffffffffffffffffffffffffffffffff83161580159061151457508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114e3575073ffffffffffffffffffffffffffffffffffffffff80851660009081526005602090815260408083209387168352929052205460ff165b80611514575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116145b949350505050565b6040805160208101909152606081528151516040805160208101909152600090808367ffffffffffffffff81111561155657611556611a20565b60405190808252806020026020018201604052801561157f578160200160208202803683370190505b509052905060005b82811015610e53576115b5856000015182815181106115a8576115a8611ef7565b60200260200101516116b6565b82518051839081106115c9576115c9611ef7565b60209081029190910101526115dd81611f26565b9050611587565b6040805160208101909152606081528251516040805160208101909152600090808367ffffffffffffffff81111561161e5761161e611a20565b604051908082528060200260200182016040528015611647578160200160208202803683370190505b509052905060005b828110156116ad5761167e8660000151828151811061167057611670611ef7565b6020026020010151866116c6565b825180518390811061169257611692611ef7565b60209081029190910101526116a681611f26565b905061164f565b50949350505050565b6000606463c50c9c026004611260565b60408051606083901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201528151601481830301815260348201928390527f3c6f0e6800000000000000000000000000000000000000000000000000000000909252600091606491633c6f0e6891611768917f0400000000000000000000000000000000000000000000000000000000000000918891603801611f77565b6020604051808303816000875af1158015611787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ab9190611f5e565b9392505050565b8280548282559060005260206000209081019282156117ed579160200282015b828111156117ed5782518255916020019190600101906117d2565b506117f99291506117fd565b5090565b5b808211156117f957600081556001016117fe565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461184057600080fd5b50565b60006020828403121561185557600080fd5b81356117ab81611812565b6000815180845260005b818110156118865760208185018101518683018201520161186a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006117ab6020830184611860565b6000602082840312156118e957600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461191457600080fd5b919050565b6000806040838503121561192c57600080fd5b611935836118f0565b946020939093013593505050565b60008060006060848603121561195857600080fd5b611961846118f0565b925061196f602085016118f0565b9150604084013590509250925092565b6000806040838503121561199257600080fd5b61199b836118f0565b9150602083013567ffffffffffffffff8111156119b757600080fd5b8301604081860312156119c957600080fd5b809150509250929050565b6000602082840312156119e657600080fd5b6117ab826118f0565b60008060408385031215611a0257600080fd5b611a0b836118f0565b9150602083013580151581146119c957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611a7257611a72611a20565b60405290565b6040516020810167ffffffffffffffff81118282101715611a7257611a72611a20565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611ae257611ae2611a20565b604052919050565b600082601f830112611afb57600080fd5b813567ffffffffffffffff811115611b1557611b15611a20565b611b4660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611a9b565b818152846020838601011115611b5b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215611b8e57600080fd5b611b97856118f0565b9350611ba5602086016118f0565b925060408501359150606085013567ffffffffffffffff811115611bc857600080fd5b611bd487828801611aea565b91505092959194509250565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015611c255783518252928401926001929092019190840190611c05565b509695505050505050565b60008060408385031215611c4357600080fd5b611c4c836118f0565b9150611c5a602084016118f0565b90509250929050565b600181811c90821680611c7757607f821691505b602082108103611cb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156102c1576102c1611cb6565b600067ffffffffffffffff821115611d1257611d12611a20565b5060051b60200190565b600082601f830112611d2d57600080fd5b81356020611d42611d3d83611cf8565b611a9b565b82815260059290921b84018101918181019086841115611d6157600080fd5b8286015b84811015611c2557803567ffffffffffffffff811115611d855760008081fd5b611d938986838b0101611aea565b845250918301918301611d65565b600060408236031215611db357600080fd5b611dbb611a4f565b823567ffffffffffffffff80821115611dd357600080fd5b81850191506020808336031215611de957600080fd5b611df1611a78565b833583811115611e0057600080fd5b939093019236601f850112611e1457600080fd5b8335611e22611d3d82611cf8565b81815260059190911b85018301908381019036831115611e4157600080fd5b958401955b82871015611e5f57863582529584019590840190611e46565b83525050845285810135925081831115611e7857600080fd5b611e8436848801611d1c565b9084015250909392505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611ed06080830184611860565b9695505050505050565b600060208284031215611eec57600080fd5b81516117ab81611812565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f5757611f57611cb6565b5060010190565b600060208284031215611f7057600080fd5b5051919050565b7fff00000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006107f0606083018461186056fea2646970667358221220cc26bc6d9ced9e4744a3233a9a5d9431b62ca1cc8dcc9da7b21c718be4de44fa64736f6c63430008130033";
579
579
 
580
580
  type PrivateERC721URIStorageMockConstructorParams =
581
581
  | [signer?: Signer]
@@ -0,0 +1,387 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import {
5
+ Contract,
6
+ ContractFactory,
7
+ ContractTransactionResponse,
8
+ Interface,
9
+ } from "ethers";
10
+ import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
11
+ import type { NonPayableOverrides } from "../../../../../../common";
12
+ import type {
13
+ ArithmeticTestsContract,
14
+ ArithmeticTestsContractInterface,
15
+ } from "../../../../../../contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract";
16
+
17
+ const _abi = [
18
+ {
19
+ inputs: [
20
+ {
21
+ internalType: "uint8",
22
+ name: "a",
23
+ type: "uint8",
24
+ },
25
+ {
26
+ internalType: "uint8",
27
+ name: "b",
28
+ type: "uint8",
29
+ },
30
+ ],
31
+ name: "addTest",
32
+ outputs: [
33
+ {
34
+ internalType: "uint8",
35
+ name: "",
36
+ type: "uint8",
37
+ },
38
+ ],
39
+ stateMutability: "nonpayable",
40
+ type: "function",
41
+ },
42
+ {
43
+ inputs: [
44
+ {
45
+ components: [
46
+ {
47
+ internalType: "gtUint16",
48
+ name: "res16_16",
49
+ type: "uint256",
50
+ },
51
+ {
52
+ internalType: "gtUint16",
53
+ name: "res8_16",
54
+ type: "uint256",
55
+ },
56
+ {
57
+ internalType: "gtUint16",
58
+ name: "res16_8",
59
+ type: "uint256",
60
+ },
61
+ ],
62
+ internalType: "struct ArithmeticTestsContract.Check16",
63
+ name: "check16",
64
+ type: "tuple",
65
+ },
66
+ ],
67
+ name: "decryptAndCompareResults16",
68
+ outputs: [
69
+ {
70
+ internalType: "uint16",
71
+ name: "",
72
+ type: "uint16",
73
+ },
74
+ ],
75
+ stateMutability: "nonpayable",
76
+ type: "function",
77
+ },
78
+ {
79
+ inputs: [
80
+ {
81
+ components: [
82
+ {
83
+ internalType: "gtUint32",
84
+ name: "res32_32",
85
+ type: "uint256",
86
+ },
87
+ {
88
+ internalType: "gtUint32",
89
+ name: "res8_32",
90
+ type: "uint256",
91
+ },
92
+ {
93
+ internalType: "gtUint32",
94
+ name: "res32_8",
95
+ type: "uint256",
96
+ },
97
+ {
98
+ internalType: "gtUint32",
99
+ name: "res16_32",
100
+ type: "uint256",
101
+ },
102
+ {
103
+ internalType: "gtUint32",
104
+ name: "res32_16",
105
+ type: "uint256",
106
+ },
107
+ ],
108
+ internalType: "struct ArithmeticTestsContract.Check32",
109
+ name: "check32",
110
+ type: "tuple",
111
+ },
112
+ ],
113
+ name: "decryptAndCompareResults32",
114
+ outputs: [
115
+ {
116
+ internalType: "uint32",
117
+ name: "",
118
+ type: "uint32",
119
+ },
120
+ ],
121
+ stateMutability: "nonpayable",
122
+ type: "function",
123
+ },
124
+ {
125
+ inputs: [
126
+ {
127
+ components: [
128
+ {
129
+ internalType: "gtUint64",
130
+ name: "res64_64",
131
+ type: "uint256",
132
+ },
133
+ {
134
+ internalType: "gtUint64",
135
+ name: "res8_64",
136
+ type: "uint256",
137
+ },
138
+ {
139
+ internalType: "gtUint64",
140
+ name: "res64_8",
141
+ type: "uint256",
142
+ },
143
+ {
144
+ internalType: "gtUint64",
145
+ name: "res16_64",
146
+ type: "uint256",
147
+ },
148
+ {
149
+ internalType: "gtUint64",
150
+ name: "res64_16",
151
+ type: "uint256",
152
+ },
153
+ {
154
+ internalType: "gtUint64",
155
+ name: "res32_64",
156
+ type: "uint256",
157
+ },
158
+ {
159
+ internalType: "gtUint64",
160
+ name: "res64_32",
161
+ type: "uint256",
162
+ },
163
+ ],
164
+ internalType: "struct ArithmeticTestsContract.Check64",
165
+ name: "check64",
166
+ type: "tuple",
167
+ },
168
+ ],
169
+ name: "decryptAndCompareResults64",
170
+ outputs: [
171
+ {
172
+ internalType: "uint64",
173
+ name: "",
174
+ type: "uint64",
175
+ },
176
+ ],
177
+ stateMutability: "nonpayable",
178
+ type: "function",
179
+ },
180
+ {
181
+ inputs: [],
182
+ name: "getAddResult",
183
+ outputs: [
184
+ {
185
+ internalType: "uint8",
186
+ name: "",
187
+ type: "uint8",
188
+ },
189
+ ],
190
+ stateMutability: "view",
191
+ type: "function",
192
+ },
193
+ {
194
+ inputs: [],
195
+ name: "getMulResult",
196
+ outputs: [
197
+ {
198
+ internalType: "uint8",
199
+ name: "",
200
+ type: "uint8",
201
+ },
202
+ ],
203
+ stateMutability: "view",
204
+ type: "function",
205
+ },
206
+ {
207
+ inputs: [],
208
+ name: "getSubResult",
209
+ outputs: [
210
+ {
211
+ internalType: "uint8",
212
+ name: "",
213
+ type: "uint8",
214
+ },
215
+ ],
216
+ stateMutability: "view",
217
+ type: "function",
218
+ },
219
+ {
220
+ inputs: [
221
+ {
222
+ internalType: "uint8",
223
+ name: "a",
224
+ type: "uint8",
225
+ },
226
+ {
227
+ internalType: "uint8",
228
+ name: "b",
229
+ type: "uint8",
230
+ },
231
+ ],
232
+ name: "mulTest",
233
+ outputs: [
234
+ {
235
+ internalType: "uint8",
236
+ name: "",
237
+ type: "uint8",
238
+ },
239
+ ],
240
+ stateMutability: "nonpayable",
241
+ type: "function",
242
+ },
243
+ {
244
+ inputs: [
245
+ {
246
+ components: [
247
+ {
248
+ internalType: "gtUint8",
249
+ name: "a8_s",
250
+ type: "uint256",
251
+ },
252
+ {
253
+ internalType: "gtUint8",
254
+ name: "b8_s",
255
+ type: "uint256",
256
+ },
257
+ {
258
+ internalType: "gtUint16",
259
+ name: "a16_s",
260
+ type: "uint256",
261
+ },
262
+ {
263
+ internalType: "gtUint16",
264
+ name: "b16_s",
265
+ type: "uint256",
266
+ },
267
+ {
268
+ internalType: "gtUint32",
269
+ name: "a32_s",
270
+ type: "uint256",
271
+ },
272
+ {
273
+ internalType: "gtUint32",
274
+ name: "b32_s",
275
+ type: "uint256",
276
+ },
277
+ {
278
+ internalType: "gtUint64",
279
+ name: "a64_s",
280
+ type: "uint256",
281
+ },
282
+ {
283
+ internalType: "gtUint64",
284
+ name: "b64_s",
285
+ type: "uint256",
286
+ },
287
+ ],
288
+ internalType: "struct ArithmeticTestsContract.AllGTCastingValues",
289
+ name: "castingValues",
290
+ type: "tuple",
291
+ },
292
+ {
293
+ internalType: "uint8",
294
+ name: "a",
295
+ type: "uint8",
296
+ },
297
+ {
298
+ internalType: "uint8",
299
+ name: "b",
300
+ type: "uint8",
301
+ },
302
+ ],
303
+ name: "setPublicValues",
304
+ outputs: [],
305
+ stateMutability: "nonpayable",
306
+ type: "function",
307
+ },
308
+ {
309
+ inputs: [
310
+ {
311
+ internalType: "uint8",
312
+ name: "a",
313
+ type: "uint8",
314
+ },
315
+ {
316
+ internalType: "uint8",
317
+ name: "b",
318
+ type: "uint8",
319
+ },
320
+ ],
321
+ name: "subTest",
322
+ outputs: [
323
+ {
324
+ internalType: "uint8",
325
+ name: "",
326
+ type: "uint8",
327
+ },
328
+ ],
329
+ stateMutability: "nonpayable",
330
+ type: "function",
331
+ },
332
+ ] as const;
333
+
334
+ const _bytecode =
335
+ "0x608060405234801561001057600080fd5b50615ad580620000216000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806380f937bc1161006657806380f937bc14610181578063971bbe6f146101b1578063acb38169146101cf578063d3e4744d146101ff578063ebb571fd1461021d5761009e565b8063202cdc8f146100a357806324ad7b30146100d35780632e544aa0146100f15780634f5941bc146101215780635e60e5c014610151575b600080fd5b6100bd60048036038101906100b89190614815565b610239565b6040516100ca9190614864565b60405180910390f35b6100db610831565b6040516100e89190614864565b60405180910390f35b61010b600480360381019061010691906149aa565b610847565b60405161011891906149f4565b60405180910390f35b61013b60048036038101906101369190614815565b6108d7565b6040516101489190614864565b60405180910390f35b61016b60048036038101906101669190614815565b610e21565b6040516101789190614864565b60405180910390f35b61019b60048036038101906101969190614aef565b61136a565b6040516101a89190614b3f565b60405180910390f35b6101b96114be565b6040516101c69190614864565b60405180910390f35b6101e960048036038101906101e49190614c12565b6114d4565b6040516101f69190614c5e565b60405180910390f35b6102076115b2565b6040516102149190614864565b60405180910390f35b61023760048036038101906102329190614d6f565b6115c8565b005b60006102436146fb565b61024b614740565b610253614761565b61025b614790565b6102668488886115c8565b61028061027b8560000151866020015161166f565b611706565b600060026101000a81548160ff021916908360ff1602179055506102ac846040015185606001516117a4565b8360000181815250506102c78460000151856060015161183b565b8360200181815250506102e2846040015185602001516118d3565b83604001818152505060006102f684610847565b90508061ffff16600060029054906101000a900460ff1660ff1614610350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034790614e22565b60405180910390fd5b61036285608001518660a0015161196b565b83600001818152505061037d85600001518660a00151611a02565b83602001818152505061039885608001518660200151611a9a565b8360400181815250506103b385604001518660a00151611b32565b8360600181815250506103ce85608001518660600151611bca565b83608001818152505060006103e2846114d4565b90508063ffffffff16600060029054906101000a900460ff1660ff161461043e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043590614e8e565b60405180910390fd5b6104508660c001518760e00151611c62565b83600001818152505061046b86600001518760e00151611cf9565b8360200181815250506104868660c001518760200151611d91565b8360400181815250506104a186604001518760e00151611e29565b8360600181815250506104bc8660c001518760600151611ec1565b8360800181815250506104d786608001518760e00151611f59565b8360a00181815250506104f28660c001518760a00151611ff1565b8360c001818152505060006105068461136a565b90508067ffffffffffffffff16600060029054906101000a900460ff1660ff1614610566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055d90614efa565b60405180910390fd5b61057c6105778b8960200151612089565b611706565b60ff16600060029054906101000a900460ff1660ff161480156105c857506105b06105ab88600001518b612123565b611706565b60ff16600060029054906101000a900460ff1660ff16145b610607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fe90614f8c565b60405180910390fd5b61062061061b8b60ff1689606001516121bd565b612258565b61ffff16600060029054906101000a900460ff1660ff16148015610671575061065861065388604001518b60ff166122f6565b612258565b61ffff16600060029054906101000a900460ff1660ff16145b6106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a79061501e565b60405180910390fd5b6106c96106c48b60ff168960a00151612391565b61242e565b63ffffffff16600060029054906101000a900460ff1660ff1614801561071e57506107036106fe88608001518b60ff166124cc565b61242e565b63ffffffff16600060029054906101000a900460ff1660ff16145b61075d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610754906150b0565b60405180910390fd5b6107766107718b60ff168960e00151612569565b61260a565b67ffffffffffffffff16600060029054906101000a900460ff1660ff161480156107d357506107b46107af8860c001518b60ff166126a7565b61260a565b67ffffffffffffffff16600060029054906101000a900460ff1660ff16145b610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990615142565b60405180910390fd5b600060029054906101000a900460ff1697505050505050505092915050565b60008060009054906101000a900460ff16905090565b6000806108578360000151612258565b90506108668360200151612258565b61ffff168161ffff1614801561088f57506108848360400151612258565b61ffff168161ffff16145b6108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c5906151fa565b60405180910390fd5b80915050919050565b60006108e16146fb565b6108e9614740565b6108f1614761565b6108f9614790565b6109048488886115c8565b600061092061091b86600001518760200151612748565b611706565b905080600060016101000a81548160ff021916908360ff16021790555061094f856040015186606001516127df565b84600001818152505061096a85600001518660600151612876565b8460200181815250506109858560400151866020015161290e565b846040018181525050600061099985610847565b90508160ff168161ffff16146109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90615266565b60405180910390fd5b6109f686608001518760a001516129a6565b846000018181525050610a1186600001518760a00151612a3d565b846020018181525050610a2c86608001518760200151612ad5565b846040018181525050610a4786604001518760a00151612b6d565b846060018181525050610a6286608001518760600151612c05565b8460800181815250506000610a76856114d4565b90508063ffffffff168360ff1614610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba906152d2565b60405180910390fd5b610ad58760c001518860e00151612c9d565b846000018181525050610af087600001518860e00151612d34565b846020018181525050610b0b8760c001518860200151612dcc565b846040018181525050610b2687604001518860e00151612e64565b846060018181525050610b418760c001518860600151612efc565b846080018181525050610b5c87608001518860e00151612f94565b8460a0018181525050610b778760c001518860a0015161302c565b8460c00181815250506000610b8b8561136a565b90508067ffffffffffffffff168460ff1614610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39061533e565b60405180910390fd5b610bf2610bed8c8a602001516130c4565b611706565b60ff168460ff16148015610c205750610c17610c1289600001518c61315e565b611706565b60ff168460ff16145b610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906153d0565b60405180910390fd5b610c78610c738c60ff168a606001516131f8565b612258565b61ffff168460ff16148015610cab5750610ca1610c9c89604001518c60ff16613293565b612258565b61ffff168460ff16145b610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190615462565b60405180910390fd5b610d03610cfe8c60ff168a60a0015161332e565b61242e565b63ffffffff168460ff16148015610d3a5750610d2e610d2989608001518c60ff166133cb565b61242e565b63ffffffff168460ff16145b610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d70906154f4565b60405180910390fd5b610d92610d8d8c60ff168a60e00151613468565b61260a565b67ffffffffffffffff168460ff16148015610dd15750610dc1610dbc8960c001518c60ff16613509565b61260a565b67ffffffffffffffff168460ff16145b610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790615586565b60405180910390fd5b839850505050505050505092915050565b6000610e2b6146fb565b610e33614740565b610e3b614761565b610e43614790565b610e4e8488886115c8565b6000610e6a610e65866000015187602001516135aa565b611706565b9050806000806101000a81548160ff021916908360ff160217905550610e9885604001518660600151613641565b846000018181525050610eb3856000015186606001516136d8565b846020018181525050610ece85604001518660200151613770565b8460400181815250506000610ee285610847565b90508160ff168161ffff1614610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f24906155f2565b60405180910390fd5b610f3f86608001518760a00151613808565b846000018181525050610f5a86600001518760a0015161389f565b846020018181525050610f7586608001518760200151613937565b846040018181525050610f9086604001518760a001516139cf565b846060018181525050610fab86608001518760600151613a67565b8460800181815250506000610fbf856114d4565b90508063ffffffff168360ff161461100c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110039061565e565b60405180910390fd5b61101e8760c001518860e00151613aff565b84600001818152505061103987600001518860e00151613b96565b8460200181815250506110548760c001518860200151613c2e565b84604001818152505061106f87604001518860e00151613cc6565b84606001818152505061108a8760c001518860600151613d5e565b8460800181815250506110a587608001518860e00151613df6565b8460a00181815250506110c08760c001518860a00151613e8e565b8460c001818152505060006110d48561136a565b90508067ffffffffffffffff168460ff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c906156ca565b60405180910390fd5b61113b6111368c8a60200151613f26565b611706565b60ff168460ff16148015611169575061116061115b89600001518c613fc0565b611706565b60ff168460ff16145b6111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f9061575c565b60405180910390fd5b6111c16111bc8c60ff168a6060015161405a565b612258565b61ffff168460ff161480156111f457506111ea6111e589604001518c60ff166140f5565b612258565b61ffff168460ff16145b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a906157ee565b60405180910390fd5b61124c6112478c60ff168a60a00151614190565b61242e565b63ffffffff168460ff16148015611283575061127761127289608001518c60ff1661422d565b61242e565b63ffffffff168460ff16145b6112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990615880565b60405180910390fd5b6112db6112d68c60ff168a60e001516142ca565b61260a565b67ffffffffffffffff168460ff1614801561131a575061130a6113058960c001518c60ff1661436b565b61260a565b67ffffffffffffffff168460ff16145b611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090615912565b60405180910390fd5b839850505050505050505092915050565b60008061137a836000015161260a565b9050611389836020015161260a565b67ffffffffffffffff168167ffffffffffffffff161480156113ca57506113b3836040015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b80156113f557506113de836080015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b80156114205750611409836060015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b801561144b57506114348360c0015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b8015611476575061145f8360a0015161260a565b67ffffffffffffffff168167ffffffffffffffff16145b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac906151fa565b60405180910390fd5b80915050919050565b60008060019054906101000a900460ff16905090565b6000806114e4836000015161242e565b90506114f3836020015161242e565b63ffffffff168163ffffffff161480156115245750611515836040015161242e565b63ffffffff168163ffffffff16145b80156115475750611538836080015161242e565b63ffffffff168163ffffffff16145b801561156a575061155b836060015161242e565b63ffffffff168163ffffffff16145b6115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906151fa565b60405180910390fd5b80915050919050565b60008060029054906101000a900460ff16905090565b6115d18261440c565b8360000181815250506115e38161440c565b8360200181815250506115f88260ff166144ad565b83604001818152505061160d8160ff166144ad565b8360600181815250506116228260ff1661454f565b8360800181815250506116378160ff1661454f565b8360a001818152505061164c8260ff166145f3565b8360c00181815250506116618160ff166145f3565b8360e0018181525050505050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461169b600180600061469a565b85856040518463ffffffff1660e01b81526004016116bb9392919061597c565b6020604051808303816000875af11580156116da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fe91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16630cfed5616001600481111561173957611738615a0c565b5b60f81b846040518363ffffffff1660e01b815260040161175a929190615a76565b6020604051808303816000875af1158015611779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179d91906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46117d0600280600061469a565b85856040518463ffffffff1660e01b81526004016117f09392919061597c565b6020604051808303816000875af115801561180f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183391906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461186860016002600061469a565b85856040518463ffffffff1660e01b81526004016118889392919061597c565b6020604051808303816000875af11580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461190060026001600061469a565b85856040518463ffffffff1660e01b81526004016119209392919061597c565b6020604051808303816000875af115801561193f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196391906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611997600380600061469a565b85856040518463ffffffff1660e01b81526004016119b79392919061597c565b6020604051808303816000875af11580156119d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fa91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611a2f60016003600061469a565b85856040518463ffffffff1660e01b8152600401611a4f9392919061597c565b6020604051808303816000875af1158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611ac760036001600061469a565b85856040518463ffffffff1660e01b8152600401611ae79392919061597c565b6020604051808303816000875af1158015611b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2a91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611b5f60026003600061469a565b85856040518463ffffffff1660e01b8152600401611b7f9392919061597c565b6020604051808303816000875af1158015611b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611bf760036002600061469a565b85856040518463ffffffff1660e01b8152600401611c179392919061597c565b6020604051808303816000875af1158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611c8e600480600061469a565b85856040518463ffffffff1660e01b8152600401611cae9392919061597c565b6020604051808303816000875af1158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611d2660016004600061469a565b85856040518463ffffffff1660e01b8152600401611d469392919061597c565b6020604051808303816000875af1158015611d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611dbe60046001600061469a565b85856040518463ffffffff1660e01b8152600401611dde9392919061597c565b6020604051808303816000875af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611e5660026004600061469a565b85856040518463ffffffff1660e01b8152600401611e769392919061597c565b6020604051808303816000875af1158015611e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611eee60046002600061469a565b85856040518463ffffffff1660e01b8152600401611f0e9392919061597c565b6020604051808303816000875af1158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4611f8660036004600061469a565b85856040518463ffffffff1660e01b8152600401611fa69392919061597c565b6020604051808303816000875af1158015611fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461201e60046003600061469a565b85856040518463ffffffff1660e01b815260040161203e9392919061597c565b6020604051808303816000875af115801561205d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46120b5600180600161469a565b8560ff16856040518463ffffffff1660e01b81526004016120d89392919061597c565b6020604051808303816000875af11580156120f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211b91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb461214f600180600261469a565b858560ff166040518463ffffffff1660e01b81526004016121729392919061597c565b6020604051808303816000875af1158015612191573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46121e9600280600161469a565b8561ffff16856040518463ffffffff1660e01b815260040161220d9392919061597c565b6020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16630cfed5616002600481111561228b5761228a615a0c565b5b60f81b846040518363ffffffff1660e01b81526004016122ac929190615a76565b6020604051808303816000875af11580156122cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ef91906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4612322600280600261469a565b858561ffff166040518463ffffffff1660e01b81526004016123469392919061597c565b6020604051808303816000875af1158015612365573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46123bd600380600161469a565b8563ffffffff16856040518463ffffffff1660e01b81526004016123e39392919061597c565b6020604051808303816000875af1158015612402573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16630cfed5616003600481111561246157612460615a0c565b5b60f81b846040518363ffffffff1660e01b8152600401612482929190615a76565b6020604051808303816000875af11580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c591906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46124f8600380600261469a565b858563ffffffff166040518463ffffffff1660e01b815260040161251e9392919061597c565b6020604051808303816000875af115801561253d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb4612595600480600161469a565b8567ffffffffffffffff16856040518463ffffffff1660e01b81526004016125bf9392919061597c565b6020604051808303816000875af11580156125de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16630cfed56160048081111561263c5761263b615a0c565b5b60f81b846040518363ffffffff1660e01b815260040161265d929190615a76565b6020604051808303816000875af115801561267c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a091906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663f1d21bb46126d3600480600261469a565b858567ffffffffffffffff166040518463ffffffff1660e01b81526004016126fd9392919061597c565b6020604051808303816000875af115801561271c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612774600180600061469a565b85856040518463ffffffff1660e01b81526004016127949392919061597c565b6020604051808303816000875af11580156127b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d791906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261280b600280600061469a565b85856040518463ffffffff1660e01b815260040161282b9392919061597c565b6020604051808303816000875af115801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26128a360016002600061469a565b85856040518463ffffffff1660e01b81526004016128c39392919061597c565b6020604051808303816000875af11580156128e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261293b60026001600061469a565b85856040518463ffffffff1660e01b815260040161295b9392919061597c565b6020604051808303816000875af115801561297a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299e91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26129d2600380600061469a565b85856040518463ffffffff1660e01b81526004016129f29392919061597c565b6020604051808303816000875af1158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612a6a60016003600061469a565b85856040518463ffffffff1660e01b8152600401612a8a9392919061597c565b6020604051808303816000875af1158015612aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612acd91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612b0260036001600061469a565b85856040518463ffffffff1660e01b8152600401612b229392919061597c565b6020604051808303816000875af1158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612b9a60026003600061469a565b85856040518463ffffffff1660e01b8152600401612bba9392919061597c565b6020604051808303816000875af1158015612bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfd91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612c3260036002600061469a565b85856040518463ffffffff1660e01b8152600401612c529392919061597c565b6020604051808303816000875af1158015612c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612cc9600480600061469a565b85856040518463ffffffff1660e01b8152600401612ce99392919061597c565b6020604051808303816000875af1158015612d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2c91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612d6160016004600061469a565b85856040518463ffffffff1660e01b8152600401612d819392919061597c565b6020604051808303816000875af1158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc491906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612df960046001600061469a565b85856040518463ffffffff1660e01b8152600401612e199392919061597c565b6020604051808303816000875af1158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612e9160026004600061469a565b85856040518463ffffffff1660e01b8152600401612eb19392919061597c565b6020604051808303816000875af1158015612ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef491906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612f2960046002600061469a565b85856040518463ffffffff1660e01b8152600401612f499392919061597c565b6020604051808303816000875af1158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2612fc160036004600061469a565b85856040518463ffffffff1660e01b8152600401612fe19392919061597c565b6020604051808303816000875af1158015613000573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302491906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261305960046003600061469a565b85856040518463ffffffff1660e01b81526004016130799392919061597c565b6020604051808303816000875af1158015613098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bc91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26130f0600180600161469a565b8560ff16856040518463ffffffff1660e01b81526004016131139392919061597c565b6020604051808303816000875af1158015613132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261318a600180600261469a565b858560ff166040518463ffffffff1660e01b81526004016131ad9392919061597c565b6020604051808303816000875af11580156131cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2613224600280600161469a565b8561ffff16856040518463ffffffff1660e01b81526004016132489392919061597c565b6020604051808303816000875af1158015613267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328b91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26132bf600180600261469a565b858561ffff166040518463ffffffff1660e01b81526004016132e39392919061597c565b6020604051808303816000875af1158015613302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf261335a600380600161469a565b8563ffffffff16856040518463ffffffff1660e01b81526004016133809392919061597c565b6020604051808303816000875af115801561339f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c391906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf26133f7600380600261469a565b858563ffffffff166040518463ffffffff1660e01b815260040161341d9392919061597c565b6020604051808303816000875af115801561343c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2613494600480600161469a565b8567ffffffffffffffff16856040518463ffffffff1660e01b81526004016134be9392919061597c565b6020604051808303816000875af11580156134dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350191906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663371d1bf2613535600480600261469a565b858567ffffffffffffffff166040518463ffffffff1660e01b815260040161355f9392919061597c565b6020604051808303816000875af115801561357e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506135d6600180600061469a565b85856040518463ffffffff1660e01b81526004016135f69392919061597c565b6020604051808303816000875af1158015613615573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363991906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d015061366d600280600061469a565b85856040518463ffffffff1660e01b815260040161368d9392919061597c565b6020604051808303816000875af11580156136ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d015061370560016002600061469a565b85856040518463ffffffff1660e01b81526004016137259392919061597c565b6020604051808303816000875af1158015613744573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376891906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d015061379d60026001600061469a565b85856040518463ffffffff1660e01b81526004016137bd9392919061597c565b6020604051808303816000875af11580156137dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380091906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613834600380600061469a565b85856040518463ffffffff1660e01b81526004016138549392919061597c565b6020604051808303816000875af1158015613873573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389791906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506138cc60016003600061469a565b85856040518463ffffffff1660e01b81526004016138ec9392919061597c565b6020604051808303816000875af115801561390b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392f91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d015061396460036001600061469a565b85856040518463ffffffff1660e01b81526004016139849392919061597c565b6020604051808303816000875af11580156139a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c791906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506139fc60026003600061469a565b85856040518463ffffffff1660e01b8152600401613a1c9392919061597c565b6020604051808303816000875af1158015613a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5f91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613a9460036002600061469a565b85856040518463ffffffff1660e01b8152600401613ab49392919061597c565b6020604051808303816000875af1158015613ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af791906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613b2b600480600061469a565b85856040518463ffffffff1660e01b8152600401613b4b9392919061597c565b6020604051808303816000875af1158015613b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8e91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613bc360016004600061469a565b85856040518463ffffffff1660e01b8152600401613be39392919061597c565b6020604051808303816000875af1158015613c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613c5b60046001600061469a565b85856040518463ffffffff1660e01b8152600401613c7b9392919061597c565b6020604051808303816000875af1158015613c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cbe91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613cf360026004600061469a565b85856040518463ffffffff1660e01b8152600401613d139392919061597c565b6020604051808303816000875af1158015613d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613d8b60046002600061469a565b85856040518463ffffffff1660e01b8152600401613dab9392919061597c565b6020604051808303816000875af1158015613dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dee91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613e2360036004600061469a565b85856040518463ffffffff1660e01b8152600401613e439392919061597c565b6020604051808303816000875af1158015613e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e8691906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613ebb60046003600061469a565b85856040518463ffffffff1660e01b8152600401613edb9392919061597c565b6020604051808303816000875af1158015613efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1e91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613f52600180600161469a565b8560ff16856040518463ffffffff1660e01b8152600401613f759392919061597c565b6020604051808303816000875af1158015613f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb891906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150613fec600180600261469a565b858560ff166040518463ffffffff1660e01b815260040161400f9392919061597c565b6020604051808303816000875af115801561402e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150614086600280600161469a565b8561ffff16856040518463ffffffff1660e01b81526004016140aa9392919061597c565b6020604051808303816000875af11580156140c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ed91906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150614121600280600261469a565b858561ffff166040518463ffffffff1660e01b81526004016141459392919061597c565b6020604051808303816000875af1158015614164573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418891906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506141bc600380600161469a565b8563ffffffff16856040518463ffffffff1660e01b81526004016141e29392919061597c565b6020604051808303816000875af1158015614201573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422591906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150614259600380600261469a565b858563ffffffff166040518463ffffffff1660e01b815260040161427f9392919061597c565b6020604051808303816000875af115801561429e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c291906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d01506142f6600480600161469a565b8567ffffffffffffffff16856040518463ffffffff1660e01b81526004016143209392919061597c565b6020604051808303816000875af115801561433f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061436391906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16638c5d0150614397600480600261469a565b858567ffffffffffffffff166040518463ffffffff1660e01b81526004016143c19392919061597c565b6020604051808303816000875af11580156143e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440491906159df565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b606001600481111561443f5761443e615a0c565b5b60f81b8460ff166040518363ffffffff1660e01b8152600401614463929190615a76565b6020604051808303816000875af1158015614482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a691906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b60600260048111156144e0576144df615a0c565b5b60f81b8461ffff166040518363ffffffff1660e01b8152600401614505929190615a76565b6020604051808303816000875af1158015614524573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454891906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b606003600481111561458257614581615a0c565b5b60f81b8463ffffffff166040518363ffffffff1660e01b81526004016145a9929190615a76565b6020604051808303816000875af11580156145c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ec91906159df565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b6060048081111561462557614624615a0c565b5b60f81b8467ffffffffffffffff166040518363ffffffff1660e01b8152600401614650929190615a76565b6020604051808303816000875af115801561466f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061469391906159df565b9050919050565b60008160028111156146af576146ae615a0c565b5b60ff1660088460048111156146c7576146c6615a0c565b5b61ffff16901b61ffff1660108660048111156146e6576146e5615a0c565b5b62ffffff16901b171760e81b90509392505050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600060ff82169050919050565b6147f2816147dc565b81146147fd57600080fd5b50565b60008135905061480f816147e9565b92915050565b6000806040838503121561482c5761482b6147d7565b5b600061483a85828601614800565b925050602061484b85828601614800565b9150509250929050565b61485e816147dc565b82525050565b60006020820190506148796000830184614855565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148cd82614884565b810181811067ffffffffffffffff821117156148ec576148eb614895565b5b80604052505050565b60006148ff6147cd565b905061490b82826148c4565b919050565b6000819050919050565b61492381614910565b811461492e57600080fd5b50565b6000813590506149408161491a565b92915050565b60006060828403121561495c5761495b61487f565b5b61496660606148f5565b9050600061497684828501614931565b600083015250602061498a84828501614931565b602083015250604061499e84828501614931565b60408301525092915050565b6000606082840312156149c0576149bf6147d7565b5b60006149ce84828501614946565b91505092915050565b600061ffff82169050919050565b6149ee816149d7565b82525050565b6000602082019050614a0960008301846149e5565b92915050565b614a1881614910565b8114614a2357600080fd5b50565b600081359050614a3581614a0f565b92915050565b600060e08284031215614a5157614a5061487f565b5b614a5b60e06148f5565b90506000614a6b84828501614a26565b6000830152506020614a7f84828501614a26565b6020830152506040614a9384828501614a26565b6040830152506060614aa784828501614a26565b6060830152506080614abb84828501614a26565b60808301525060a0614acf84828501614a26565b60a08301525060c0614ae384828501614a26565b60c08301525092915050565b600060e08284031215614b0557614b046147d7565b5b6000614b1384828501614a3b565b91505092915050565b600067ffffffffffffffff82169050919050565b614b3981614b1c565b82525050565b6000602082019050614b546000830184614b30565b92915050565b614b6381614910565b8114614b6e57600080fd5b50565b600081359050614b8081614b5a565b92915050565b600060a08284031215614b9c57614b9b61487f565b5b614ba660a06148f5565b90506000614bb684828501614b71565b6000830152506020614bca84828501614b71565b6020830152506040614bde84828501614b71565b6040830152506060614bf284828501614b71565b6060830152506080614c0684828501614b71565b60808301525092915050565b600060a08284031215614c2857614c276147d7565b5b6000614c3684828501614b86565b91505092915050565b600063ffffffff82169050919050565b614c5881614c3f565b82525050565b6000602082019050614c736000830184614c4f565b92915050565b614c8281614910565b8114614c8d57600080fd5b50565b600081359050614c9f81614c79565b92915050565b60006101008284031215614cbc57614cbb61487f565b5b614cc76101006148f5565b90506000614cd784828501614c90565b6000830152506020614ceb84828501614c90565b6020830152506040614cff84828501614931565b6040830152506060614d1384828501614931565b6060830152506080614d2784828501614b71565b60808301525060a0614d3b84828501614b71565b60a08301525060c0614d4f84828501614a26565b60c08301525060e0614d6384828501614a26565b60e08301525092915050565b60008060006101408486031215614d8957614d886147d7565b5b6000614d9786828701614ca5565b935050610100614da986828701614800565b925050610120614dbb86828701614800565b9150509250925092565b600082825260208201905092915050565b7f6d756c546573743a2063617374203136206661696c6564000000000000000000600082015250565b6000614e0c601783614dc5565b9150614e1782614dd6565b602082019050919050565b60006020820190508181036000830152614e3b81614dff565b9050919050565b7f6d756c546573743a2063617374203332206661696c6564000000000000000000600082015250565b6000614e78601783614dc5565b9150614e8382614e42565b602082019050919050565b60006020820190508181036000830152614ea781614e6b565b9050919050565b7f6d756c546573743a2063617374203634206661696c6564000000000000000000600082015250565b6000614ee4601783614dc5565b9150614eef82614eae565b602082019050919050565b60006020820190508181036000830152614f1381614ed7565b9050919050565b7f6d756c546573743a2074657374203820626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614f76602783614dc5565b9150614f8182614f1a565b604082019050919050565b60006020820190508181036000830152614fa581614f69565b9050919050565b7f6d756c546573743a207465737420313620626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b6000615008602883614dc5565b915061501382614fac565b604082019050919050565b6000602082019050818103600083015261503781614ffb565b9050919050565b7f6d756c546573743a207465737420333220626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061509a602883614dc5565b91506150a58261503e565b604082019050919050565b600060208201905081810360008301526150c98161508d565b9050919050565b7f6d756c546573743a207465737420363420626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061512c602883614dc5565b9150615137826150d0565b604082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960008201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260208201527f6573756c74730000000000000000000000000000000000000000000000000000604082015250565b60006151e4604683614dc5565b91506151ef82615162565b606082019050919050565b60006020820190508181036000830152615213816151d7565b9050919050565b7f737562546573743a2063617374203136206661696c6564000000000000000000600082015250565b6000615250601783614dc5565b915061525b8261521a565b602082019050919050565b6000602082019050818103600083015261527f81615243565b9050919050565b7f737562546573743a2063617374203332206661696c6564000000000000000000600082015250565b60006152bc601783614dc5565b91506152c782615286565b602082019050919050565b600060208201905081810360008301526152eb816152af565b9050919050565b7f737562546573743a2063617374203634206661696c6564000000000000000000600082015250565b6000615328601783614dc5565b9150615333826152f2565b602082019050919050565b600060208201905081810360008301526153578161531b565b9050919050565b7f737562546573743a2074657374203820626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b60006153ba602783614dc5565b91506153c58261535e565b604082019050919050565b600060208201905081810360008301526153e9816153ad565b9050919050565b7f737562546573743a207465737420313620626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061544c602883614dc5565b9150615457826153f0565b604082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f737562546573743a207465737420333220626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b60006154de602883614dc5565b91506154e982615482565b604082019050919050565b6000602082019050818103600083015261550d816154d1565b9050919050565b7f737562546573743a207465737420363420626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b6000615570602883614dc5565b915061557b82615514565b604082019050919050565b6000602082019050818103600083015261559f81615563565b9050919050565b7f616464546573743a2063617374203136206661696c6564000000000000000000600082015250565b60006155dc601783614dc5565b91506155e7826155a6565b602082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b7f616464546573743a2063617374203332206661696c6564000000000000000000600082015250565b6000615648601783614dc5565b915061565382615612565b602082019050919050565b600060208201905081810360008301526156778161563b565b9050919050565b7f616464546573743a2063617374203634206661696c6564000000000000000000600082015250565b60006156b4601783614dc5565b91506156bf8261567e565b602082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f616464546573743a2074657374203820626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000615746602783614dc5565b9150615751826156ea565b604082019050919050565b6000602082019050818103600083015261577581615739565b9050919050565b7f616464546573743a207465737420313620626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b60006157d8602883614dc5565b91506157e38261577c565b604082019050919050565b60006020820190508181036000830152615807816157cb565b9050919050565b7f616464546573743a207465737420333220626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061586a602883614dc5565b91506158758261580e565b604082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f616464546573743a207465737420363420626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b60006158fc602883614dc5565b9150615907826158a0565b604082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b60007fffffff000000000000000000000000000000000000000000000000000000000082169050919050565b61596781615932565b82525050565b61597681614910565b82525050565b6000606082019050615991600083018661595e565b61599e602083018561596d565b6159ab604083018461596d565b949350505050565b6159bc81614910565b81146159c757600080fd5b50565b6000815190506159d9816159b3565b92915050565b6000602082840312156159f5576159f46147d7565b5b6000615a03848285016159ca565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b615a7081615a3b565b82525050565b6000604082019050615a8b6000830185615a67565b615a98602083018461596d565b939250505056fea2646970667358221220b3183000ad81aa1d7b04a7becf5f46a6656e869b91031feed1dba1823839281764736f6c63430008140033";
336
+
337
+ type ArithmeticTestsContractConstructorParams =
338
+ | [signer?: Signer]
339
+ | ConstructorParameters<typeof ContractFactory>;
340
+
341
+ const isSuperArgs = (
342
+ xs: ArithmeticTestsContractConstructorParams
343
+ ): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
344
+
345
+ export class ArithmeticTestsContract__factory extends ContractFactory {
346
+ constructor(...args: ArithmeticTestsContractConstructorParams) {
347
+ if (isSuperArgs(args)) {
348
+ super(...args);
349
+ } else {
350
+ super(_abi, _bytecode, args[0]);
351
+ }
352
+ }
353
+
354
+ override getDeployTransaction(
355
+ overrides?: NonPayableOverrides & { from?: string }
356
+ ): Promise<ContractDeployTransaction> {
357
+ return super.getDeployTransaction(overrides || {});
358
+ }
359
+ override deploy(overrides?: NonPayableOverrides & { from?: string }) {
360
+ return super.deploy(overrides || {}) as Promise<
361
+ ArithmeticTestsContract & {
362
+ deploymentTransaction(): ContractTransactionResponse;
363
+ }
364
+ >;
365
+ }
366
+ override connect(
367
+ runner: ContractRunner | null
368
+ ): ArithmeticTestsContract__factory {
369
+ return super.connect(runner) as ArithmeticTestsContract__factory;
370
+ }
371
+
372
+ static readonly bytecode = _bytecode;
373
+ static readonly abi = _abi;
374
+ static createInterface(): ArithmeticTestsContractInterface {
375
+ return new Interface(_abi) as ArithmeticTestsContractInterface;
376
+ }
377
+ static connect(
378
+ address: string,
379
+ runner?: ContractRunner | null
380
+ ): ArithmeticTestsContract {
381
+ return new Contract(
382
+ address,
383
+ _abi,
384
+ runner
385
+ ) as unknown as ArithmeticTestsContract;
386
+ }
387
+ }