@tradetrust-yl/token-registry 5.1.2 → 5.2.1

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 (255) hide show
  1. package/dist/app.js +566 -0
  2. package/dist/artifacts/TitleEscrow.sol/TitleEscrow.json +83 -9
  3. package/dist/artifacts/TitleEscrowFactory.sol/TitleEscrowFactory.json +22 -3
  4. package/dist/artifacts/TradeTrustToken.sol/TradeTrustToken.json +125 -2
  5. package/dist/artifacts/base/RegistryAccess.sol/RegistryAccess.dbg.json +1 -1
  6. package/dist/artifacts/base/SBTUpgradeable.sol/SBTUpgradeable.dbg.json +1 -1
  7. package/dist/artifacts/base/SBTUpgradeable.sol/SBTUpgradeable.json +2 -2
  8. package/dist/artifacts/base/TradeTrustSBT.sol/TradeTrustSBT.dbg.json +1 -1
  9. package/dist/artifacts/base/TradeTrustSBT.sol/TradeTrustSBT.json +43 -0
  10. package/dist/artifacts/base/TradeTrustTokenBase.sol/TradeTrustTokenBase.dbg.json +1 -1
  11. package/dist/artifacts/base/TradeTrustTokenBase.sol/TradeTrustTokenBase.json +86 -0
  12. package/dist/artifacts/base/TradeTrustTokenBaseURI.sol/TradeTrustTokenBaseURI.dbg.json +1 -1
  13. package/dist/artifacts/base/TradeTrustTokenBaseURI.sol/TradeTrustTokenBaseURI.json +43 -0
  14. package/dist/artifacts/base/TradeTrustTokenBurnable.sol/TradeTrustTokenBurnable.dbg.json +1 -1
  15. package/dist/artifacts/base/TradeTrustTokenBurnable.sol/TradeTrustTokenBurnable.json +43 -0
  16. package/dist/artifacts/base/TradeTrustTokenMintable.sol/TradeTrustTokenMintable.dbg.json +1 -1
  17. package/dist/artifacts/base/TradeTrustTokenMintable.sol/TradeTrustTokenMintable.json +86 -0
  18. package/dist/artifacts/base/TradeTrustTokenRestorable.sol/TradeTrustTokenRestorable.dbg.json +1 -1
  19. package/dist/artifacts/base/TradeTrustTokenRestorable.sol/TradeTrustTokenRestorable.json +43 -0
  20. package/dist/artifacts/interfaces/IERC721MetadataUpgradeable.sol/IERC721MetadataUpgradeable.dbg.json +1 -1
  21. package/dist/artifacts/interfaces/ISBTUpgradeable.sol/ISBTUpgradeable.dbg.json +1 -1
  22. package/dist/artifacts/interfaces/ITitleEscrow.sol/ITitleEscrow.dbg.json +1 -1
  23. package/dist/artifacts/interfaces/ITitleEscrow.sol/ITitleEscrow.json +42 -6
  24. package/dist/artifacts/interfaces/ITitleEscrowFactory.sol/ITitleEscrowFactory.dbg.json +1 -1
  25. package/dist/artifacts/interfaces/ITitleEscrowSignable.sol/ITitleEscrowSignable.dbg.json +1 -1
  26. package/dist/artifacts/interfaces/ITitleEscrowSignable.sol/ITitleEscrowSignable.json +42 -6
  27. package/dist/artifacts/interfaces/ITradeTrustSBT.sol/ITradeTrustSBT.dbg.json +1 -1
  28. package/dist/artifacts/interfaces/ITradeTrustToken.sol/ITradeTrustToken.dbg.json +1 -1
  29. package/dist/artifacts/interfaces/ITradeTrustToken.sol/ITradeTrustToken.json +18 -0
  30. package/dist/artifacts/interfaces/ITradeTrustTokenBurnable.sol/ITradeTrustTokenBurnable.dbg.json +1 -1
  31. package/dist/artifacts/interfaces/ITradeTrustTokenMintable.sol/ITradeTrustTokenMintable.dbg.json +1 -1
  32. package/dist/artifacts/interfaces/ITradeTrustTokenMintable.sol/ITradeTrustTokenMintable.json +18 -0
  33. package/dist/artifacts/interfaces/ITradeTrustTokenRestorable.sol/ITradeTrustTokenRestorable.dbg.json +1 -1
  34. package/dist/artifacts/interfaces/RegistryAccessErrors.sol/RegistryAccessErrors.dbg.json +1 -1
  35. package/dist/artifacts/interfaces/SigHelperErrors.sol/SigHelperErrors.dbg.json +1 -1
  36. package/dist/artifacts/interfaces/TDocDeployerErrors.sol/TDocDeployerErrors.dbg.json +1 -1
  37. package/dist/artifacts/interfaces/TitleEscrowErrors.sol/TitleEscrowErrors.dbg.json +1 -1
  38. package/dist/artifacts/interfaces/TitleEscrowFactoryErrors.sol/TitleEscrowFactoryErrors.dbg.json +1 -1
  39. package/dist/artifacts/interfaces/TitleEscrowSignableErrors.sol/TitleEscrowSignableErrors.dbg.json +1 -1
  40. package/dist/artifacts/interfaces/TradeTrustTokenErrors.sol/TradeTrustTokenErrors.dbg.json +1 -1
  41. package/dist/artifacts/interfaces/TradeTrustTokenErrors.sol/TradeTrustTokenErrors.json +5 -0
  42. package/dist/artifacts/mocks/ERC721ReceiverMock.sol/ERC721ReceiverMock.dbg.json +1 -1
  43. package/dist/artifacts/mocks/ERC721ReceiverMock.sol/ERC721ReceiverMock.json +2 -2
  44. package/dist/artifacts/mocks/SBTUpgradeableMock.sol/SBTUpgradeableMock.dbg.json +1 -1
  45. package/dist/artifacts/mocks/SBTUpgradeableMock.sol/SBTUpgradeableMock.json +2 -2
  46. package/dist/artifacts/mocks/SigHelperMock.sol/SigHelperMock.dbg.json +1 -1
  47. package/dist/artifacts/mocks/SimpleCaller.sol/SimpleCaller.dbg.json +1 -1
  48. package/dist/artifacts/mocks/TitleEscrowFactoryCallerMock.sol/TitleEscrowFactoryCallerMock.dbg.json +1 -1
  49. package/dist/artifacts/mocks/TitleEscrowFactoryGetterMock.sol/TitleEscrowFactoryGetterMock.dbg.json +1 -1
  50. package/dist/artifacts/mocks/TitleEscrowMock.sol/TitleEscrowMock.dbg.json +1 -1
  51. package/dist/artifacts/mocks/TitleEscrowMock.sol/TitleEscrowMock.json +83 -9
  52. package/dist/artifacts/mocks/TradeTrustTokenMock.sol/TradeTrustTokenMock.dbg.json +1 -1
  53. package/dist/artifacts/mocks/TradeTrustTokenMock.sol/TradeTrustTokenMock.json +125 -2
  54. package/dist/artifacts/presets/TitleEscrowSignable.sol/TitleEscrowSignable.dbg.json +1 -1
  55. package/dist/artifacts/presets/TitleEscrowSignable.sol/TitleEscrowSignable.json +87 -8
  56. package/dist/artifacts/presets/TradeTrustTokenStandard.sol/TradeTrustTokenStandard.dbg.json +1 -1
  57. package/dist/artifacts/presets/TradeTrustTokenStandard.sol/TradeTrustTokenStandard.json +88 -2
  58. package/dist/artifacts/utils/SigHelper.sol/SigHelper.dbg.json +1 -1
  59. package/dist/artifacts/utils/TDocDeployer.sol/TDocDeployer.dbg.json +1 -1
  60. package/dist/artifacts/utils/TDocDeployer.sol/TDocDeployer.json +2 -2
  61. package/dist/constants/default-address.js +5 -3
  62. package/dist/constants/role-hash.js +5 -3
  63. package/dist/contracts/@openzeppelin/contracts/index.ts +2 -0
  64. package/dist/contracts/@openzeppelin/contracts/metatx/ERC2771Context.js +5 -0
  65. package/dist/contracts/@openzeppelin/contracts/metatx/ERC2771Context.ts +111 -0
  66. package/dist/contracts/@openzeppelin/contracts/metatx/index.js +5 -0
  67. package/dist/contracts/@openzeppelin/contracts/{proxy/utils → metatx}/index.ts +1 -1
  68. package/dist/contracts/@openzeppelin/contracts/proxy/Clones.js +5 -0
  69. package/dist/contracts/@openzeppelin/contracts/proxy/Clones.ts +70 -0
  70. package/dist/contracts/@openzeppelin/contracts/proxy/index.ts +1 -2
  71. package/dist/contracts/@openzeppelin/contracts/utils/Create2.js +5 -0
  72. package/dist/contracts/@openzeppelin/contracts/utils/Create2.ts +70 -0
  73. package/dist/contracts/@openzeppelin/contracts/utils/index.ts +1 -0
  74. package/dist/contracts/@openzeppelin/contracts-upgradeable/index.ts +2 -0
  75. package/dist/contracts/@openzeppelin/{contracts/proxy/utils/Initializable.ts → contracts-upgradeable/metatx/ERC2771ContextUpgradeable.ts} +46 -5
  76. package/dist/contracts/@openzeppelin/contracts-upgradeable/metatx/index.ts +5 -0
  77. package/dist/contracts/contracts/TitleEscrow.ts +62 -12
  78. package/dist/contracts/contracts/TitleEscrowFactory.ts +18 -1
  79. package/dist/contracts/contracts/TradeTrustToken.js +2 -1
  80. package/dist/contracts/contracts/TradeTrustToken.ts +120 -0
  81. package/dist/contracts/contracts/base/TradeTrustSBT.ts +29 -0
  82. package/dist/contracts/contracts/base/TradeTrustTokenBase.js +2 -1
  83. package/dist/contracts/contracts/base/TradeTrustTokenBase.ts +88 -0
  84. package/dist/contracts/contracts/base/TradeTrustTokenBaseURI.ts +29 -0
  85. package/dist/contracts/contracts/base/TradeTrustTokenBurnable.ts +29 -0
  86. package/dist/contracts/contracts/base/TradeTrustTokenMintable.js +2 -1
  87. package/dist/contracts/contracts/base/TradeTrustTokenMintable.ts +88 -0
  88. package/dist/contracts/contracts/base/TradeTrustTokenRestorable.ts +29 -0
  89. package/dist/contracts/contracts/interfaces/ITitleEscrow.ts +30 -12
  90. package/dist/contracts/contracts/interfaces/ITitleEscrowSignable.ts +30 -12
  91. package/dist/contracts/contracts/interfaces/ITradeTrustToken.ts +22 -0
  92. package/dist/contracts/contracts/interfaces/ITradeTrustTokenMintable.ts +22 -1
  93. package/dist/contracts/contracts/mocks/TitleEscrowMock.ts +62 -12
  94. package/dist/contracts/contracts/mocks/TradeTrustTokenMock.js +2 -1
  95. package/dist/contracts/contracts/mocks/TradeTrustTokenMock.ts +120 -0
  96. package/dist/contracts/contracts/presets/TitleEscrowSignable.ts +62 -12
  97. package/dist/contracts/contracts/presets/TradeTrustTokenStandard.js +2 -1
  98. package/dist/contracts/contracts/presets/TradeTrustTokenStandard.ts +88 -0
  99. package/dist/contracts/factories/@openzeppelin/contracts/access/IAccessControl__factory.js +3 -1
  100. package/dist/contracts/factories/@openzeppelin/contracts/index.js +4 -3
  101. package/dist/contracts/factories/@openzeppelin/contracts/index.ts +1 -0
  102. package/dist/contracts/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.js +3 -1
  103. package/dist/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.js +3 -1
  104. package/dist/contracts/factories/@openzeppelin/contracts/interfaces/index.js +1 -2
  105. package/dist/contracts/factories/@openzeppelin/contracts/metatx/ERC2771Context__factory.js +45 -0
  106. package/dist/contracts/factories/@openzeppelin/contracts/metatx/ERC2771Context__factory.ts +58 -0
  107. package/dist/contracts/factories/@openzeppelin/contracts/metatx/index.js +12 -0
  108. package/dist/contracts/factories/@openzeppelin/contracts/{proxy/utils → metatx}/index.ts +1 -1
  109. package/dist/contracts/factories/@openzeppelin/contracts/proxy/Clones__factory.js +44 -0
  110. package/dist/contracts/factories/@openzeppelin/contracts/proxy/Clones__factory.ts +70 -0
  111. package/dist/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.js +4 -2
  112. package/dist/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.ts +1 -1
  113. package/dist/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.js +3 -1
  114. package/dist/contracts/factories/@openzeppelin/contracts/proxy/index.js +9 -5
  115. package/dist/contracts/factories/@openzeppelin/contracts/proxy/index.ts +1 -1
  116. package/dist/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.js +3 -1
  117. package/dist/contracts/factories/@openzeppelin/contracts/token/index.js +1 -2
  118. package/dist/contracts/factories/@openzeppelin/contracts/utils/Address__factory.js +4 -2
  119. package/dist/contracts/factories/@openzeppelin/contracts/utils/Address__factory.ts +1 -1
  120. package/dist/contracts/factories/@openzeppelin/contracts/utils/Create2__factory.js +44 -0
  121. package/dist/contracts/factories/@openzeppelin/contracts/utils/Create2__factory.ts +70 -0
  122. package/dist/contracts/factories/@openzeppelin/contracts/utils/Errors__factory.js +3 -1
  123. package/dist/contracts/factories/@openzeppelin/contracts/utils/Pausable__factory.js +3 -1
  124. package/dist/contracts/factories/@openzeppelin/contracts/utils/Strings__factory.js +12 -2
  125. package/dist/contracts/factories/@openzeppelin/contracts/utils/Strings__factory.ts +11 -1
  126. package/dist/contracts/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.js +3 -1
  127. package/dist/contracts/factories/@openzeppelin/contracts/utils/index.js +8 -2
  128. package/dist/contracts/factories/@openzeppelin/contracts/utils/index.ts +1 -0
  129. package/dist/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.js +3 -1
  130. package/dist/contracts/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.js +3 -1
  131. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable__factory.js +3 -1
  132. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.js +3 -1
  133. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/index.js +4 -3
  134. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/index.ts +1 -0
  135. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable__factory.js +63 -0
  136. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable__factory.ts +85 -0
  137. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/metatx/index.js +12 -0
  138. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/metatx/index.ts +5 -0
  139. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/proxy/index.js +1 -2
  140. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.js +3 -1
  141. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.js +3 -1
  142. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.js +3 -1
  143. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable__factory.js +3 -1
  144. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/utils/index.js +1 -2
  145. package/dist/contracts/factories/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable__factory.js +3 -1
  146. package/dist/contracts/factories/@openzeppelin/index.js +1 -2
  147. package/dist/contracts/factories/contracts/TitleEscrowFactory__factory.js +23 -7
  148. package/dist/contracts/factories/contracts/TitleEscrowFactory__factory.ts +34 -6
  149. package/dist/contracts/factories/contracts/TitleEscrow__factory.js +72 -12
  150. package/dist/contracts/factories/contracts/TitleEscrow__factory.ts +95 -12
  151. package/dist/contracts/factories/contracts/TradeTrustToken__factory.js +102 -6
  152. package/dist/contracts/factories/contracts/TradeTrustToken__factory.ts +128 -1
  153. package/dist/contracts/factories/contracts/base/RegistryAccess__factory.js +3 -1
  154. package/dist/contracts/factories/contracts/base/SBTUpgradeable__factory.js +4 -2
  155. package/dist/contracts/factories/contracts/base/SBTUpgradeable__factory.ts +1 -1
  156. package/dist/contracts/factories/contracts/base/TradeTrustSBT__factory.js +35 -1
  157. package/dist/contracts/factories/contracts/base/TradeTrustSBT__factory.ts +43 -0
  158. package/dist/contracts/factories/contracts/base/TradeTrustTokenBaseURI__factory.js +35 -1
  159. package/dist/contracts/factories/contracts/base/TradeTrustTokenBaseURI__factory.ts +43 -0
  160. package/dist/contracts/factories/contracts/base/TradeTrustTokenBase__factory.js +69 -1
  161. package/dist/contracts/factories/contracts/base/TradeTrustTokenBase__factory.ts +86 -0
  162. package/dist/contracts/factories/contracts/base/TradeTrustTokenBurnable__factory.js +35 -1
  163. package/dist/contracts/factories/contracts/base/TradeTrustTokenBurnable__factory.ts +43 -0
  164. package/dist/contracts/factories/contracts/base/TradeTrustTokenMintable__factory.js +69 -1
  165. package/dist/contracts/factories/contracts/base/TradeTrustTokenMintable__factory.ts +86 -0
  166. package/dist/contracts/factories/contracts/base/TradeTrustTokenRestorable__factory.js +35 -1
  167. package/dist/contracts/factories/contracts/base/TradeTrustTokenRestorable__factory.ts +43 -0
  168. package/dist/contracts/factories/contracts/index.js +1 -2
  169. package/dist/contracts/factories/contracts/interfaces/IERC721MetadataUpgradeable__factory.js +3 -1
  170. package/dist/contracts/factories/contracts/interfaces/ISBTUpgradeable__factory.js +3 -1
  171. package/dist/contracts/factories/contracts/interfaces/ITitleEscrowFactory__factory.js +3 -1
  172. package/dist/contracts/factories/contracts/interfaces/ITitleEscrowSignable__factory.js +38 -6
  173. package/dist/contracts/factories/contracts/interfaces/ITitleEscrowSignable__factory.ts +42 -6
  174. package/dist/contracts/factories/contracts/interfaces/ITitleEscrow__factory.js +38 -6
  175. package/dist/contracts/factories/contracts/interfaces/ITitleEscrow__factory.ts +42 -6
  176. package/dist/contracts/factories/contracts/interfaces/ITradeTrustSBT__factory.js +3 -1
  177. package/dist/contracts/factories/contracts/interfaces/ITradeTrustTokenBurnable__factory.js +3 -1
  178. package/dist/contracts/factories/contracts/interfaces/ITradeTrustTokenMintable__factory.js +17 -1
  179. package/dist/contracts/factories/contracts/interfaces/ITradeTrustTokenMintable__factory.ts +18 -0
  180. package/dist/contracts/factories/contracts/interfaces/ITradeTrustTokenRestorable__factory.js +3 -1
  181. package/dist/contracts/factories/contracts/interfaces/ITradeTrustToken__factory.js +17 -1
  182. package/dist/contracts/factories/contracts/interfaces/ITradeTrustToken__factory.ts +18 -0
  183. package/dist/contracts/factories/contracts/interfaces/RegistryAccessErrors__factory.js +3 -1
  184. package/dist/contracts/factories/contracts/interfaces/SigHelperErrors__factory.js +3 -1
  185. package/dist/contracts/factories/contracts/interfaces/TDocDeployerErrors__factory.js +3 -1
  186. package/dist/contracts/factories/contracts/interfaces/TitleEscrowErrors__factory.js +3 -1
  187. package/dist/contracts/factories/contracts/interfaces/TitleEscrowFactoryErrors__factory.js +3 -1
  188. package/dist/contracts/factories/contracts/interfaces/TitleEscrowSignableErrors__factory.js +3 -1
  189. package/dist/contracts/factories/contracts/interfaces/TradeTrustTokenErrors__factory.js +7 -1
  190. package/dist/contracts/factories/contracts/interfaces/TradeTrustTokenErrors__factory.ts +5 -0
  191. package/dist/contracts/factories/contracts/mocks/ERC721ReceiverMock__factory.js +4 -2
  192. package/dist/contracts/factories/contracts/mocks/ERC721ReceiverMock__factory.ts +1 -1
  193. package/dist/contracts/factories/contracts/mocks/SBTUpgradeableMock__factory.js +4 -2
  194. package/dist/contracts/factories/contracts/mocks/SBTUpgradeableMock__factory.ts +1 -1
  195. package/dist/contracts/factories/contracts/mocks/SigHelperMock__factory.js +3 -1
  196. package/dist/contracts/factories/contracts/mocks/SimpleCaller__factory.js +3 -1
  197. package/dist/contracts/factories/contracts/mocks/TitleEscrowFactoryCallerMock__factory.js +3 -1
  198. package/dist/contracts/factories/contracts/mocks/TitleEscrowFactoryGetterMock__factory.js +3 -1
  199. package/dist/contracts/factories/contracts/mocks/TitleEscrowMock__factory.js +72 -12
  200. package/dist/contracts/factories/contracts/mocks/TitleEscrowMock__factory.ts +95 -12
  201. package/dist/contracts/factories/contracts/mocks/TradeTrustTokenMock__factory.js +102 -6
  202. package/dist/contracts/factories/contracts/mocks/TradeTrustTokenMock__factory.ts +128 -1
  203. package/dist/contracts/factories/contracts/presets/TitleEscrowSignable__factory.js +75 -11
  204. package/dist/contracts/factories/contracts/presets/TitleEscrowSignable__factory.ts +99 -11
  205. package/dist/contracts/factories/contracts/presets/TradeTrustTokenStandard__factory.js +70 -2
  206. package/dist/contracts/factories/contracts/presets/TradeTrustTokenStandard__factory.ts +87 -1
  207. package/dist/contracts/factories/contracts/utils/SigHelper__factory.js +3 -1
  208. package/dist/contracts/factories/contracts/utils/TDocDeployer__factory.js +4 -2
  209. package/dist/contracts/factories/contracts/utils/TDocDeployer__factory.ts +1 -1
  210. package/dist/contracts/factories/index.js +1 -2
  211. package/dist/contracts/hardhat.d.ts +70 -16
  212. package/dist/contracts/index.js +29 -2
  213. package/dist/contracts/index.ts +8 -0
  214. package/dist/index.js +1 -2
  215. package/dist/models/common.js +5 -0
  216. package/dist/models/freightForwarder.js +5 -0
  217. package/dist/models/shipOwner.js +5 -0
  218. package/dist/services/admin/adminRepository.js +77 -0
  219. package/dist/services/crypto.js +215 -0
  220. package/dist/services/database.js +36 -0
  221. package/dist/services/freightForwarder/freightForwarderRepository.js +94 -0
  222. package/dist/services/shipOwner/shipOwnerController.js +77 -0
  223. package/dist/services/shipOwner/shipOwnerRepository.js +94 -0
  224. package/dist/services/shipOwner/shipOwnerRoutes.js +18 -0
  225. package/dist/types/app.d.ts +1 -0
  226. package/dist/types/constants/contract-address.d.ts +43 -3
  227. package/dist/types/models/common.d.ts +23 -0
  228. package/dist/types/models/freightForwarder.d.ts +15 -0
  229. package/dist/types/models/shipOwner.d.ts +25 -0
  230. package/dist/types/services/admin/adminRepository.d.ts +9 -0
  231. package/dist/types/services/crypto.d.ts +27 -0
  232. package/dist/types/services/database.d.ts +3 -0
  233. package/dist/types/services/freightForwarder/freightForwarderRepository.d.ts +10 -0
  234. package/dist/types/services/shipOwner/shipOwnerController.d.ts +6 -0
  235. package/dist/types/services/shipOwner/shipOwnerRepository.d.ts +10 -0
  236. package/dist/types/services/shipOwner/shipOwnerRoutes.d.ts +2 -0
  237. package/dist/types/utils/extractFactoryAddress.d.ts +10 -0
  238. package/dist/types/utils/extractTokenAddress.d.ts +10 -0
  239. package/dist/types/utils/get-event-from-receipt.d.ts +1 -1
  240. package/dist/types/utils/index.d.ts +1 -0
  241. package/dist/types/utils/run.d.ts +9 -0
  242. package/dist/utils/compute-interface-id.js +5 -3
  243. package/dist/utils/compute-title-escrow-address.js +5 -3
  244. package/dist/utils/encode-init-params.js +5 -3
  245. package/dist/utils/extractFactoryAddress.js +58 -0
  246. package/dist/utils/extractTokenAddress.js +58 -0
  247. package/dist/utils/get-event-from-receipt.js +5 -3
  248. package/dist/utils/index.js +11 -0
  249. package/dist/utils/run.js +36 -0
  250. package/package.json +16 -3
  251. package/dist/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.js +0 -37
  252. package/dist/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts +0 -49
  253. package/dist/contracts/factories/@openzeppelin/contracts/proxy/utils/index.js +0 -12
  254. /package/dist/contracts/@openzeppelin/{contracts/proxy/utils/Initializable.js → contracts-upgradeable/metatx/ERC2771ContextUpgradeable.js} +0 -0
  255. /package/dist/contracts/@openzeppelin/{contracts/proxy/utils → contracts-upgradeable/metatx}/index.js +0 -0
@@ -4,7 +4,13 @@
4
4
  "sourceName": "contracts/TitleEscrow.sol",
5
5
  "abi": [
6
6
  {
7
- "inputs": [],
7
+ "inputs": [
8
+ {
9
+ "internalType": "address",
10
+ "name": "trustedForwarder",
11
+ "type": "address"
12
+ }
13
+ ],
8
14
  "stateMutability": "nonpayable",
9
15
  "type": "constructor"
10
16
  },
@@ -129,6 +135,12 @@
129
135
  {
130
136
  "anonymous": false,
131
137
  "inputs": [
138
+ {
139
+ "indexed": true,
140
+ "internalType": "address",
141
+ "name": "actor",
142
+ "type": "address"
143
+ },
132
144
  {
133
145
  "indexed": true,
134
146
  "internalType": "address",
@@ -166,6 +178,12 @@
166
178
  {
167
179
  "anonymous": false,
168
180
  "inputs": [
181
+ {
182
+ "indexed": true,
183
+ "internalType": "address",
184
+ "name": "actor",
185
+ "type": "address"
186
+ },
169
187
  {
170
188
  "indexed": true,
171
189
  "internalType": "address",
@@ -216,6 +234,12 @@
216
234
  {
217
235
  "anonymous": false,
218
236
  "inputs": [
237
+ {
238
+ "indexed": true,
239
+ "internalType": "address",
240
+ "name": "actor",
241
+ "type": "address"
242
+ },
219
243
  {
220
244
  "indexed": true,
221
245
  "internalType": "address",
@@ -253,6 +277,12 @@
253
277
  {
254
278
  "anonymous": false,
255
279
  "inputs": [
280
+ {
281
+ "indexed": true,
282
+ "internalType": "address",
283
+ "name": "actor",
284
+ "type": "address"
285
+ },
256
286
  {
257
287
  "indexed": true,
258
288
  "internalType": "address",
@@ -290,6 +320,12 @@
290
320
  {
291
321
  "anonymous": false,
292
322
  "inputs": [
323
+ {
324
+ "indexed": true,
325
+ "internalType": "address",
326
+ "name": "actor",
327
+ "type": "address"
328
+ },
293
329
  {
294
330
  "indexed": true,
295
331
  "internalType": "address",
@@ -327,6 +363,12 @@
327
363
  {
328
364
  "anonymous": false,
329
365
  "inputs": [
366
+ {
367
+ "indexed": false,
368
+ "internalType": "address",
369
+ "name": "actor",
370
+ "type": "address"
371
+ },
330
372
  {
331
373
  "indexed": true,
332
374
  "internalType": "address",
@@ -362,12 +404,6 @@
362
404
  "internalType": "uint256",
363
405
  "name": "tokenId",
364
406
  "type": "uint256"
365
- },
366
- {
367
- "indexed": false,
368
- "internalType": "bytes",
369
- "name": "remark",
370
- "type": "bytes"
371
407
  }
372
408
  ],
373
409
  "name": "RejectTransferOwners",
@@ -432,6 +468,12 @@
432
468
  {
433
469
  "anonymous": false,
434
470
  "inputs": [
471
+ {
472
+ "indexed": false,
473
+ "internalType": "address",
474
+ "name": "actor",
475
+ "type": "address"
476
+ },
435
477
  {
436
478
  "indexed": true,
437
479
  "internalType": "address",
@@ -542,6 +584,25 @@
542
584
  "stateMutability": "view",
543
585
  "type": "function"
544
586
  },
587
+ {
588
+ "inputs": [
589
+ {
590
+ "internalType": "address",
591
+ "name": "forwarder",
592
+ "type": "address"
593
+ }
594
+ ],
595
+ "name": "isTrustedForwarder",
596
+ "outputs": [
597
+ {
598
+ "internalType": "bool",
599
+ "name": "",
600
+ "type": "bool"
601
+ }
602
+ ],
603
+ "stateMutability": "view",
604
+ "type": "function"
605
+ },
545
606
  {
546
607
  "inputs": [
547
608
  {
@@ -814,10 +875,23 @@
814
875
  "outputs": [],
815
876
  "stateMutability": "nonpayable",
816
877
  "type": "function"
878
+ },
879
+ {
880
+ "inputs": [],
881
+ "name": "trustedForwarder",
882
+ "outputs": [
883
+ {
884
+ "internalType": "address",
885
+ "name": "",
886
+ "type": "address"
887
+ }
888
+ ],
889
+ "stateMutability": "view",
890
+ "type": "function"
817
891
  }
818
892
  ],
819
- "bytecode": "0x60806040523480156200001157600080fd5b50600062000024620001ab60201b60201c565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015620000735750825b9050600060018367ffffffffffffffff16148015620000a9575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015620000b8575080155b15620000f0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315620001415760018560000160086101000a81548160ff0219169083151502179055505b8315620001a05760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405162000197919062000234565b60405180910390a15b505050505062000251565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b60006200021c620002166200021084620001d3565b620001f1565b620001dd565b9050919050565b6200022e81620001fb565b82525050565b60006020820190506200024b600083018462000223565b92915050565b61446d80620002616000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80637b103999116100b8578063bd1d07b51161007c578063bd1d07b51461033d578063c9437e5e1461035b578063cb3cfb2914610379578063cd6dc68714610395578063e3d79a6e146103b1578063e534155d146103cd57610142565b80637b103999146102ad57806383d38fcb146102cb5780638fb33c3c146102e7578063a47d1f5e14610303578063baf139751461032157610142565b806317d70f7c1161010a57806317d70f7c146101ff57806320f99c0a1461021d578063308f8e1c1461023b57806334427f611461025757806338af3eed14610273578063452736fd1461029157610142565b806301ffc9a71461014757806302fb0c5e14610177578063035aedfa1461019557806305de0a2e146101b3578063150b7a02146101cf575b600080fd5b610161600480360381019061015c91906136d3565b6103eb565b60405161016e919061371b565b60405180910390f35b61017f610455565b60405161018c919061371b565b60405180910390f35b61019d610468565b6040516101aa9190613777565b60405180910390f35b6101cd60048036038101906101c891906137f7565b61048e565b005b6101e960048036038101906101e491906138a6565b61095c565b6040516101f6919061393d565b60405180910390f35b610207610e59565b6040516102149190613967565b60405180910390f35b610225610e5f565b6040516102329190613777565b60405180910390f35b61025560048036038101906102509190613982565b610e85565b005b610271600480360381019061026c91906139e2565b611310565b005b61027b61132c565b6040516102889190613777565b60405180910390f35b6102ab60048036038101906102a691906137f7565b611352565b005b6102b5611951565b6040516102c29190613777565b60405180910390f35b6102e560048036038101906102e091906137f7565b611975565b005b61030160048036038101906102fc91906137f7565b611df1565b005b61030b6120d9565b6040516103189190613ae6565b60405180910390f35b61033b60048036038101906103369190613982565b612167565b005b6103456125f0565b6040516103529190613777565b60405180910390f35b610363612616565b604051610370919061371b565b60405180910390f35b610393600480360381019061038e91906137f7565b612625565b005b6103af60048036038101906103aa9190613b08565b612af3565b005b6103cb60048036038101906103c69190613982565b612c84565b005b6103d561310d565b6040516103e29190613777565b60405180910390f35b60007f3e143f7b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600660149054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105209190613b74565b9050801561055a576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff166105a0576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610627576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61062f613133565b610665576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260788282905011156106a5576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361072d576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036107d6576040517f8c90bf4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484600791826107e7929190613de7565b506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506108848188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613204565b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f279c68b511f19d28a79afc0687d9909fc941d6f7551e4b0e333a1171cc2eea5f60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548b8b60405161094b9493929190613ef3565b60405180910390a350505050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190613b74565b90508015610a28576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16610a6e576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001548514610ab457846040517fed15e6cf000000000000000000000000000000000000000000000000000000008152600401610aab9190613967565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b4457336040517f540b9601000000000000000000000000000000000000000000000000000000008152600401610b3b9190613777565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610bf05750600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610d455760008585905003610c32576040517f10daa94f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008787810190610c469190614063565b925092509250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610cb35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610cf75782826040517fbd805e91000000000000000000000000000000000000000000000000000000008152600401610cee9291906140d2565b60405180910390fd5b610d1083604051806020016040528060008152506132f6565b610d298260405180602001604052806000815250613204565b8060079081610d3891906140fb565b5060019350505050610d58565b848460079182610d56929190613de7565b505b801515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f44fc4ffe7e585a241451c67b41553546c65c2b07de6e9d33405e53f75357293b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546007604051610e2393929190614251565b60405180910390a47f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f9250505095945050505050565b60015481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190613b74565b90508015610f51576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16610f97576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101e576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611026613133565b61105c576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282607882829050111561109c576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611102576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111cd57508573ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611203576040517f1c98cac300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484600791826112b9929190613de7565b506113088686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132f6565b505050505050565b61131b848383610e85565b611326838383612167565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e49190613b74565b9050801561141e576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611464576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61146c613133565b6114a2576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611529576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260788282905011156115f0576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061169b5750600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156116d2576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484600791826116e3929190613de7565b506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506117ce818a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132f6565b61181c838a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613204565b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f2812f41a966386b432bd1d43d72b6613f5eca9adf4ed9e193f95f5c91a1b66268660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548f8f60405161193e95949392919061428f565b60405180910390a4505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a079190613b74565b90508015611a41576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611a87576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b0e576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9d613133565b611bd3576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611c13576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c2d60006040518060200160405280600081525061347f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab67aa583060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546040518463ffffffff1660e01b8152600401611cac93929190614303565b600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050848460079182611cef929190613de7565b506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fea17cbc366059ac6185e6bfc7eebd173d3260bb6bc373830f9d04260e72c244b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548888604051611de29493929190613ef3565b60405180910390a25050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e839190613b74565b90508015611ebd576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611f03576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611f43576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4b613133565b15611f82576040517fd5475a0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461201257336040517f540b96010000000000000000000000000000000000000000000000000000000081526004016120099190613777565b60405180910390fd5b61202c6000604051806020016040528060008152506132f6565b612046600060405180602001604052806000815250613204565b6000600660146101000a81548160ff021916908315150217905550848460079182612072929190613de7565b507f49c56a060f3a16e899a045537fb86df850339c10c8c140a052aca89cbcc30c0b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660015487876040516120ca9493929190613ef3565b60405180910390a15050505050565b600780546120e690613c0a565b80601f016020809104026020016040519081016040528092919081815260200182805461211290613c0a565b801561215f5780601f106121345761010080835404028352916020019161215f565b820191906000526020600020905b81548152906001019060200180831161214257829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f99190613b74565b90508015612233576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612279576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612300576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612308613133565b61233e576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282607882829050111561237e576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036123e4576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361246b576040517f702e6e6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612525576000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848460079182612599929190613de7565b506125e88686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613204565b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612620613133565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b79190613b74565b905080156126f1576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612737576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127be576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127c6613133565b6127fc576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282607882829050111561283c576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036128c4576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361296d576040517f8c90bf4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84846007918261297e929190613de7565b506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612a1b8188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132f6565b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f26cb5b08a00ade9c3c65737592d8344548bf60664af05af8ed04720b893eca2760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548b8b604051612ae29493929190613ef3565b60405180910390a350505050505050565b6000612afd613571565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015612b4b5750825b9050600060018367ffffffffffffffff16148015612b80575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015612b8e575080155b15612bc5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315612c155760018560000160086101000a81548160ff0219169083151502179055505b612c1f8787613599565b8315612c7b5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051612c72919061439c565b60405180910390a15b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190613b74565b90508015612d50576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612d96576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e1d576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e25613133565b612e5b576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115612e9b576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612f22576040517fdd9f921d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612fa9576040517f98f83ce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036130a5576000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8484600791826130b6929190613de7565b506131058686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061347f565b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6001546040518263ffffffff1660e01b81526004016131a79190613967565b602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e891906143cc565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b8173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f30426d047f8ae6511337356e511764b12f79993bd73501d0e993b3da7a780a4d60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154856040516132a9939291906143f9565b60405180910390a381600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9081b884d1178ac5e4855291131f541f64a88854f90b8df23412ffd63c39be1d60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548560405161339b939291906143f9565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461343a5761343960006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525061347f565b5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffbe262229f456b8d55f1e1887503540dc0a1efcb4b048b6b739117e66d03121460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660015485604051613524939291906143f9565b60405180910390a381600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6135a1613607565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001819055506001600660146101000a81548160ff0219169083151502179055505050565b61360f613647565b613645576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000613651613571565b60000160089054906101000a900460ff16905090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136b08161367b565b81146136bb57600080fd5b50565b6000813590506136cd816136a7565b92915050565b6000602082840312156136e9576136e8613671565b5b60006136f7848285016136be565b91505092915050565b60008115159050919050565b61371581613700565b82525050565b6000602082019050613730600083018461370c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061376182613736565b9050919050565b61377181613756565b82525050565b600060208201905061378c6000830184613768565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137b7576137b6613792565b5b8235905067ffffffffffffffff8111156137d4576137d3613797565b5b6020830191508360018202830111156137f0576137ef61379c565b5b9250929050565b6000806020838503121561380e5761380d613671565b5b600083013567ffffffffffffffff81111561382c5761382b613676565b5b613838858286016137a1565b92509250509250929050565b61384d81613756565b811461385857600080fd5b50565b60008135905061386a81613844565b92915050565b6000819050919050565b61388381613870565b811461388e57600080fd5b50565b6000813590506138a08161387a565b92915050565b6000806000806000608086880312156138c2576138c1613671565b5b60006138d08882890161385b565b95505060206138e18882890161385b565b94505060406138f288828901613891565b935050606086013567ffffffffffffffff81111561391357613912613676565b5b61391f888289016137a1565b92509250509295509295909350565b6139378161367b565b82525050565b6000602082019050613952600083018461392e565b92915050565b61396181613870565b82525050565b600060208201905061397c6000830184613958565b92915050565b60008060006040848603121561399b5761399a613671565b5b60006139a98682870161385b565b935050602084013567ffffffffffffffff8111156139ca576139c9613676565b5b6139d6868287016137a1565b92509250509250925092565b600080600080606085870312156139fc576139fb613671565b5b6000613a0a8782880161385b565b9450506020613a1b8782880161385b565b935050604085013567ffffffffffffffff811115613a3c57613a3b613676565b5b613a48878288016137a1565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a90578082015181840152602081019050613a75565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ab882613a56565b613ac28185613a61565b9350613ad2818560208601613a72565b613adb81613a9c565b840191505092915050565b60006020820190508181036000830152613b008184613aad565b905092915050565b60008060408385031215613b1f57613b1e613671565b5b6000613b2d8582860161385b565b9250506020613b3e85828601613891565b9150509250929050565b613b5181613700565b8114613b5c57600080fd5b50565b600081519050613b6e81613b48565b92915050565b600060208284031215613b8a57613b89613671565b5b6000613b9884828501613b5f565b91505092915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c2257607f821691505b602082108103613c3557613c34613bdb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c9d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c60565b613ca78683613c60565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ce4613cdf613cda84613870565b613cbf565b613870565b9050919050565b6000819050919050565b613cfe83613cc9565b613d12613d0a82613ceb565b848454613c6d565b825550505050565b600090565b613d27613d1a565b613d32818484613cf5565b505050565b5b81811015613d5657613d4b600082613d1f565b600181019050613d38565b5050565b601f821115613d9b57613d6c81613c3b565b613d7584613c50565b81016020851015613d84578190505b613d98613d9085613c50565b830182613d37565b50505b505050565b600082821c905092915050565b6000613dbe60001984600802613da0565b1980831691505092915050565b6000613dd78383613dad565b9150826002028217905092915050565b613df18383613ba1565b67ffffffffffffffff811115613e0a57613e09613bac565b5b613e148254613c0a565b613e1f828285613d5a565b6000601f831160018114613e4e5760008415613e3c578287013590505b613e468582613dcb565b865550613eae565b601f198416613e5c86613c3b565b60005b82811015613e8457848901358255600182019150602085019450602081019050613e5f565b86831015613ea15784890135613e9d601f891682613dad565b8355505b6001600288020188555050505b50505050505050565b82818337600083830152505050565b6000613ed28385613a61565b9350613edf838584613eb7565b613ee883613a9c565b840190509392505050565b6000606082019050613f086000830187613768565b613f156020830186613958565b8181036040830152613f28818486613ec6565b905095945050505050565b6000613f3e82613736565b9050919050565b613f4e81613f33565b8114613f5957600080fd5b50565b600081359050613f6b81613f45565b92915050565b600080fd5b613f7f82613a9c565b810181811067ffffffffffffffff82111715613f9e57613f9d613bac565b5b80604052505050565b6000613fb1613667565b9050613fbd8282613f76565b919050565b600067ffffffffffffffff821115613fdd57613fdc613bac565b5b613fe682613a9c565b9050602081019050919050565b600061400661400184613fc2565b613fa7565b90508281526020810184848401111561402257614021613f71565b5b61402d848285613eb7565b509392505050565b600082601f83011261404a57614049613792565b5b813561405a848260208601613ff3565b91505092915050565b60008060006060848603121561407c5761407b613671565b5b600061408a86828701613f5c565b935050602061409b86828701613f5c565b925050604084013567ffffffffffffffff8111156140bc576140bb613676565b5b6140c886828701614035565b9150509250925092565b60006040820190506140e76000830185613768565b6140f46020830184613768565b9392505050565b61410482613a56565b67ffffffffffffffff81111561411d5761411c613bac565b5b6141278254613c0a565b614132828285613d5a565b600060209050601f8311600181146141655760008415614153578287015190505b61415d8582613dcb565b8655506141c5565b601f19841661417386613c3b565b60005b8281101561419b57848901518255600182019150602085019450602081019050614176565b868310156141b857848901516141b4601f891682613dad565b8355505b6001600288020188555050505b505050505050565b600081546141da81613c0a565b6141e48186613a61565b945060018216600081146141ff576001811461421557614248565b60ff198316865281151560200286019350614248565b61421e85613c3b565b60005b8381101561424057815481890152600182019150602081019050614221565b808801955050505b50505092915050565b60006060820190506142666000830186613768565b6142736020830185613958565b818103604083015261428581846141cd565b9050949350505050565b60006080820190506142a46000830188613768565b6142b16020830187613768565b6142be6040830186613958565b81810360608301526142d1818486613ec6565b90509695505050505050565b50565b60006142ed600083613a61565b91506142f8826142dd565b600082019050919050565b60006080820190506143186000830186613768565b6143256020830185613768565b6143326040830184613958565b8181036060830152614343816142e0565b9050949350505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600061438661438161437c8461434d565b613cbf565b614357565b9050919050565b6143968161436b565b82525050565b60006020820190506143b1600083018461438d565b92915050565b6000815190506143c681613844565b92915050565b6000602082840312156143e2576143e1613671565b5b60006143f0848285016143b7565b91505092915050565b600060608201905061440e6000830186613768565b61441b6020830185613958565b818103604083015261442d8184613aad565b905094935050505056fea26469706673582212209004e9e7e97f23823dc8aaf0ca4b1259cfd0559e3212ae437c39817e9009f77864736f6c63430008160033",
820
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c80637b103999116100b8578063bd1d07b51161007c578063bd1d07b51461033d578063c9437e5e1461035b578063cb3cfb2914610379578063cd6dc68714610395578063e3d79a6e146103b1578063e534155d146103cd57610142565b80637b103999146102ad57806383d38fcb146102cb5780638fb33c3c146102e7578063a47d1f5e14610303578063baf139751461032157610142565b806317d70f7c1161010a57806317d70f7c146101ff57806320f99c0a1461021d578063308f8e1c1461023b57806334427f611461025757806338af3eed14610273578063452736fd1461029157610142565b806301ffc9a71461014757806302fb0c5e14610177578063035aedfa1461019557806305de0a2e146101b3578063150b7a02146101cf575b600080fd5b610161600480360381019061015c91906136d3565b6103eb565b60405161016e919061371b565b60405180910390f35b61017f610455565b60405161018c919061371b565b60405180910390f35b61019d610468565b6040516101aa9190613777565b60405180910390f35b6101cd60048036038101906101c891906137f7565b61048e565b005b6101e960048036038101906101e491906138a6565b61095c565b6040516101f6919061393d565b60405180910390f35b610207610e59565b6040516102149190613967565b60405180910390f35b610225610e5f565b6040516102329190613777565b60405180910390f35b61025560048036038101906102509190613982565b610e85565b005b610271600480360381019061026c91906139e2565b611310565b005b61027b61132c565b6040516102889190613777565b60405180910390f35b6102ab60048036038101906102a691906137f7565b611352565b005b6102b5611951565b6040516102c29190613777565b60405180910390f35b6102e560048036038101906102e091906137f7565b611975565b005b61030160048036038101906102fc91906137f7565b611df1565b005b61030b6120d9565b6040516103189190613ae6565b60405180910390f35b61033b60048036038101906103369190613982565b612167565b005b6103456125f0565b6040516103529190613777565b60405180910390f35b610363612616565b604051610370919061371b565b60405180910390f35b610393600480360381019061038e91906137f7565b612625565b005b6103af60048036038101906103aa9190613b08565b612af3565b005b6103cb60048036038101906103c69190613982565b612c84565b005b6103d561310d565b6040516103e29190613777565b60405180910390f35b60007f3e143f7b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600660149054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105209190613b74565b9050801561055a576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff166105a0576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610627576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61062f613133565b610665576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260788282905011156106a5576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361072d576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036107d6576040517f8c90bf4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484600791826107e7929190613de7565b506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506108848188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613204565b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f279c68b511f19d28a79afc0687d9909fc941d6f7551e4b0e333a1171cc2eea5f60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548b8b60405161094b9493929190613ef3565b60405180910390a350505050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190613b74565b90508015610a28576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16610a6e576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001548514610ab457846040517fed15e6cf000000000000000000000000000000000000000000000000000000008152600401610aab9190613967565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b4457336040517f540b9601000000000000000000000000000000000000000000000000000000008152600401610b3b9190613777565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610bf05750600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610d455760008585905003610c32576040517f10daa94f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008787810190610c469190614063565b925092509250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610cb35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610cf75782826040517fbd805e91000000000000000000000000000000000000000000000000000000008152600401610cee9291906140d2565b60405180910390fd5b610d1083604051806020016040528060008152506132f6565b610d298260405180602001604052806000815250613204565b8060079081610d3891906140fb565b5060019350505050610d58565b848460079182610d56929190613de7565b505b801515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f44fc4ffe7e585a241451c67b41553546c65c2b07de6e9d33405e53f75357293b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546007604051610e2393929190614251565b60405180910390a47f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f9250505095945050505050565b60015481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190613b74565b90508015610f51576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16610f97576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101e576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611026613133565b61105c576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282607882829050111561109c576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611102576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111cd57508573ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611203576040517f1c98cac300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484600791826112b9929190613de7565b506113088686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132f6565b505050505050565b61131b848383610e85565b611326838383612167565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e49190613b74565b9050801561141e576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611464576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61146c613133565b6114a2576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611529576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260788282905011156115f0576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061169b5750600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156116d2576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484600791826116e3929190613de7565b506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506117ce818a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132f6565b61181c838a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613204565b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f2812f41a966386b432bd1d43d72b6613f5eca9adf4ed9e193f95f5c91a1b66268660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548f8f60405161193e95949392919061428f565b60405180910390a4505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a079190613b74565b90508015611a41576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611a87576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b0e576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9d613133565b611bd3576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611c13576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c2d60006040518060200160405280600081525061347f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab67aa583060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546040518463ffffffff1660e01b8152600401611cac93929190614303565b600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050848460079182611cef929190613de7565b506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fea17cbc366059ac6185e6bfc7eebd173d3260bb6bc373830f9d04260e72c244b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548888604051611de29493929190613ef3565b60405180910390a25050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e839190613b74565b90508015611ebd576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611f03576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611f43576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4b613133565b15611f82576040517fd5475a0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461201257336040517f540b96010000000000000000000000000000000000000000000000000000000081526004016120099190613777565b60405180910390fd5b61202c6000604051806020016040528060008152506132f6565b612046600060405180602001604052806000815250613204565b6000600660146101000a81548160ff021916908315150217905550848460079182612072929190613de7565b507f49c56a060f3a16e899a045537fb86df850339c10c8c140a052aca89cbcc30c0b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660015487876040516120ca9493929190613ef3565b60405180910390a15050505050565b600780546120e690613c0a565b80601f016020809104026020016040519081016040528092919081815260200182805461211290613c0a565b801561215f5780601f106121345761010080835404028352916020019161215f565b820191906000526020600020905b81548152906001019060200180831161214257829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f99190613b74565b90508015612233576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612279576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612300576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612308613133565b61233e576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282607882829050111561237e576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036123e4576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361246b576040517f702e6e6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612525576000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848460079182612599929190613de7565b506125e88686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613204565b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612620613133565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b79190613b74565b905080156126f1576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612737576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127be576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127c6613133565b6127fc576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282607882829050111561283c576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036128c4576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361296d576040517f8c90bf4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84846007918261297e929190613de7565b506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612a1b8188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132f6565b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f26cb5b08a00ade9c3c65737592d8344548bf60664af05af8ed04720b893eca2760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548b8b604051612ae29493929190613ef3565b60405180910390a350505050505050565b6000612afd613571565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015612b4b5750825b9050600060018367ffffffffffffffff16148015612b80575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015612b8e575080155b15612bc5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315612c155760018560000160086101000a81548160ff0219169083151502179055505b612c1f8787613599565b8315612c7b5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051612c72919061439c565b60405180910390a15b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190613b74565b90508015612d50576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612d96576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e1d576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e25613133565b612e5b576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115612e9b576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612f22576040517fdd9f921d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612fa9576040517f98f83ce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036130a5576000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8484600791826130b6929190613de7565b506131058686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061347f565b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6001546040518263ffffffff1660e01b81526004016131a79190613967565b602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e891906143cc565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b8173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f30426d047f8ae6511337356e511764b12f79993bd73501d0e993b3da7a780a4d60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154856040516132a9939291906143f9565b60405180910390a381600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9081b884d1178ac5e4855291131f541f64a88854f90b8df23412ffd63c39be1d60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548560405161339b939291906143f9565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461343a5761343960006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525061347f565b5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffbe262229f456b8d55f1e1887503540dc0a1efcb4b048b6b739117e66d03121460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660015485604051613524939291906143f9565b60405180910390a381600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6135a1613607565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001819055506001600660146101000a81548160ff0219169083151502179055505050565b61360f613647565b613645576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000613651613571565b60000160089054906101000a900460ff16905090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136b08161367b565b81146136bb57600080fd5b50565b6000813590506136cd816136a7565b92915050565b6000602082840312156136e9576136e8613671565b5b60006136f7848285016136be565b91505092915050565b60008115159050919050565b61371581613700565b82525050565b6000602082019050613730600083018461370c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061376182613736565b9050919050565b61377181613756565b82525050565b600060208201905061378c6000830184613768565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137b7576137b6613792565b5b8235905067ffffffffffffffff8111156137d4576137d3613797565b5b6020830191508360018202830111156137f0576137ef61379c565b5b9250929050565b6000806020838503121561380e5761380d613671565b5b600083013567ffffffffffffffff81111561382c5761382b613676565b5b613838858286016137a1565b92509250509250929050565b61384d81613756565b811461385857600080fd5b50565b60008135905061386a81613844565b92915050565b6000819050919050565b61388381613870565b811461388e57600080fd5b50565b6000813590506138a08161387a565b92915050565b6000806000806000608086880312156138c2576138c1613671565b5b60006138d08882890161385b565b95505060206138e18882890161385b565b94505060406138f288828901613891565b935050606086013567ffffffffffffffff81111561391357613912613676565b5b61391f888289016137a1565b92509250509295509295909350565b6139378161367b565b82525050565b6000602082019050613952600083018461392e565b92915050565b61396181613870565b82525050565b600060208201905061397c6000830184613958565b92915050565b60008060006040848603121561399b5761399a613671565b5b60006139a98682870161385b565b935050602084013567ffffffffffffffff8111156139ca576139c9613676565b5b6139d6868287016137a1565b92509250509250925092565b600080600080606085870312156139fc576139fb613671565b5b6000613a0a8782880161385b565b9450506020613a1b8782880161385b565b935050604085013567ffffffffffffffff811115613a3c57613a3b613676565b5b613a48878288016137a1565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a90578082015181840152602081019050613a75565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ab882613a56565b613ac28185613a61565b9350613ad2818560208601613a72565b613adb81613a9c565b840191505092915050565b60006020820190508181036000830152613b008184613aad565b905092915050565b60008060408385031215613b1f57613b1e613671565b5b6000613b2d8582860161385b565b9250506020613b3e85828601613891565b9150509250929050565b613b5181613700565b8114613b5c57600080fd5b50565b600081519050613b6e81613b48565b92915050565b600060208284031215613b8a57613b89613671565b5b6000613b9884828501613b5f565b91505092915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c2257607f821691505b602082108103613c3557613c34613bdb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c9d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c60565b613ca78683613c60565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ce4613cdf613cda84613870565b613cbf565b613870565b9050919050565b6000819050919050565b613cfe83613cc9565b613d12613d0a82613ceb565b848454613c6d565b825550505050565b600090565b613d27613d1a565b613d32818484613cf5565b505050565b5b81811015613d5657613d4b600082613d1f565b600181019050613d38565b5050565b601f821115613d9b57613d6c81613c3b565b613d7584613c50565b81016020851015613d84578190505b613d98613d9085613c50565b830182613d37565b50505b505050565b600082821c905092915050565b6000613dbe60001984600802613da0565b1980831691505092915050565b6000613dd78383613dad565b9150826002028217905092915050565b613df18383613ba1565b67ffffffffffffffff811115613e0a57613e09613bac565b5b613e148254613c0a565b613e1f828285613d5a565b6000601f831160018114613e4e5760008415613e3c578287013590505b613e468582613dcb565b865550613eae565b601f198416613e5c86613c3b565b60005b82811015613e8457848901358255600182019150602085019450602081019050613e5f565b86831015613ea15784890135613e9d601f891682613dad565b8355505b6001600288020188555050505b50505050505050565b82818337600083830152505050565b6000613ed28385613a61565b9350613edf838584613eb7565b613ee883613a9c565b840190509392505050565b6000606082019050613f086000830187613768565b613f156020830186613958565b8181036040830152613f28818486613ec6565b905095945050505050565b6000613f3e82613736565b9050919050565b613f4e81613f33565b8114613f5957600080fd5b50565b600081359050613f6b81613f45565b92915050565b600080fd5b613f7f82613a9c565b810181811067ffffffffffffffff82111715613f9e57613f9d613bac565b5b80604052505050565b6000613fb1613667565b9050613fbd8282613f76565b919050565b600067ffffffffffffffff821115613fdd57613fdc613bac565b5b613fe682613a9c565b9050602081019050919050565b600061400661400184613fc2565b613fa7565b90508281526020810184848401111561402257614021613f71565b5b61402d848285613eb7565b509392505050565b600082601f83011261404a57614049613792565b5b813561405a848260208601613ff3565b91505092915050565b60008060006060848603121561407c5761407b613671565b5b600061408a86828701613f5c565b935050602061409b86828701613f5c565b925050604084013567ffffffffffffffff8111156140bc576140bb613676565b5b6140c886828701614035565b9150509250925092565b60006040820190506140e76000830185613768565b6140f46020830184613768565b9392505050565b61410482613a56565b67ffffffffffffffff81111561411d5761411c613bac565b5b6141278254613c0a565b614132828285613d5a565b600060209050601f8311600181146141655760008415614153578287015190505b61415d8582613dcb565b8655506141c5565b601f19841661417386613c3b565b60005b8281101561419b57848901518255600182019150602085019450602081019050614176565b868310156141b857848901516141b4601f891682613dad565b8355505b6001600288020188555050505b505050505050565b600081546141da81613c0a565b6141e48186613a61565b945060018216600081146141ff576001811461421557614248565b60ff198316865281151560200286019350614248565b61421e85613c3b565b60005b8381101561424057815481890152600182019150602081019050614221565b808801955050505b50505092915050565b60006060820190506142666000830186613768565b6142736020830185613958565b818103604083015261428581846141cd565b9050949350505050565b60006080820190506142a46000830188613768565b6142b16020830187613768565b6142be6040830186613958565b81810360608301526142d1818486613ec6565b90509695505050505050565b50565b60006142ed600083613a61565b91506142f8826142dd565b600082019050919050565b60006080820190506143186000830186613768565b6143256020830185613768565b6143326040830184613958565b8181036060830152614343816142e0565b9050949350505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600061438661438161437c8461434d565b613cbf565b614357565b9050919050565b6143968161436b565b82525050565b60006020820190506143b1600083018461438d565b92915050565b6000815190506143c681613844565b92915050565b6000602082840312156143e2576143e1613671565b5b60006143f0848285016143b7565b91505092915050565b600060608201905061440e6000830186613768565b61441b6020830185613958565b818103604083015261442d8184613aad565b905094935050505056fea26469706673582212209004e9e7e97f23823dc8aaf0ca4b1259cfd0559e3212ae437c39817e9009f77864736f6c63430008160033",
893
+ "bytecode": "0x60a06040523480156200001157600080fd5b5060405162004aa538038062004aa583398181016040528101906200003791906200023f565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506200007d6200008460201b60201c565b50620002b3565b6000620000966200018e60201b60201c565b90508060000160089054906101000a900460ff1615620000e2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80168160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200018b5767ffffffffffffffff8160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405162000182919062000296565b60405180910390a15b50565b600080620001a1620001aa60201b60201c565b90508091505090565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060001b905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020782620001da565b9050919050565b6200021981620001fa565b81146200022557600080fd5b50565b60008151905062000239816200020e565b92915050565b600060208284031215620002585762000257620001d5565b5b6000620002688482850162000228565b91505092915050565b600067ffffffffffffffff82169050919050565b620002908162000271565b82525050565b6000602082019050620002ad600083018462000285565b92915050565b6080516147d6620002cf6000396000611a6401526147d66000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80637b103999116100c3578063bd1d07b51161007c578063bd1d07b5146103a1578063c9437e5e146103bf578063cb3cfb29146103dd578063cd6dc687146103f9578063e3d79a6e14610415578063e534155d1461043157610158565b80637b103999146102f35780637da0a8771461031157806383d38fcb1461032f5780638fb33c3c1461034b578063a47d1f5e14610367578063baf139751461038557610158565b806320f99c0a1161011557806320f99c0a14610233578063308f8e1c1461025157806334427f611461026d57806338af3eed14610289578063452736fd146102a7578063572b6c05146102c357610158565b806301ffc9a71461015d57806302fb0c5e1461018d578063035aedfa146101ab57806305de0a2e146101c9578063150b7a02146101e557806317d70f7c14610215575b600080fd5b6101776004803603810190610172919061393a565b61044f565b6040516101849190613982565b60405180910390f35b6101956104b9565b6040516101a29190613982565b60405180910390f35b6101b36104cc565b6040516101c091906139de565b60405180910390f35b6101e360048036038101906101de9190613a5e565b6104f2565b005b6101ff60048036038101906101fa9190613b0d565b6109e5565b60405161020c9190613ba4565b60405180910390f35b61021d610eeb565b60405161022a9190613bce565b60405180910390f35b61023b610ef1565b60405161024891906139de565b60405180910390f35b61026b60048036038101906102669190613be9565b610f17565b005b61028760048036038101906102829190613c49565b6113a9565b005b6102916113c5565b60405161029e91906139de565b60405180910390f35b6102c160048036038101906102bc9190613a5e565b6113eb565b005b6102dd60048036038101906102d89190613cbd565b6119fd565b6040516102ea9190613982565b60405180910390f35b6102fb611a3c565b60405161030891906139de565b60405180910390f35b610319611a60565b60405161032691906139de565b60405180910390f35b61034960048036038101906103449190613a5e565b611a88565b005b61036560048036038101906103609190613a5e565b611f19565b005b61036f612201565b60405161037c9190613d7a565b60405180910390f35b61039f600480360381019061039a9190613be9565b61228f565b005b6103a961271f565b6040516103b691906139de565b60405180910390f35b6103c7612745565b6040516103d49190613982565b60405180910390f35b6103f760048036038101906103f29190613a5e565b612754565b005b610413600480360381019061040e9190613d9c565b612c47565b005b61042f600480360381019061042a9190613be9565b612dd8565b005b610439613268565b60405161044691906139de565b60405180910390f35b60007f3e143f7b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600660149054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105849190613e08565b905080156105be576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16610604576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661064561328e565b73ffffffffffffffffffffffffffffffffffffffff1614610692576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069a61329d565b6106d0576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115610710576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610798576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610841576040517f8c90bf4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84846007918261085292919061407b565b506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506108ef8188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061336e565b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1661096761328e565b73ffffffffffffffffffffffffffffffffffffffff167f9d836937a837e685e1ce6796afaed48df16cd88219d6775dc46b6617b847dd1360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548c8c6040516109d49493929190614187565b60405180910390a450505050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190613e08565b90508015610ab1576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16610af7576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001548514610b3d57846040517fed15e6cf000000000000000000000000000000000000000000000000000000008152600401610b349190613bce565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bcd57336040517f540b9601000000000000000000000000000000000000000000000000000000008152600401610bc491906139de565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610c795750600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610dce5760008585905003610cbb576040517f10daa94f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008787810190610ccf91906142f7565b925092509250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610d3c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610d805782826040517fbd805e91000000000000000000000000000000000000000000000000000000008152600401610d77929190614366565b60405180910390fd5b610d99836040518060200160405280600081525061347e565b610db2826040518060200160405280600081525061336e565b8060079081610dc1919061438f565b5060019350505050610de1565b848460079182610ddf92919061407b565b505b801515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f949aacc83c3ca79403342afa7cf9a504f34996bc163596e87d5f0bd365a60f7e610e7f61328e565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546007604051610eb594939291906144e5565b60405180910390a47f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f9250505095945050505050565b60015481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa99190613e08565b90508015610fe3576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611029576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661106a61328e565b73ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110bf61329d565b6110f5576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611135576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361119b576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061126657508573ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61129c576040517f1c98cac300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084846007918261135292919061407b565b506113a18686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061347e565b505050505050565b6113b4848383610f17565b6113bf83838361228f565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147d9190613e08565b905080156114b7576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff166114fd576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61150561329d565b61153b576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661157c61328e565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661160a61328e565b73ffffffffffffffffffffffffffffffffffffffff1614611657576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611697576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117425750600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15611779576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84846007918261178a92919061407b565b506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611875818a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061347e565b6118c3838a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061336e565b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f2e6f393db2fca12e96dfa806cf78ed2daddc38a90ffd973ef5a6b4fdbabae4106119b561328e565b8760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546040516119ea9493929190614531565b60405180910390a4505050505050505050565b6000611a07611a60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a9190613e08565b90508015611b54576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611b9a576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bdb61328e565b73ffffffffffffffffffffffffffffffffffffffff1614611c28576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c6961328e565b73ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cbe61329d565b611cf4576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611d34576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d4e600060405180602001604052806000815250613625565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab67aa583060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546040518463ffffffff1660e01b8152600401611dcd9392919061459c565b600060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b50505050848460079182611e1092919061407b565b506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e9d61328e565b73ffffffffffffffffffffffffffffffffffffffff167fea17cbc366059ac6185e6bfc7eebd173d3260bb6bc373830f9d04260e72c244b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548888604051611f0a9493929190614187565b60405180910390a25050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190613e08565b90508015611fe5576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff1661202b576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282607882829050111561206b576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61207361329d565b156120aa576040517fd5475a0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461213a57336040517f540b960100000000000000000000000000000000000000000000000000000000815260040161213191906139de565b60405180910390fd5b61215460006040518060200160405280600081525061347e565b61216e60006040518060200160405280600081525061336e565b6000600660146101000a81548160ff02191690831515021790555084846007918261219a92919061407b565b507f49c56a060f3a16e899a045537fb86df850339c10c8c140a052aca89cbcc30c0b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660015487876040516121f29493929190614187565b60405180910390a15050505050565b6007805461220e90613e9e565b80601f016020809104026020016040519081016040528092919081815260200182805461223a90613e9e565b80156122875780601f1061225c57610100808354040283529160200191612287565b820191906000526020600020905b81548152906001019060200180831161226a57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190613e08565b9050801561235b576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff166123a1576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123e261328e565b73ffffffffffffffffffffffffffffffffffffffff161461242f576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243761329d565b61246d576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260788282905011156124ad576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612513576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361259a576040517f702e6e6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612654576000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484600791826126c892919061407b565b506127178686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061336e565b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061274f61329d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e69190613e08565b90508015612820576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612866576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128a761328e565b73ffffffffffffffffffffffffffffffffffffffff16146128f4576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128fc61329d565b612932576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115612972576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129fa576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612aa3576040517f8c90bf4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b848460079182612ab492919061407b565b506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612b518188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061347e565b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16612bc961328e565b73ffffffffffffffffffffffffffffffffffffffff167f5ede0a76a5fa7073243cab067bae342c2fbb26acd128b30356d94d1a4c1d20ea60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548c8c604051612c369493929190614187565b60405180910390a450505050505050565b6000612c51613735565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015612c9f5750825b9050600060018367ffffffffffffffff16148015612cd4575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015612ce2575080155b15612d19576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315612d695760018560000160086101000a81548160ff0219169083151502179055505b612d738787613749565b8315612dcf5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051612dc69190614635565b60405180910390a15b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6a9190613e08565b90508015612ea4576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612eea576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f2b61328e565b73ffffffffffffffffffffffffffffffffffffffff1614612f78576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f8061329d565b612fb6576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115612ff6576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361307d576040517fdd9f921d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613104576040517f98f83ce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613200576000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b84846007918261321192919061407b565b506132608686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613625565b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006132986137b7565b905090565b60003073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6001546040518263ffffffff1660e01b81526004016133119190613bce565b602060405180830381865afa15801561332e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133529190614665565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b8173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166133c661328e565b73ffffffffffffffffffffffffffffffffffffffff167f220142965e07ad032af0005eb4747d4a55acc8c786d04f087ce27e10ea2d140460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548660405161343193929190614692565b60405180910390a481600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134d661328e565b73ffffffffffffffffffffffffffffffffffffffff167f48509251c4976d4cc0f5420ed39336d873f0713b399e0200c55069c04937b96860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548660405161354193929190614692565b60405180910390a4600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135e0576135df60006040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250613625565b5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661367d61328e565b73ffffffffffffffffffffffffffffffffffffffff167ff5b0435494e36d58667cba8d6d2b6983f1c65c50be1cb5a861fdf3ad76357a6e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154866040516136e893929190614692565b60405180910390a481600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600080613740613823565b90508091505090565b61375161384e565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001819055506001600660146101000a81548160ff0219169083151502179055505050565b6000806000369050905060006137cb61388e565b90508082101580156137e257506137e1336119fd565b5b15613813576000368284039080926137fc939291906146da565b906138079190614741565b60601c92505050613820565b61381b61389d565b925050505b90565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060001b905090565b6138566138a5565b61388c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006138986138c5565b905090565b600033905090565b60006138af613735565b60000160089054906101000a900460ff16905090565b60006014905090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613917816138e2565b811461392257600080fd5b50565b6000813590506139348161390e565b92915050565b6000602082840312156139505761394f6138d8565b5b600061395e84828501613925565b91505092915050565b60008115159050919050565b61397c81613967565b82525050565b60006020820190506139976000830184613973565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139c88261399d565b9050919050565b6139d8816139bd565b82525050565b60006020820190506139f360008301846139cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613a1e57613a1d6139f9565b5b8235905067ffffffffffffffff811115613a3b57613a3a6139fe565b5b602083019150836001820283011115613a5757613a56613a03565b5b9250929050565b60008060208385031215613a7557613a746138d8565b5b600083013567ffffffffffffffff811115613a9357613a926138dd565b5b613a9f85828601613a08565b92509250509250929050565b613ab4816139bd565b8114613abf57600080fd5b50565b600081359050613ad181613aab565b92915050565b6000819050919050565b613aea81613ad7565b8114613af557600080fd5b50565b600081359050613b0781613ae1565b92915050565b600080600080600060808688031215613b2957613b286138d8565b5b6000613b3788828901613ac2565b9550506020613b4888828901613ac2565b9450506040613b5988828901613af8565b935050606086013567ffffffffffffffff811115613b7a57613b796138dd565b5b613b8688828901613a08565b92509250509295509295909350565b613b9e816138e2565b82525050565b6000602082019050613bb96000830184613b95565b92915050565b613bc881613ad7565b82525050565b6000602082019050613be36000830184613bbf565b92915050565b600080600060408486031215613c0257613c016138d8565b5b6000613c1086828701613ac2565b935050602084013567ffffffffffffffff811115613c3157613c306138dd565b5b613c3d86828701613a08565b92509250509250925092565b60008060008060608587031215613c6357613c626138d8565b5b6000613c7187828801613ac2565b9450506020613c8287828801613ac2565b935050604085013567ffffffffffffffff811115613ca357613ca26138dd565b5b613caf87828801613a08565b925092505092959194509250565b600060208284031215613cd357613cd26138d8565b5b6000613ce184828501613ac2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d24578082015181840152602081019050613d09565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d4c82613cea565b613d568185613cf5565b9350613d66818560208601613d06565b613d6f81613d30565b840191505092915050565b60006020820190508181036000830152613d948184613d41565b905092915050565b60008060408385031215613db357613db26138d8565b5b6000613dc185828601613ac2565b9250506020613dd285828601613af8565b9150509250929050565b613de581613967565b8114613df057600080fd5b50565b600081519050613e0281613ddc565b92915050565b600060208284031215613e1e57613e1d6138d8565b5b6000613e2c84828501613df3565b91505092915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613eb657607f821691505b602082108103613ec957613ec8613e6f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613f317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ef4565b613f3b8683613ef4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613f78613f73613f6e84613ad7565b613f53565b613ad7565b9050919050565b6000819050919050565b613f9283613f5d565b613fa6613f9e82613f7f565b848454613f01565b825550505050565b600090565b613fbb613fae565b613fc6818484613f89565b505050565b5b81811015613fea57613fdf600082613fb3565b600181019050613fcc565b5050565b601f82111561402f5761400081613ecf565b61400984613ee4565b81016020851015614018578190505b61402c61402485613ee4565b830182613fcb565b50505b505050565b600082821c905092915050565b600061405260001984600802614034565b1980831691505092915050565b600061406b8383614041565b9150826002028217905092915050565b6140858383613e35565b67ffffffffffffffff81111561409e5761409d613e40565b5b6140a88254613e9e565b6140b3828285613fee565b6000601f8311600181146140e257600084156140d0578287013590505b6140da858261405f565b865550614142565b601f1984166140f086613ecf565b60005b82811015614118578489013582556001820191506020850194506020810190506140f3565b868310156141355784890135614131601f891682614041565b8355505b6001600288020188555050505b50505050505050565b82818337600083830152505050565b60006141668385613cf5565b935061417383858461414b565b61417c83613d30565b840190509392505050565b600060608201905061419c60008301876139cf565b6141a96020830186613bbf565b81810360408301526141bc81848661415a565b905095945050505050565b60006141d28261399d565b9050919050565b6141e2816141c7565b81146141ed57600080fd5b50565b6000813590506141ff816141d9565b92915050565b600080fd5b61421382613d30565b810181811067ffffffffffffffff8211171561423257614231613e40565b5b80604052505050565b60006142456138ce565b9050614251828261420a565b919050565b600067ffffffffffffffff82111561427157614270613e40565b5b61427a82613d30565b9050602081019050919050565b600061429a61429584614256565b61423b565b9050828152602081018484840111156142b6576142b5614205565b5b6142c184828561414b565b509392505050565b600082601f8301126142de576142dd6139f9565b5b81356142ee848260208601614287565b91505092915050565b6000806000606084860312156143105761430f6138d8565b5b600061431e868287016141f0565b935050602061432f868287016141f0565b925050604084013567ffffffffffffffff8111156143505761434f6138dd565b5b61435c868287016142c9565b9150509250925092565b600060408201905061437b60008301856139cf565b61438860208301846139cf565b9392505050565b61439882613cea565b67ffffffffffffffff8111156143b1576143b0613e40565b5b6143bb8254613e9e565b6143c6828285613fee565b600060209050601f8311600181146143f957600084156143e7578287015190505b6143f1858261405f565b865550614459565b601f19841661440786613ecf565b60005b8281101561442f5784890151825560018201915060208501945060208101905061440a565b8683101561444c5784890151614448601f891682614041565b8355505b6001600288020188555050505b505050505050565b6000815461446e81613e9e565b6144788186613cf5565b9450600182166000811461449357600181146144a9576144dc565b60ff1983168652811515602002860193506144dc565b6144b285613ecf565b60005b838110156144d4578154818901526001820191506020810190506144b5565b808801955050505b50505092915050565b60006080820190506144fa60008301876139cf565b61450760208301866139cf565b6145146040830185613bbf565b81810360608301526145268184614461565b905095945050505050565b600060808201905061454660008301876139cf565b61455360208301866139cf565b61456060408301856139cf565b61456d6060830184613bbf565b95945050505050565b50565b6000614586600083613cf5565b915061459182614576565b600082019050919050565b60006080820190506145b160008301866139cf565b6145be60208301856139cf565b6145cb6040830184613bbf565b81810360608301526145dc81614579565b9050949350505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600061461f61461a614615846145e6565b613f53565b6145f0565b9050919050565b61462f81614604565b82525050565b600060208201905061464a6000830184614626565b92915050565b60008151905061465f81613aab565b92915050565b60006020828403121561467b5761467a6138d8565b5b600061468984828501614650565b91505092915050565b60006060820190506146a760008301866139cf565b6146b46020830185613bbf565b81810360408301526146c68184613d41565b9050949350505050565b600080fd5b600080fd5b600080858511156146ee576146ed6146d0565b5b838611156146ff576146fe6146d5565b5b6001850283019150848603905094509492505050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061474d8383613e35565b826147588135614715565b92506014821015614798576147937fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802613ef4565b831692505b50509291505056fea2646970667358221220ad80cd04a81c22dea233fb4b00024d53fe56c0efc2ae0bb4697155e7ab2fdcdb64736f6c63430008160033",
894
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c80637b103999116100c3578063bd1d07b51161007c578063bd1d07b5146103a1578063c9437e5e146103bf578063cb3cfb29146103dd578063cd6dc687146103f9578063e3d79a6e14610415578063e534155d1461043157610158565b80637b103999146102f35780637da0a8771461031157806383d38fcb1461032f5780638fb33c3c1461034b578063a47d1f5e14610367578063baf139751461038557610158565b806320f99c0a1161011557806320f99c0a14610233578063308f8e1c1461025157806334427f611461026d57806338af3eed14610289578063452736fd146102a7578063572b6c05146102c357610158565b806301ffc9a71461015d57806302fb0c5e1461018d578063035aedfa146101ab57806305de0a2e146101c9578063150b7a02146101e557806317d70f7c14610215575b600080fd5b6101776004803603810190610172919061393a565b61044f565b6040516101849190613982565b60405180910390f35b6101956104b9565b6040516101a29190613982565b60405180910390f35b6101b36104cc565b6040516101c091906139de565b60405180910390f35b6101e360048036038101906101de9190613a5e565b6104f2565b005b6101ff60048036038101906101fa9190613b0d565b6109e5565b60405161020c9190613ba4565b60405180910390f35b61021d610eeb565b60405161022a9190613bce565b60405180910390f35b61023b610ef1565b60405161024891906139de565b60405180910390f35b61026b60048036038101906102669190613be9565b610f17565b005b61028760048036038101906102829190613c49565b6113a9565b005b6102916113c5565b60405161029e91906139de565b60405180910390f35b6102c160048036038101906102bc9190613a5e565b6113eb565b005b6102dd60048036038101906102d89190613cbd565b6119fd565b6040516102ea9190613982565b60405180910390f35b6102fb611a3c565b60405161030891906139de565b60405180910390f35b610319611a60565b60405161032691906139de565b60405180910390f35b61034960048036038101906103449190613a5e565b611a88565b005b61036560048036038101906103609190613a5e565b611f19565b005b61036f612201565b60405161037c9190613d7a565b60405180910390f35b61039f600480360381019061039a9190613be9565b61228f565b005b6103a961271f565b6040516103b691906139de565b60405180910390f35b6103c7612745565b6040516103d49190613982565b60405180910390f35b6103f760048036038101906103f29190613a5e565b612754565b005b610413600480360381019061040e9190613d9c565b612c47565b005b61042f600480360381019061042a9190613be9565b612dd8565b005b610439613268565b60405161044691906139de565b60405180910390f35b60007f3e143f7b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600660149054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105849190613e08565b905080156105be576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16610604576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661064561328e565b73ffffffffffffffffffffffffffffffffffffffff1614610692576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069a61329d565b6106d0576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115610710576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610798576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610841576040517f8c90bf4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84846007918261085292919061407b565b506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506108ef8188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061336e565b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1661096761328e565b73ffffffffffffffffffffffffffffffffffffffff167f9d836937a837e685e1ce6796afaed48df16cd88219d6775dc46b6617b847dd1360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548c8c6040516109d49493929190614187565b60405180910390a450505050505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190613e08565b90508015610ab1576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16610af7576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001548514610b3d57846040517fed15e6cf000000000000000000000000000000000000000000000000000000008152600401610b349190613bce565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bcd57336040517f540b9601000000000000000000000000000000000000000000000000000000008152600401610bc491906139de565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610c795750600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610dce5760008585905003610cbb576040517f10daa94f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008787810190610ccf91906142f7565b925092509250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610d3c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610d805782826040517fbd805e91000000000000000000000000000000000000000000000000000000008152600401610d77929190614366565b60405180910390fd5b610d99836040518060200160405280600081525061347e565b610db2826040518060200160405280600081525061336e565b8060079081610dc1919061438f565b5060019350505050610de1565b848460079182610ddf92919061407b565b505b801515600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f949aacc83c3ca79403342afa7cf9a504f34996bc163596e87d5f0bd365a60f7e610e7f61328e565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546007604051610eb594939291906144e5565b60405180910390a47f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f9250505095945050505050565b60015481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa99190613e08565b90508015610fe3576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611029576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661106a61328e565b73ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110bf61329d565b6110f5576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611135576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361119b576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061126657508573ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61129c576040517f1c98cac300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084846007918261135292919061407b565b506113a18686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061347e565b505050505050565b6113b4848383610f17565b6113bf83838361228f565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147d9190613e08565b905080156114b7576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff166114fd576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61150561329d565b61153b576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661157c61328e565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661160a61328e565b73ffffffffffffffffffffffffffffffffffffffff1614611657576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611697576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117425750600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15611779576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84846007918261178a92919061407b565b506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611875818a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061347e565b6118c3838a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061336e565b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f2e6f393db2fca12e96dfa806cf78ed2daddc38a90ffd973ef5a6b4fdbabae4106119b561328e565b8760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546040516119ea9493929190614531565b60405180910390a4505050505050505050565b6000611a07611a60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a9190613e08565b90508015611b54576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16611b9a576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bdb61328e565b73ffffffffffffffffffffffffffffffffffffffff1614611c28576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c6961328e565b73ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cbe61329d565b611cf4576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115611d34576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d4e600060405180602001604052806000815250613625565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab67aa583060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001546040518463ffffffff1660e01b8152600401611dcd9392919061459c565b600060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b50505050848460079182611e1092919061407b565b506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e9d61328e565b73ffffffffffffffffffffffffffffffffffffffff167fea17cbc366059ac6185e6bfc7eebd173d3260bb6bc373830f9d04260e72c244b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548888604051611f0a9493929190614187565b60405180910390a25050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190613e08565b90508015611fe5576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff1661202b576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282607882829050111561206b576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61207361329d565b156120aa576040517fd5475a0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461213a57336040517f540b960100000000000000000000000000000000000000000000000000000000815260040161213191906139de565b60405180910390fd5b61215460006040518060200160405280600081525061347e565b61216e60006040518060200160405280600081525061336e565b6000600660146101000a81548160ff02191690831515021790555084846007918261219a92919061407b565b507f49c56a060f3a16e899a045537fb86df850339c10c8c140a052aca89cbcc30c0b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660015487876040516121f29493929190614187565b60405180910390a15050505050565b6007805461220e90613e9e565b80601f016020809104026020016040519081016040528092919081815260200182805461223a90613e9e565b80156122875780601f1061225c57610100808354040283529160200191612287565b820191906000526020600020905b81548152906001019060200180831161226a57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190613e08565b9050801561235b576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff166123a1576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123e261328e565b73ffffffffffffffffffffffffffffffffffffffff161461242f576040517f667b3fbf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243761329d565b61246d576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260788282905011156124ad576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612513576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361259a576040517f702e6e6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612654576000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484600791826126c892919061407b565b506127178686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061336e565b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061274f61329d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e69190613e08565b90508015612820576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612866576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128a761328e565b73ffffffffffffffffffffffffffffffffffffffff16146128f4576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128fc61329d565b612932576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115612972576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129fa576040517f2c75c45a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612aa3576040517f8c90bf4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b848460079182612ab492919061407b565b506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612b518188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061347e565b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16612bc961328e565b73ffffffffffffffffffffffffffffffffffffffff167f5ede0a76a5fa7073243cab067bae342c2fbb26acd128b30356d94d1a4c1d20ea60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548c8c604051612c369493929190614187565b60405180910390a450505050505050565b6000612c51613735565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015612c9f5750825b9050600060018367ffffffffffffffff16148015612cd4575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015612ce2575080155b15612d19576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315612d695760018560000160086101000a81548160ff0219169083151502179055505b612d738787613749565b8315612dcf5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051612dc69190614635565b60405180910390a15b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6a9190613e08565b90508015612ea4576040517fad49811c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660149054906101000a900460ff16612eea576040517f7c339b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f2b61328e565b73ffffffffffffffffffffffffffffffffffffffff1614612f78576040517ff52018ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f8061329d565b612fb6576040517f2fd3952300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82826078828290501115612ff6576040517f1408658400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361307d576040517fdd9f921d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613104576040517f98f83ce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613200576000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b84846007918261321192919061407b565b506132608686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613625565b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006132986137b7565b905090565b60003073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6001546040518263ffffffff1660e01b81526004016133119190613bce565b602060405180830381865afa15801561332e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133529190614665565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b8173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166133c661328e565b73ffffffffffffffffffffffffffffffffffffffff167f220142965e07ad032af0005eb4747d4a55acc8c786d04f087ce27e10ea2d140460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548660405161343193929190614692565b60405180910390a481600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134d661328e565b73ffffffffffffffffffffffffffffffffffffffff167f48509251c4976d4cc0f5420ed39336d873f0713b399e0200c55069c04937b96860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001548660405161354193929190614692565b60405180910390a4600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135e0576135df60006040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250613625565b5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661367d61328e565b73ffffffffffffffffffffffffffffffffffffffff167ff5b0435494e36d58667cba8d6d2b6983f1c65c50be1cb5a861fdf3ad76357a6e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154866040516136e893929190614692565b60405180910390a481600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600080613740613823565b90508091505090565b61375161384e565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001819055506001600660146101000a81548160ff0219169083151502179055505050565b6000806000369050905060006137cb61388e565b90508082101580156137e257506137e1336119fd565b5b15613813576000368284039080926137fc939291906146da565b906138079190614741565b60601c92505050613820565b61381b61389d565b925050505b90565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060001b905090565b6138566138a5565b61388c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006138986138c5565b905090565b600033905090565b60006138af613735565b60000160089054906101000a900460ff16905090565b60006014905090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613917816138e2565b811461392257600080fd5b50565b6000813590506139348161390e565b92915050565b6000602082840312156139505761394f6138d8565b5b600061395e84828501613925565b91505092915050565b60008115159050919050565b61397c81613967565b82525050565b60006020820190506139976000830184613973565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139c88261399d565b9050919050565b6139d8816139bd565b82525050565b60006020820190506139f360008301846139cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613a1e57613a1d6139f9565b5b8235905067ffffffffffffffff811115613a3b57613a3a6139fe565b5b602083019150836001820283011115613a5757613a56613a03565b5b9250929050565b60008060208385031215613a7557613a746138d8565b5b600083013567ffffffffffffffff811115613a9357613a926138dd565b5b613a9f85828601613a08565b92509250509250929050565b613ab4816139bd565b8114613abf57600080fd5b50565b600081359050613ad181613aab565b92915050565b6000819050919050565b613aea81613ad7565b8114613af557600080fd5b50565b600081359050613b0781613ae1565b92915050565b600080600080600060808688031215613b2957613b286138d8565b5b6000613b3788828901613ac2565b9550506020613b4888828901613ac2565b9450506040613b5988828901613af8565b935050606086013567ffffffffffffffff811115613b7a57613b796138dd565b5b613b8688828901613a08565b92509250509295509295909350565b613b9e816138e2565b82525050565b6000602082019050613bb96000830184613b95565b92915050565b613bc881613ad7565b82525050565b6000602082019050613be36000830184613bbf565b92915050565b600080600060408486031215613c0257613c016138d8565b5b6000613c1086828701613ac2565b935050602084013567ffffffffffffffff811115613c3157613c306138dd565b5b613c3d86828701613a08565b92509250509250925092565b60008060008060608587031215613c6357613c626138d8565b5b6000613c7187828801613ac2565b9450506020613c8287828801613ac2565b935050604085013567ffffffffffffffff811115613ca357613ca26138dd565b5b613caf87828801613a08565b925092505092959194509250565b600060208284031215613cd357613cd26138d8565b5b6000613ce184828501613ac2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d24578082015181840152602081019050613d09565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d4c82613cea565b613d568185613cf5565b9350613d66818560208601613d06565b613d6f81613d30565b840191505092915050565b60006020820190508181036000830152613d948184613d41565b905092915050565b60008060408385031215613db357613db26138d8565b5b6000613dc185828601613ac2565b9250506020613dd285828601613af8565b9150509250929050565b613de581613967565b8114613df057600080fd5b50565b600081519050613e0281613ddc565b92915050565b600060208284031215613e1e57613e1d6138d8565b5b6000613e2c84828501613df3565b91505092915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613eb657607f821691505b602082108103613ec957613ec8613e6f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613f317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ef4565b613f3b8683613ef4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613f78613f73613f6e84613ad7565b613f53565b613ad7565b9050919050565b6000819050919050565b613f9283613f5d565b613fa6613f9e82613f7f565b848454613f01565b825550505050565b600090565b613fbb613fae565b613fc6818484613f89565b505050565b5b81811015613fea57613fdf600082613fb3565b600181019050613fcc565b5050565b601f82111561402f5761400081613ecf565b61400984613ee4565b81016020851015614018578190505b61402c61402485613ee4565b830182613fcb565b50505b505050565b600082821c905092915050565b600061405260001984600802614034565b1980831691505092915050565b600061406b8383614041565b9150826002028217905092915050565b6140858383613e35565b67ffffffffffffffff81111561409e5761409d613e40565b5b6140a88254613e9e565b6140b3828285613fee565b6000601f8311600181146140e257600084156140d0578287013590505b6140da858261405f565b865550614142565b601f1984166140f086613ecf565b60005b82811015614118578489013582556001820191506020850194506020810190506140f3565b868310156141355784890135614131601f891682614041565b8355505b6001600288020188555050505b50505050505050565b82818337600083830152505050565b60006141668385613cf5565b935061417383858461414b565b61417c83613d30565b840190509392505050565b600060608201905061419c60008301876139cf565b6141a96020830186613bbf565b81810360408301526141bc81848661415a565b905095945050505050565b60006141d28261399d565b9050919050565b6141e2816141c7565b81146141ed57600080fd5b50565b6000813590506141ff816141d9565b92915050565b600080fd5b61421382613d30565b810181811067ffffffffffffffff8211171561423257614231613e40565b5b80604052505050565b60006142456138ce565b9050614251828261420a565b919050565b600067ffffffffffffffff82111561427157614270613e40565b5b61427a82613d30565b9050602081019050919050565b600061429a61429584614256565b61423b565b9050828152602081018484840111156142b6576142b5614205565b5b6142c184828561414b565b509392505050565b600082601f8301126142de576142dd6139f9565b5b81356142ee848260208601614287565b91505092915050565b6000806000606084860312156143105761430f6138d8565b5b600061431e868287016141f0565b935050602061432f868287016141f0565b925050604084013567ffffffffffffffff8111156143505761434f6138dd565b5b61435c868287016142c9565b9150509250925092565b600060408201905061437b60008301856139cf565b61438860208301846139cf565b9392505050565b61439882613cea565b67ffffffffffffffff8111156143b1576143b0613e40565b5b6143bb8254613e9e565b6143c6828285613fee565b600060209050601f8311600181146143f957600084156143e7578287015190505b6143f1858261405f565b865550614459565b601f19841661440786613ecf565b60005b8281101561442f5784890151825560018201915060208501945060208101905061440a565b8683101561444c5784890151614448601f891682614041565b8355505b6001600288020188555050505b505050505050565b6000815461446e81613e9e565b6144788186613cf5565b9450600182166000811461449357600181146144a9576144dc565b60ff1983168652811515602002860193506144dc565b6144b285613ecf565b60005b838110156144d4578154818901526001820191506020810190506144b5565b808801955050505b50505092915050565b60006080820190506144fa60008301876139cf565b61450760208301866139cf565b6145146040830185613bbf565b81810360608301526145268184614461565b905095945050505050565b600060808201905061454660008301876139cf565b61455360208301866139cf565b61456060408301856139cf565b61456d6060830184613bbf565b95945050505050565b50565b6000614586600083613cf5565b915061459182614576565b600082019050919050565b60006080820190506145b160008301866139cf565b6145be60208301856139cf565b6145cb6040830184613bbf565b81810360608301526145dc81614579565b9050949350505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600061461f61461a614615846145e6565b613f53565b6145f0565b9050919050565b61462f81614604565b82525050565b600060208201905061464a6000830184614626565b92915050565b60008151905061465f81613aab565b92915050565b60006020828403121561467b5761467a6138d8565b5b600061468984828501614650565b91505092915050565b60006060820190506146a760008301866139cf565b6146b46020830185613bbf565b81810360408301526146c68184613d41565b9050949350505050565b600080fd5b600080fd5b600080858511156146ee576146ed6146d0565b5b838611156146ff576146fe6146d5565b5b6001850283019150848603905094509492505050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600061474d8383613e35565b826147588135614715565b92506014821015614798576147937fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802613ef4565b831692505b50509291505056fea2646970667358221220ad80cd04a81c22dea233fb4b00024d53fe56c0efc2ae0bb4697155e7ab2fdcdb64736f6c63430008160033",
821
895
  "linkReferences": {},
822
896
  "deployedLinkReferences": {}
823
897
  }