TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

019d5666-f542-7208-84bc-d2e3db83e367

complete
Chain ID
1
Address
Block Number
Created
Sat, Apr 4, 2026 2:51 AM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
0
Source
Verified
Review Backing
Present
Best current signal
Untrusted CALL target/value reachable
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
42971 artifact.fetch complete 1 / 3 1 week ago
42972 proxy.resolve complete 1 / 3 1 week ago
42973 tool.cast_disasm complete 1 / 3 1 week ago
42974 analysis.bundle complete 1 / 3 1 week ago
42975 capability.graph complete 1 / 3 1 week ago
42976 detector.run complete 1 / 3 1 week ago
42977 validation.fork complete 1 / 3 1 week ago
43010 report.consolidate complete 1 / 6 1 week ago
43011 tool.slither complete 1 / 2 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no not_proxy
Implementation:
Verified Source: yes
Proxy evidence
{
    "status": "not_proxy"
}

Slither

tool.slither
Status
complete
Attempts
1 / 2
Findings
4
Solc
0.8.25 (solc-select)
View stderr
'forge clean' running (wd: /tmp/slither-bjjc5fai)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-bjjc5fai)
Impossible to generate IR for GPv2Settlement.executeInteractions (lib/contracts/src/contracts/GPv2Settlement.sol#446-466):
 'Contract' object has no attribute 'type'

GPv2Transfer.fastTransferFromAccount(IVault,GPv2Transfer.Data,address) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#46-77) uses arbitrary from in transferFrom: transfer.token.safeTransferFrom(transfer.account,recipient,transfer.amount) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#57-61)
GPv2Transfer.transferFromAccounts(IVault,GPv2Transfer.Data[],address) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#91-136) uses arbitrary from in transferFrom: transfer.token.safeTransferFrom(transfer.account,recipient,transfer.amount) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#113-117)
TransferLibrary.receiveAssets(address,address,uint256) (src/libraries/TransferLibrary.sol#40-48) uses arbitrary from in transferFrom: IERC20(asset).safeTransferFrom(from,address(this),assets) (src/libraries/TransferLibrary.sol#46)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom

StorageAccessible.simulateDelegatecallInternal(address,bytes) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#87-95) uses delegatecall to a input-controlled function id
	- (success,response) = targetContract.delegatecall(calldataPayload) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#93)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#controlled-delegatecall

Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) has bitwise-xor operator ^ instead of the exponentiation operator **: 
	 - inverse = (3 * denominator) ^ 2 (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#259)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exponentiation

GPv2Settlement.computeTradeExecution(GPv2Signing.RecoveredOrder,uint256,uint256,uint256,GPv2Transfer.Data,GPv2Transfer.Data) (lib/contracts/src/contracts/GPv2Settlement.sol#337-442) performs a multiplication on the result of a division:
	- executedBuyAmount = executedSellAmount.mul(sellPrice).ceilDiv(buyPrice) (lib/contracts/src/contracts/GPv2Settlement.sol#389-391)
	- executedSellAmount = executedBuyAmount.mul(buyPrice).div(sellPrice) (lib/contracts/src/contracts/GPv2Settlement.sol#411)
GPv2Settlement.computeTradeExecution(GPv2Signing.RecoveredOrder,uint256,uint256,uint256,GPv2Transfer.Data,GPv2Transfer.Data) (lib/contracts/src/contracts/GPv2Settlement.sol#337-442) performs a multiplication on the result of a division:
	- executedFeeAmount = order.feeAmount.mul(executedSellAmount).div(order.sellAmount) (lib/contracts/src/contracts/GPv2Settlement.sol#381-383)
	- executedSellAmount = executedBuyAmount.mul(buyPrice).div(sellPrice) (lib/contracts/src/contracts/GPv2Settlement.sol#411)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse = (3 * denominator) ^ 2 (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#259)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#263)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#264)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#265)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#266)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#267)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- denominator = denominator / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#244)
	- inverse *= 2 - denominator * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#268)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) performs a multiplication on the result of a division:
	- low = low / twos (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#247)
	- result = low * inverse (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#274)
Math.invMod(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#317-363) performs a multiplication on the result of a division:
	- quotient = gcd / remainder (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#339)
	- (gcd,remainder) = (remainder,gcd - remainder * quotient) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#341-348)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply

GPv2Settlement.swap(IVault.BatchSwapStep[],IERC20[],GPv2Trade.Data).funds (lib/contracts/src/contracts/GPv2Settlement.sol#166) is a local variable never initialized
GPv2Settlement.swap(IVault.BatchSwapStep[],IERC20[],GPv2Trade.Data).feeTransfer (lib/contracts/src/contracts/GPv2Settlement.sol#189) is a local variable never initialized
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables

GPv2Signing.setPreSignature(bytes,bool) (lib/contracts/src/contracts/mixins/GPv2Signing.sol#88-97) ignores return value by (None,owner,None) = orderUid.extractOrderUidParams() (lib/contracts/src/contracts/mixins/GPv2Signing.sol#89)
GPv2Settlement.invalidateOrder(bytes) (lib/contracts/src/contracts/GPv2Settlement.sol#250-255) ignores return value by (None,owner,None) = orderUid.extractOrderUidParams() (lib/contracts/src/contracts/GPv2Settlement.sol#251)
GPv2Settlement.freeOrderStorage(mapping(bytes => uint256),bytes[]) (lib/contracts/src/contracts/GPv2Settlement.sol#474-487) ignores return value by (None,None,validTo) = orderUid.extractOrderUidParams() (lib/contracts/src/contracts/GPv2Settlement.sol#481)
MellowACL._revokeRole(bytes32,address) (src/permissions/MellowACL.sol#47-56) ignores return value by _mellowACLStorage().supportedRoles.remove(role) (src/permissions/MellowACL.sol#50)
AccessControlEnumerableUpgradeable._grantRole(bytes32,address) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#85-92) ignores return value by $._roleMembers[role].add(account) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#89)
AccessControlEnumerableUpgradeable._revokeRole(bytes32,address) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#97-104) ignores return value by $._roleMembers[role].remove(account) (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#101)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return

StorageAccessible.simulateDelegatecallInternal(address,bytes).targetContract (lib/contracts/src/contracts/mixins/StorageAccessible.sol#88) lacks a zero-check on :
		- (success,response) = targetContract.delegatecall(calldataPayload) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#93)
SwapModule.constructor(string,uint256,address,address,address).cowswapSettlement_ (src/utils/SwapModule.sol#42) lacks a zero-check on :
		- cowswapSettlement = cowswapSettlement_ (src/utils/SwapModule.sol#46)
SwapModule.constructor(string,uint256,address,address,address).cowswapVaultRelayer_ (src/utils/SwapModule.sol#43) lacks a zero-check on :
		- cowswapVaultRelayer = cowswapVaultRelayer_ (src/utils/SwapModule.sol#47)
SwapModule.constructor(string,uint256,address,address,address).weth_ (src/utils/SwapModule.sol#44) lacks a zero-check on :
		- weth = weth_ (src/utils/SwapModule.sol#48)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation

GPv2Signing.recoverEip1271Signer(bytes32,bytes) (lib/contracts/src/contracts/mixins/GPv2Signing.sol#281-303) has external calls inside a loop: require(bool,string)(EIP1271Verifier(owner).isValidSignature(orderDigest,signature) == GPv2EIP1271.MAGICVALUE,GPv2: invalid eip1271 signature) (lib/contracts/src/contracts/mixins/GPv2Signing.sol#298-302)
	Calls stack containing the loop:
		GPv2Settlement.settle(IERC20[],uint256[],GPv2Trade.Data[],GPv2Interaction.Data[][3])
		GPv2Settlement.computeTradeExecutions(IERC20[],uint256[],GPv2Trade.Data[])
		GPv2Signing.recoverOrderFromTrade(GPv2Signing.RecoveredOrder,IERC20[],GPv2Trade.Data)
		GPv2Signing.recoverOrderSigner(GPv2Order.Data,GPv2Signing.Scheme,bytes)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop

Reentrancy in GPv2Settlement.swap(IVault.BatchSwapStep[],IERC20[],GPv2Trade.Data) (lib/contracts/src/contracts/GPv2Settlement.sol#153-242):
	External calls:
	- tokenDeltas = vaultRelayer.batchSwapWithFee(kind,swaps,tokens,funds,limits,order.validTo,feeTransfer) (lib/contracts/src/contracts/GPv2Settlement.sol#195-205)
	State variables written after the call(s):
	- filledAmount[orderUid] = order.sellAmount (lib/contracts/src/contracts/GPv2Settlement.sol#223)
	- filledAmount[orderUid] = order.buyAmount (lib/contracts/src/contracts/GPv2Settlement.sol#229)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2

Reentrancy in SwapModule.createLimitOrder(ISwapModule.Params,GPv2Order.Data,bytes) (src/utils/SwapModule.sol#286-294):
	External calls:
	- GPv2Settlement(address(cowswapSettlement)).setPreSignature(orderUid,true) (src/utils/SwapModule.sol#292)
	Event emitted after the call(s):
	- LimitOrderCreated(params,orderUid) (src/utils/SwapModule.sol#293)
Reentrancy in SwapModule.invalidateOrder(bytes) (src/utils/SwapModule.sol#297-300):
	External calls:
	- GPv2Settlement(address(cowswapSettlement)).invalidateOrder(orderUid) (src/utils/SwapModule.sol#298)
	Event emitted after the call(s):
	- LimitOrderInvalidated(orderUid) (src/utils/SwapModule.sol#299)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3

GPv2Settlement.computeTradeExecution(GPv2Signing.RecoveredOrder,uint256,uint256,uint256,GPv2Transfer.Data,GPv2Transfer.Data) (lib/contracts/src/contracts/GPv2Settlement.sol#337-442) uses timestamp for comparisons
	Dangerous comparisons:
	- require(bool,string)(order.validTo >= block.timestamp,GPv2: order expired) (lib/contracts/src/contracts/GPv2Settlement.sol#349)
GPv2Settlement.freeOrderStorage(mapping(bytes => uint256),bytes[]) (lib/contracts/src/contracts/GPv2Settlement.sol#474-487) uses timestamp for comparisons
	Dangerous comparisons:
	- require(bool,string)(validTo < block.timestamp,GPv2: order still valid) (lib/contracts/src/contracts/GPv2Settlement.sol#483)
SwapModule.checkParams(ISwapModule.Params) (src/utils/SwapModule.sol#107-134) uses timestamp for comparisons
	Dangerous comparisons:
	- params.deadline < block.timestamp (src/utils/SwapModule.sol#128)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp

GPv2Interaction.execute(GPv2Interaction.Data) (lib/contracts/src/contracts/libraries/GPv2Interaction.sol#18-49) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2Interaction.sol#31-48)
GPv2Interaction.selector(GPv2Interaction.Data) (lib/contracts/src/contracts/libraries/GPv2Interaction.sol#56-72) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2Interaction.sol#68-70)
GPv2Order.hash(GPv2Order.Data,bytes32) (lib/contracts/src/contracts/libraries/GPv2Order.sol#133-165) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2Order.sol#144-150)
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2Order.sol#158-164)
GPv2Order.packOrderUidParams(bytes,bytes32,address,uint32) (lib/contracts/src/contracts/libraries/GPv2Order.sol#178-212) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2Order.sol#207-211)
GPv2Order.extractOrderUidParams(bytes) (lib/contracts/src/contracts/libraries/GPv2Order.sol#226-242) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2Order.sol#237-241)
GPv2SafeERC20.safeTransfer(IERC20,address,uint256) (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#12-32) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#16-29)
GPv2SafeERC20.safeTransferFrom(IERC20,address,address,uint256) (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#36-65) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#45-62)
GPv2SafeERC20.getLastTransferResult(IERC20) (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#70-130) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#80-129)
GPv2SafeERC20.getLastTransferResult.asm_0.revertWithMessage() (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#93-99) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#93-99)
GPv2Transfer.truncateBalanceOpsArray(IVault.UserBalanceOp[],uint256) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#191-203) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#200-202)
GPv2Signing.constructor() (lib/contracts/src/contracts/mixins/GPv2Signing.sol#63-81) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/mixins/GPv2Signing.sol#68-70)
GPv2Signing.ecdsaRecover(bytes32,bytes) (lib/contracts/src/contracts/mixins/GPv2Signing.sol#183-209) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/mixins/GPv2Signing.sol#198-205)
GPv2Signing.recoverEip1271Signer(bytes32,bytes) (lib/contracts/src/contracts/mixins/GPv2Signing.sol#281-303) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/mixins/GPv2Signing.sol#288-291)
GPv2Signing.recoverPreSigner(bytes32,bytes,uint32) (lib/contracts/src/contracts/mixins/GPv2Signing.sol#313-334) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/mixins/GPv2Signing.sol#322-325)
StorageAccessible.getStorageAt(uint256,uint256) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#39-52) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/mixins/StorageAccessible.sol#46-49)
StorageAccessible.revertWith(bytes) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#97-102) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/mixins/StorageAccessible.sol#99-101)
StorageAccessible.setLength(bytes,uint256) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#104-109) uses assembly
	- INLINE ASM (lib/contracts/src/contracts/mixins/StorageAccessible.sol#106-108)
SafeERC20._safeTransfer(IERC20,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#176-200) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#179-199)
SafeERC20._safeTransferFrom(IERC20,address,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#212-244) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#221-243)
SafeERC20._safeApprove(IERC20,address,uint256,bool) (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#255-279) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#258-278)
Arrays._begin(uint256[]) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#142-146) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#143-145)
Arrays._mload(uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#161-165) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#162-164)
Arrays._swap(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#170-177) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#171-176)
Arrays._castToUint256Array(address[]) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#180-184) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#181-183)
Arrays._castToUint256Array(bytes32[]) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#187-191) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#188-190)
Arrays._castToUint256Comp(function(address,address) returns(bool)) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#194-200) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#197-199)
Arrays._castToUint256Comp(function(bytes32,bytes32) returns(bool)) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#203-209) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#206-208)
Arrays.slice(address[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#394-406) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#401-403)
Arrays.slice(bytes32[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#424-436) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#431-433)
Arrays.slice(uint256[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#454-466) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#461-463)
Arrays.splice(address[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#485-497) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#491-494)
Arrays.replace(address[],uint256,address[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#526-548) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#539-545)
Arrays.splice(bytes32[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#567-579) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#573-576)
Arrays.replace(bytes32[],uint256,bytes32[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#608-630) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#621-627)
Arrays.splice(uint256[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#649-661) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#655-658)
Arrays.replace(uint256[],uint256,uint256[],uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#690-712) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#703-709)
Arrays.unsafeAccess(address[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#719-725) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#721-723)
Arrays.unsafeAccess(bytes32[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#732-738) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#734-736)
Arrays.unsafeAccess(uint256[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#745-751) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#747-749)
Arrays.unsafeAccess(bytes[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#758-764) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#760-762)
Arrays.unsafeAccess(string[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#771-777) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#773-775)
Arrays.unsafeMemoryAccess(address[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#784-788) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#785-787)
Arrays.unsafeMemoryAccess(bytes32[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#795-799) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#796-798)
Arrays.unsafeMemoryAccess(uint256[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#806-810) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#807-809)
Arrays.unsafeMemoryAccess(bytes[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#817-821) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#818-820)
Arrays.unsafeMemoryAccess(string[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#828-832) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#829-831)
Arrays.unsafeSetLength(address[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#839-843) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#840-842)
Arrays.unsafeSetLength(bytes32[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#850-854) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#851-853)
Arrays.unsafeSetLength(uint256[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#861-865) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#862-864)
Arrays.unsafeSetLength(bytes[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#872-876) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#873-875)
Arrays.unsafeSetLength(string[],uint256) (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#883-887) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#884-886)
LowLevelCall.callNoReturn(address,uint256,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#19-23) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#20-22)
LowLevelCall.callReturn64Bytes(address,uint256,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#38-48) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#43-47)
LowLevelCall.staticcallNoReturn(address,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#51-55) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#52-54)
LowLevelCall.staticcallReturn64Bytes(address,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#62-71) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#66-70)
LowLevelCall.delegatecallNoReturn(address,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#74-78) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#75-77)
LowLevelCall.delegatecallReturn64Bytes(address,bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#85-94) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#89-93)
LowLevelCall.returnDataSize() (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#97-101) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#98-100)
LowLevelCall.returnData() (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#104-111) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#105-110)
LowLevelCall.bubbleRevert() (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#114-120) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#115-119)
LowLevelCall.bubbleRevert(bytes) (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#122-126) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#123-125)
Panic.panic(uint256) (lib/openzeppelin-contracts/contracts/utils/Panic.sol#50-56) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/Panic.sol#51-55)
SlotDerivation.erc7201Slot(string) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#45-50) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#46-49)
SlotDerivation.deriveArray(bytes32) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#64-69) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#65-68)
SlotDerivation.deriveMapping(bytes32,address) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#74-80) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#75-79)
SlotDerivation.deriveMapping(bytes32,bool) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#85-91) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#86-90)
SlotDerivation.deriveMapping(bytes32,bytes32) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#96-102) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#97-101)
SlotDerivation.deriveMapping(bytes32,uint256) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#107-113) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#108-112)
SlotDerivation.deriveMapping(bytes32,int256) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#118-124) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#119-123)
SlotDerivation.deriveMapping(bytes32,string) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#129-139) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#130-138)
SlotDerivation.deriveMapping(bytes32,bytes) (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#144-154) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#145-153)
StorageSlot.getAddressSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#66-70) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#67-69)
StorageSlot.getBooleanSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#75-79) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#76-78)
StorageSlot.getBytes32Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#84-88) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#85-87)
StorageSlot.getUint256Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#93-97) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#94-96)
StorageSlot.getInt256Slot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#102-106) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#103-105)
StorageSlot.getStringSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#111-115) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#112-114)
StorageSlot.getStringSlot(string) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#120-124) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#121-123)
StorageSlot.getBytesSlot(bytes32) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#129-133) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#130-132)
StorageSlot.getBytesSlot(bytes) (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#138-142) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#139-141)
Math.add512(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#25-30) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#26-29)
Math.mul512(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#37-46) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#41-45)
Math.tryMul(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#73-84) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#76-80)
Math.tryDiv(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#89-97) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#92-95)
Math.tryMod(uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#102-110) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#105-108)
Math.mulDiv(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#206-277) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#229-236)
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#242-251)
Math.tryModExp(uint256,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#411-435) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#413-434)
Math.tryModExp(bytes,bytes,bytes) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#451-473) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#463-472)
Math._zeroBytes(bytes) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#478-490) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#482-484)
Math.log2(uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#619-658) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#655-657)
SafeCast.toUint(bool) (lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol#1157-1161) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol#1158-1160)
EnumerableSet.values(EnumerableSet.Bytes32Set) (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#276-285) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#280-282)
EnumerableSet.values(EnumerableSet.Bytes32Set,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#295-304) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#299-301)
EnumerableSet.values(EnumerableSet.Bytes4Set) (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#378-387) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#382-384)
EnumerableSet.values(EnumerableSet.Bytes4Set,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#397-406) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#401-403)
EnumerableSet.values(EnumerableSet.AddressSet) (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#480-489) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#484-486)
EnumerableSet.values(EnumerableSet.AddressSet,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#499-508) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#503-505)
EnumerableSet.values(EnumerableSet.UintSet) (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#582-591) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#586-588)
EnumerableSet.values(EnumerableSet.UintSet,uint256,uint256) (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#601-610) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#605-607)
AccessControlUpgradeable._getAccessControlStorage() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#67-71) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#68-70)
AccessControlEnumerableUpgradeable._getAccessControlEnumerableStorage() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#25-29) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#26-28)
Initializable._getInitializableStorage() (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#232-237) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#234-236)
ReentrancyGuardUpgradeable._getReentrancyGuardStorage() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#49-53) uses assembly
	- INLINE ASM (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#50-52)
MellowACL._mellowACLStorage() (src/permissions/MellowACL.sol#58-63) uses assembly
	- INLINE ASM (src/permissions/MellowACL.sol#60-62)
SwapModule._swapModuleStorage() (src/utils/SwapModule.sol#306-311) uses assembly
	- INLINE ASM (src/utils/SwapModule.sol#308-310)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage

7 different versions of Solidity are used:
	- Version constraint >=0.7.6<0.9.0 is used by:
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/GPv2Settlement.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/GPv2VaultRelayer.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/interfaces/GPv2Authentication.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/interfaces/GPv2EIP1271.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/interfaces/IERC20.sol#9)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/interfaces/IVault.sol#15)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2Interaction.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2Order.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2Trade.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/SafeCast.sol#11)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/SafeMath.sol#11)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/mixins/GPv2Signing.sol#2)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/mixins/ReentrancyGuard.sol#8)
		->=0.7.6<0.9.0 (lib/contracts/src/contracts/mixins/StorageAccessible.sol#9)
	- Version constraint >=0.8.4 is used by:
		->=0.8.4 (lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)
		->=0.8.4 (lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)
	- Version constraint >=0.6.2 is used by:
		->=0.6.2 (lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol#4)
		->=0.6.2 (lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)
	- Version constraint >=0.4.16 is used by:
		->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol#4)
		->=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol#4)
		->=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)
		->=0.4.16 (lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)
	- Version constraint ^0.8.20 is used by:
		-^0.8.20 (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Comparators.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Errors.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Panic.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#5)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol#5)
		-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#4)
		-^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)
	- Version constraint ^0.8.24 is used by:
		-^0.8.24 (lib/openzeppelin-contracts/contracts/utils/Arrays.sol#5)
		-^0.8.24 (lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol#5)
	- Version constraint 0.8.25 is used by:
		-0.8.25 (src/interfaces/external/aave/IAaveOracle.sol#2)
		-0.8.25 (src/interfaces/factories/IFactoryEntity.sol#2)
		-0.8.25 (src/interfaces/permissions/IMellowACL.sol#2)
		-0.8.25 (src/interfaces/utils/ISwapModule.sol#2)
		-0.8.25 (src/libraries/SlotLibrary.sol#2)
		-0.8.25 (src/libraries/TransferLibrary.sol#2)
		-0.8.25 (src/permissions/MellowACL.sol#2)
		-0.8.25 (src/utils/SwapModule.sol#2)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used

Version constraint >=0.7.6<0.9.0 is too complex.
It is used by:
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/GPv2Settlement.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/GPv2VaultRelayer.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/interfaces/GPv2Authentication.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/interfaces/GPv2EIP1271.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/interfaces/IERC20.sol#9)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/interfaces/IVault.sol#15)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2Interaction.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2Order.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2Trade.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/SafeCast.sol#11)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/libraries/SafeMath.sol#11)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/mixins/GPv2Signing.sol#2)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/mixins/ReentrancyGuard.sol#8)
	- >=0.7.6<0.9.0 (lib/contracts/src/contracts/mixins/StorageAccessible.sol#9)
Version constraint >=0.8.4 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- FullInlinerNonExpressionSplitArgumentEvaluationOrder
	- MissingSideEffectsOnSelectorAccess
	- AbiReencodingHeadOverflowWithStaticArrayCleanup
	- DirtyBytesArrayToStorage
	- DataLocationChangeInInternalOverride
	- NestedCalldataArrayAbiReencodingSizeValidation
	- SignedImmutables.
It is used by:
	- >=0.8.4 (lib/openzeppelin-contracts/contracts/access/IAccessControl.sol#4)
	- >=0.8.4 (lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol#4)
Version constraint >=0.6.2 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- MissingSideEffectsOnSelectorAccess
	- AbiReencodingHeadOverflowWithStaticArrayCleanup
	- DirtyBytesArrayToStorage
	- NestedCalldataArrayAbiReencodingSizeValidation
	- ABIDecodeTwoDimensionalArrayMemory
	- KeccakCaching
	- EmptyByteArrayCopy
	- DynamicArrayCleanup
	- MissingEscapingInFormatting
	- ArraySliceDynamicallyEncodedBaseType
	- ImplicitConstructorCallvalueCheck
	- TupleAssignmentMultiStackSlotComponents
	- MemoryArrayCreationOverflow.
It is used by:
	- >=0.6.2 (lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol#4)
	- >=0.6.2 (lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol#4)
Version constraint >=0.4.16 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- DirtyBytesArrayToStorage
	- ABIDecodeTwoDimensionalArrayMemory
	- KeccakCaching
	- EmptyByteArrayCopy
	- DynamicArrayCleanup
	- ImplicitConstructorCallvalueCheck
	- TupleAssignmentMultiStackSlotComponents
	- MemoryArrayCreationOverflow
	- privateCanBeOverridden
	- SignedArrayStorageCopy
	- ABIEncoderV2StorageArrayWithMultiSlotElement
	- DynamicConstructorArgumentsClippedABIV2
	- UninitializedFunctionPointerInConstructor_0.4.x
	- IncorrectEventSignatureInLibraries_0.4.x
	- ExpExponentCleanup
	- NestedArrayFunctionCallDecoder
	- ZeroFunctionSelector.
It is used by:
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol#4)
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol#4)
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol#4)
	- >=0.4.16 (lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol#4)
Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- VerbatimInvalidDeduplication
	- FullInlinerNonExpressionSplitArgumentEvaluationOrder
	- MissingSideEffectsOnSelectorAccess.
It is used by:
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Address.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Comparators.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Errors.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/Panic.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol#5)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol#5)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol#5)
	- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#4)
	- ^0.8.20 (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity

Low level call in StorageAccessible.simulateDelegatecall(address,bytes) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#60-78):
	- (None,response) = address(this).call(innerCall) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#70)
Low level call in StorageAccessible.simulateDelegatecallInternal(address,bytes) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#87-95):
	- (success,response) = targetContract.delegatecall(calldataPayload) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#93)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls

Parameter GPv2SafeERC20.getLastTransferResult.asm_0.revertWithMessage().length_getLastTransferResult_asm_0_revertWithMessage (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#93) is not in mixedCase
Parameter GPv2SafeERC20.getLastTransferResult.asm_0.revertWithMessage().message_getLastTransferResult_asm_0_revertWithMessage (lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol#93) is not in mixedCase
Function AccessControlUpgradeable.__AccessControl_init() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#82-83) is not in mixedCase
Function AccessControlUpgradeable.__AccessControl_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#85-86) is not in mixedCase
Constant AccessControlUpgradeable.AccessControlStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#65) is not in UPPER_CASE_WITH_UNDERSCORES
Function AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#31-32) is not in mixedCase
Function AccessControlEnumerableUpgradeable.__AccessControlEnumerable_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#34-35) is not in mixedCase
Constant AccessControlEnumerableUpgradeable.AccessControlEnumerableStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol#23) is not in UPPER_CASE_WITH_UNDERSCORES
Function ContextUpgradeable.__Context_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#18-19) is not in mixedCase
Function ContextUpgradeable.__Context_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#21-22) is not in mixedCase
Function ReentrancyGuardUpgradeable.__ReentrancyGuard_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#60-62) is not in mixedCase
Function ReentrancyGuardUpgradeable.__ReentrancyGuard_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#64-67) is not in mixedCase
Constant ReentrancyGuardUpgradeable.ReentrancyGuardStorageLocation (lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol#47) is not in UPPER_CASE_WITH_UNDERSCORES
Function ERC165Upgradeable.__ERC165_init() (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#22-23) is not in mixedCase
Function ERC165Upgradeable.__ERC165_init_unchained() (lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#25-26) is not in mixedCase
Function ISwapModule.MIN_MULTIPLIER() (src/interfaces/utils/ISwapModule.sol#41) is not in mixedCase
Function ISwapModule.MAX_MULTIPLIER() (src/interfaces/utils/ISwapModule.sol#42) is not in mixedCase
Function ISwapModule.BASE_MULTIPLIER() (src/interfaces/utils/ISwapModule.sol#43) is not in mixedCase
Function ISwapModule.TOKEN_IN_ROLE() (src/interfaces/utils/ISwapModule.sol#45) is not in mixedCase
Function ISwapModule.TOKEN_OUT_ROLE() (src/interfaces/utils/ISwapModule.sol#46) is not in mixedCase
Function ISwapModule.ROUTER_ROLE() (src/interfaces/utils/ISwapModule.sol#47) is not in mixedCase
Function ISwapModule.CALLER_ROLE() (src/interfaces/utils/ISwapModule.sol#48) is not in mixedCase
Function ISwapModule.SET_SLIPPAGE_ROLE() (src/interfaces/utils/ISwapModule.sol#49) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions

Math.log2(uint256) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#619-658) uses literals with too many digits:
	- r = r | byte(uint256,uint256)(x >> r,0x0000010102020202030303030303030300000000000000000000000000000000) (lib/openzeppelin-contracts/contracts/utils/math/Math.sol#656)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits
. analyzed (50 contracts with 100 detectors), 172 result(s) found
Metadata
{
    "solc": {
        "status": "ok",
        "use_rc": 0,
        "version": "0.8.25",
        "strategy": "solc-select",
        "solc_path": "/var/www/tripwire/.venv/bin/solc",
        "install_rc": 0,
        "use_stderr": null,
        "use_stdout": "Switched global version to 0.8.25",
        "install_stderr": null,
        "install_stdout": "Version '0.8.25' is already installed, skipping..."
    },
    "solc_args": "--base-path /tmp/slither-bjjc5fai --include-path /tmp/slither-bjjc5fai/lib --include-path /tmp/slither-bjjc5fai/lib/contracts --include-path /tmp/slither-bjjc5fai/lib/openzeppelin-contracts-upgradeable --include-path /tmp/slither-bjjc5fai/lib/openzeppelin-contracts --allow-paths /tmp/slither-bjjc5fai,/tmp/slither-bjjc5fai/lib,/tmp/slither-bjjc5fai/lib/contracts,/tmp/slither-bjjc5fai/lib/openzeppelin-contracts,/tmp/slither-bjjc5fai/lib/openzeppelin-contracts-upgradeable,/tmp/slither-bjjc5fai/src",
    "remappings": [
        "forge-std/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/src/",
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        "@cowswap/contracts/=lib/contracts/src/contracts/",
        "contracts/=lib/contracts/",
        "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
        "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
        "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "src/=src/"
    ],
    "source_files": [
        "src/utils/SwapModule.sol",
        "src/interfaces/utils/ISwapModule.sol",
        "src/libraries/TransferLibrary.sol",
        "src/permissions/MellowACL.sol",
        "src/interfaces/external/aave/IAaveOracle.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
        "lib/contracts/src/contracts/GPv2Settlement.sol",
        "lib/contracts/src/contracts/libraries/GPv2Order.sol",
        "src/interfaces/factories/IFactoryEntity.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol",
        "src/interfaces/permissions/IMellowACL.sol",
        "src/libraries/SlotLibrary.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol",
        "lib/contracts/src/contracts/GPv2VaultRelayer.sol",
        "lib/contracts/src/contracts/interfaces/GPv2Authentication.sol",
        "lib/contracts/src/contracts/interfaces/IERC20.sol",
        "lib/contracts/src/contracts/interfaces/IVault.sol",
        "lib/contracts/src/contracts/libraries/GPv2Interaction.sol",
        "lib/contracts/src/contracts/libraries/GPv2Trade.sol",
        "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
        "lib/contracts/src/contracts/libraries/SafeCast.sol",
        "lib/contracts/src/contracts/libraries/SafeMath.sol",
        "lib/contracts/src/contracts/mixins/GPv2Signing.sol",
        "lib/contracts/src/contracts/mixins/ReentrancyGuard.sol",
        "lib/contracts/src/contracts/mixins/StorageAccessible.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol",
        "lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol",
        "lib/contracts/src/contracts/interfaces/GPv2EIP1271.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Arrays.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Comparators.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol",
        "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol"
    ],
    "contract_count": 0,
    "contract_names": [],
    "detector_count": 172,
    "workspace_hash": "af3f6c7baa6fd3c781e7bde2fca53897d3236dff9676306f289cef4f1a3ffd7e",
    "duration_seconds": 3.3431577682495117,
    "solc_version_requested": "0.8.25"
}

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
1
No findings?
no
Summary
Read the full AUDIT_BUNDLE.txt. Found one high-severity invariant break in CowSwap limit-order validation: the module does not constrain order fees, so a presigned order can spend more sellToken than params.amountIn.
View stdout
{"no_findings":false,"summary":"Read the full AUDIT_BUNDLE.txt. Found one high-severity invariant break in CowSwap limit-order validation: the module does not constrain order fees, so a presigned order can spend more sellToken than params.amountIn.","findings":[{"severity":"high","category":"other","title":"Unchecked CowSwap feeAmount lets a limit order drain extra sellToken beyond params.amountIn","exploit_scenario":"An address with CALLER_ROLE first sets a large allowance for cowswapVaultRelayer via setCowswapApproval, then calls createLimitOrder with params.amountIn = X and params.minAmountOut matching an apparently valid order, but sets order.feeAmount to a large value. checkCowswapOrder only checks sellAmount/buyAmount/receiver/validTo and accepts the order. When the presigned order is settled, CowSwap charges executedSellAmount + executedFeeAmount from the module, so the contract can lose much more than X of sellToken while only enforcing the buyAmount floor for X. Any extra approved balance becomes spendable as fee.","recommendation":"Validate the full GPv2Order.Data payload, not just sellAmount/buyAmount. At minimum require order.feeAmount == 0 unless fees are explicitly modeled in Params. If fees must be supported, include them in params and enforce balance/price checks on total spend (sellAmount + feeAmount). Also consider rejecting partiallyFillable orders unless their fee behavior is explicitly accounted for.","evidence":"In src/utils/SwapModule.sol, checkCowswapOrder validates sellToken, buyToken, receiver, sellAmount, buyAmount, validTo, kind, and token balance modes, but never checks order.feeAmount or order.partiallyFillable. createLimitOrder then presigns that unchecked order. CowSwap settlement adds the fee to the amount pulled from the owner: for sell orders it sets executedFeeAmount = order.feeAmount (or a proportional fraction for partial fills) and then executes executedSellAmount = executedSellAmount + executedFeeAmount.","locations":["src/utils/SwapModule.sol:137","src/utils/SwapModule.sol:286","src/utils/SwapModule.sol:277"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-idj_kbvw
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d56bd-9278-7bc2-9227-6721099fb897
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.

Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.

Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
exec
/bin/bash -lc pwd in /tmp/codex-idj_kbvw
 succeeded in 0ms:
/tmp/codex-idj_kbvw

exec
/bin/bash -lc "rg --files -g 'AUDIT_BUNDLE.txt' -g 'AGENTS.md' -g '*.sol'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
AUDIT_BUNDLE.txt
src/permissions/MellowACL.sol
src/interfaces/permissions/IMellowACL.sol
src/interfaces/factories/IFactoryEntity.sol
src/interfaces/utils/ISwapModule.sol
src/interfaces/external/aave/IAaveOracle.sol
src/libraries/TransferLibrary.sol
src/libraries/SlotLibrary.sol
lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol
src/utils/SwapModule.sol
lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol
lib/contracts/src/contracts/GPv2Settlement.sol
lib/contracts/src/contracts/GPv2VaultRelayer.sol
lib/openzeppelin-contracts-upgradeable/contracts/access/extensions/AccessControlEnumerableUpgradeable.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol
lib/contracts/src/contracts/interfaces/GPv2Authentication.sol
lib/contracts/src/contracts/interfaces/GPv2EIP1271.sol
lib/contracts/src/contracts/interfaces/IERC20.sol
lib/contracts/src/contracts/interfaces/IVault.sol
lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol
lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol
lib/contracts/src/contracts/mixins/StorageAccessible.sol
lib/contracts/src/contracts/mixins/ReentrancyGuard.sol
lib/contracts/src/contracts/mixins/GPv2Signing.sol
lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol
lib/contracts/src/contracts/libraries/GPv2Interaction.sol
lib/contracts/src/contracts/libraries/GPv2Transfer.sol
lib/contracts/src/contracts/libraries/GPv2Order.sol
lib/contracts/src/contracts/libraries/SafeCast.sol
lib/contracts/src/contracts/libraries/GPv2SafeERC20.sol
lib/contracts/src/contracts/libraries/GPv2Trade.sol
lib/contracts/src/contracts/libraries/SafeMath.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Arrays.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Comparators.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol
lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol

exec
/bin/bash -lc 'wc -l AUDIT_BUNDLE.txt' in /tmp/codex-idj_kbvw
 succeeded in 0ms:
658 AUDIT_BUNDLE.txt

exec
/bin/bash -lc "sed -n '1,220p' AUDIT_BUNDLE.txt" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.

================================================================================
FILE: src/interfaces/external/aave/IAaveOracle.sol
================================================================================
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.25;

interface IAaveOracle {
    function getAssetPrice(address asset) external view returns (uint256);
}

================================================================================
FILE: src/interfaces/factories/IFactoryEntity.sol
================================================================================
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.25;

/// @title IFactoryEntity
interface IFactoryEntity {
    /// @notice Initializes the factory-created entity with arbitrary initialization data.
    /// @param initParams The initialization parameters.
    function initialize(bytes calldata initParams) external;

    /// @notice Emitted once the entity has been initialized.
    /// @param initParams The initialization parameters.
    event Initialized(bytes initParams);
}

================================================================================
FILE: src/interfaces/permissions/IMellowACL.sol
================================================================================
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.25;

import "@openzeppelin/contracts-upgradeable/access/extensions/AccessControlEnumerableUpgradeable.sol";

/// @notice Interface for the MellowACL contract, which extends OpenZeppelin's AccessControlEnumerable
/// @dev Adds tracking of which roles are actively in use (i.e., assigned to at least one address)
interface IMellowACL is IAccessControlEnumerable {
    /// @notice Storage layout used to track actively assigned roles
    struct MellowACLStorage {
        EnumerableSet.Bytes32Set supportedRoles; // Set of roles that have at least one assigned member
    }

    /// @notice Returns the total number of unique roles that are currently assigned
    function supportedRoles() external view returns (uint256);

    /// @notice Returns the role at the specified index in the set of active roles
    /// @param index Index within the supported role set
    /// @return role The bytes32 identifier of the role
    function supportedRoleAt(uint256 index) external view returns (bytes32);

    /// @notice Checks whether a given role is currently active (i.e., has at least one member)
    /// @param role The bytes32 identifier of the role to check
    /// @return isActive True if the role has any members assigned
    function hasSupportedRole(bytes32 role) external view returns (bool);

    /// @notice Emitted when a new role is granted for the first time
    event RoleAdded(bytes32 indexed role);

    /// @notice Emitted when a role loses its last member
    event RoleRemoved(bytes32 indexed role);
}

================================================================================
FILE: src/interfaces/utils/ISwapModule.sol
================================================================================
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.25;

import "../external/aave/IAaveOracle.sol";

import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/utils/math/Math.sol";

import {GPv2Settlement} from "@cowswap/contracts/GPv2Settlement.sol";
import {GPv2Order} from "@cowswap/contracts/libraries/GPv2Order.sol";

import "../factories/IFactoryEntity.sol";

interface ISwapModule is IFactoryEntity {
    // Errors

    error Forbidden(string reason);
    error ZeroValue();

    // Structs

    struct SwapModuleStorage {
        address subvault;
        address oracle;
        uint256 defaultMultiplier;
        mapping(address => mapping(address => uint256)) customMultiplier;
    }

    struct Params {
        address tokenIn;
        address tokenOut;
        uint256 amountIn;
        uint256 minAmountOut;
        uint256 deadline;
    }

    // View functions

    function MIN_MULTIPLIER() external view returns (uint256);
    function MAX_MULTIPLIER() external view returns (uint256);
    function BASE_MULTIPLIER() external view returns (uint256);

    function TOKEN_IN_ROLE() external view returns (bytes32);
    function TOKEN_OUT_ROLE() external view returns (bytes32);
    function ROUTER_ROLE() external view returns (bytes32);
    function CALLER_ROLE() external view returns (bytes32);
    function SET_SLIPPAGE_ROLE() external view returns (bytes32);

    function cowswapSettlement() external view returns (address);
    function cowswapVaultRelayer() external view returns (address);
    function weth() external view returns (address);

    function subvault() external view returns (address);

    function oracle() external view returns (address);

    function checkMultiplier(uint256 multiplier) external pure;

    function defaultMultiplier() external view returns (uint256);

    function customMultiplier(address tokenIn, address tokenOut) external view returns (uint256);

    function evaluate(address tokenIn, address tokenOut, uint256 amountIn) external view returns (uint256);

    function checkParams(Params calldata params) external view;

    function checkCowswapOrder(Params calldata params, GPv2Order.Data calldata order, bytes calldata orderUid)
        external
        view;

    // Mutable functions

    function setOracle(address oracle_) external;

    function setDefaultMultiplier(uint256 multiplier) external;

    function setCustomMultiplier(address tokenIn, address tokenOut, uint256 multiplier) external;

    function pushAssets(address asset, uint256 value) external payable;

    function pullAssets(address asset, uint256 value) external;

    function swap(Params calldata params, address router, bytes calldata data)
        external
        returns (bytes memory response);

    function setCowswapApproval(address asset, uint256 amount) external;

    function createLimitOrder(Params calldata params, GPv2Order.Data calldata order, bytes calldata orderUid)
        external;

    function invalidateOrder(bytes calldata orderUid) external;

    // Events

    event AssetsPulled(address indexed asset, uint256 value);

    event AssetsPushed(address indexed asset, uint256 value);

    event DefaultMultiplierSet(uint256 indexed multiplier);

    event CustomMultiplierSet(address indexed tokenIn, address indexed tokenOut, uint256 indexed multiplier);

    event CowswapApprovalSet(address indexed asset, uint256 amount);

    event LimitOrderCreated(Params params, bytes orderUid);

    event LimitOrderInvalidated(bytes orderUid);

    event Swap(Params params, address router, uint256 amountOut);

    event OracleSet(address indexed oracle);
}

================================================================================
FILE: src/libraries/SlotLibrary.sol
================================================================================
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.25;

/// @title SlotLibrary
/// @notice Library for computing deterministic and collision-resistant storage slots
/// @dev Used to generate unique storage slots for upgradeable modules using string identifiers
library SlotLibrary {
    /// @notice Computes a unique storage slot based on the module's identifiers
    /// @param contractName Logical contract/module name (e.g., "ShareModule")
    /// @param name Human-readable instance name (e.g., "Mellow")
    /// @param version Version number for the module configuration
    /// @return A bytes32 value representing the derived storage slot
    function getSlot(string memory contractName, string memory name, uint256 version) internal pure returns (bytes32) {
        return keccak256(
            abi.encode(
                uint256(keccak256(abi.encodePacked("mellow.flexible-vaults.storage.", contractName, name, version))) - 1
            )
        ) & ~bytes32(uint256(0xff));
    }
}

================================================================================
FILE: src/libraries/TransferLibrary.sol
================================================================================
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.25;

import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/utils/Address.sol";

/// @title TransferLibrary
/// @notice Library for unified handling of native ETH and ERC20 asset transfers.

exec
/bin/bash -lc "sed -n '221,440p' AUDIT_BUNDLE.txt" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
/// @dev Provides safe and abstracted methods for sending and receiving both ETH and ERC20 tokens.
///
/// # ETH Convention
/// Uses the constant `ETH = 0xEeee...EeE` to distinguish native ETH from ERC20 tokens.
library TransferLibrary {
    using SafeERC20 for IERC20;

    /// @notice Error thrown when `msg.value` does not match expected ETH amount
    error InvalidValue();

    /// @dev Placeholder address used to represent native ETH transfers
    address public constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

    /// @notice Safely sends assets (ETH or ERC20) to a recipient
    /// @param asset Address of the asset to send (use `ETH` constant for native ETH)
    /// @param to Recipient address
    /// @param assets Amount of assets to send
    /// @dev Uses `Address.sendValue` for ETH and `safeTransfer` for ERC20
    function sendAssets(address asset, address to, uint256 assets) internal {
        if (asset == ETH) {
            Address.sendValue(payable(to), assets);
        } else {
            IERC20(asset).safeTransfer(to, assets);
        }
    }

    /// @notice Safely receives assets (ETH or ERC20) from a sender
    /// @param asset Address of the asset to receive (use `ETH` constant for native ETH)
    /// @param from Sender address (only used for ERC20)
    /// @param assets Amount of assets expected to receive
    /// @dev Reverts if `msg.value` is incorrect for ETH or uses `safeTransferFrom` for ERC20
    function receiveAssets(address asset, address from, uint256 assets) internal {
        if (asset == ETH) {
            if (msg.value != assets) {
                revert InvalidValue();
            }
        } else {
            IERC20(asset).safeTransferFrom(from, address(this), assets);
        }
    }

    /// @notice Returns the balance of an account for a given asset
    /// @param asset Address of the asset to check the balance of (use `ETH` constant for native ETH)
    /// @param account Address of the account to check the balance of
    /// @return Balance of the account for the given asset
    function balanceOf(address asset, address account) internal view returns (uint256) {
        if (asset == ETH) {
            return account.balance;
        } else {
            return IERC20(asset).balanceOf(account);
        }
    }
}

================================================================================
FILE: src/permissions/MellowACL.sol
================================================================================
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.25;

import "../interfaces/permissions/IMellowACL.sol";

import "../libraries/SlotLibrary.sol";

abstract contract MellowACL is IMellowACL, AccessControlEnumerableUpgradeable {
    using EnumerableSet for EnumerableSet.Bytes32Set;

    bytes32 private immutable _mellowACLStorageSlot;

    constructor(string memory name_, uint256 version_) {
        _mellowACLStorageSlot = SlotLibrary.getSlot("MellowACL", name_, version_);
        _disableInitializers();
    }

    // View functions

    /// @inheritdoc IMellowACL
    function supportedRoles() external view returns (uint256) {
        return _mellowACLStorage().supportedRoles.length();
    }

    /// @inheritdoc IMellowACL
    function supportedRoleAt(uint256 index) external view returns (bytes32) {
        return _mellowACLStorage().supportedRoles.at(index);
    }

    /// @inheritdoc IMellowACL
    function hasSupportedRole(bytes32 role) external view returns (bool) {
        return _mellowACLStorage().supportedRoles.contains(role);
    }

    // Internal functions

    function _grantRole(bytes32 role, address account) internal virtual override returns (bool) {
        if (super._grantRole(role, account)) {
            if (_mellowACLStorage().supportedRoles.add(role)) {
                emit RoleAdded(role);
            }
            return true;
        }
        return false;
    }

    function _revokeRole(bytes32 role, address account) internal virtual override returns (bool) {
        if (super._revokeRole(role, account)) {
            if (getRoleMemberCount(role) == 0) {
                _mellowACLStorage().supportedRoles.remove(role);
                emit RoleRemoved(role);
            }
            return true;
        }
        return false;
    }

    function _mellowACLStorage() private view returns (MellowACLStorage storage $) {
        bytes32 slot = _mellowACLStorageSlot;
        assembly {
            $.slot := slot
        }
    }
}

================================================================================
FILE: src/utils/SwapModule.sol
================================================================================
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.25;

import "../interfaces/utils/ISwapModule.sol";

import "../libraries/TransferLibrary.sol";
import "../permissions/MellowACL.sol";

contract SwapModule is ISwapModule, MellowACL, ReentrancyGuardUpgradeable {
    using SafeERC20 for IERC20;

    /// @inheritdoc ISwapModule
    uint256 public constant MIN_MULTIPLIER = 0.9e8;
    /// @inheritdoc ISwapModule
    uint256 public constant MAX_MULTIPLIER = 1.1e8;
    /// @inheritdoc ISwapModule
    uint256 public constant BASE_MULTIPLIER = 1e8;

    /// @inheritdoc ISwapModule
    bytes32 public constant TOKEN_IN_ROLE = keccak256("utils.SwapModule.TOKEN_IN_ROLE");
    /// @inheritdoc ISwapModule
    bytes32 public constant TOKEN_OUT_ROLE = keccak256("utils.SwapModule.TOKEN_OUT_ROLE");
    /// @inheritdoc ISwapModule
    bytes32 public constant ROUTER_ROLE = keccak256("utils.SwapModule.ROUTER_ROLE");
    /// @inheritdoc ISwapModule
    bytes32 public constant CALLER_ROLE = keccak256("utils.SwapModule.CALLER_ROLE");
    /// @inheritdoc ISwapModule
    bytes32 public constant SET_SLIPPAGE_ROLE = keccak256("utils.SwapModule.SET_SLIPPAGE_ROLE");

    /// @inheritdoc ISwapModule
    address public immutable cowswapSettlement;
    /// @inheritdoc ISwapModule
    address public immutable cowswapVaultRelayer;
    /// @inheritdoc ISwapModule
    address public immutable weth;

    bytes32 private immutable _swapModuleStorageSlot;

    constructor(
        string memory name_,
        uint256 version_,
        address cowswapSettlement_,
        address cowswapVaultRelayer_,
        address weth_
    ) MellowACL(name_, version_) {
        cowswapSettlement = cowswapSettlement_;
        cowswapVaultRelayer = cowswapVaultRelayer_;
        weth = weth_;
        _swapModuleStorageSlot = SlotLibrary.getSlot("SwapModule", name_, version_);
    }

    // View functions

    modifier onlySubvault() {
        if (_msgSender() != subvault()) {
            revert Forbidden("msg.sender != subvault");
        }
        _;
    }

    /// @inheritdoc ISwapModule
    function subvault() public view returns (address) {
        return _swapModuleStorage().subvault;
    }

    /// @inheritdoc ISwapModule
    function oracle() public view returns (address) {
        return _swapModuleStorage().oracle;
    }

    /// @inheritdoc ISwapModule
    function checkMultiplier(uint256 multiplier) public pure {
        if (multiplier < MIN_MULTIPLIER || multiplier > MAX_MULTIPLIER) {
            revert Forbidden("multiplier out of expected range");
        }
    }

    /// @inheritdoc ISwapModule
    function defaultMultiplier() public view returns (uint256) {
        return _swapModuleStorage().defaultMultiplier;
    }

    /// @inheritdoc ISwapModule
    function customMultiplier(address tokenIn, address tokenOut) public view returns (uint256) {
        return _swapModuleStorage().customMultiplier[tokenIn][tokenOut];
    }

    /// @inheritdoc ISwapModule
    function evaluate(address tokenIn, address tokenOut, uint256 amountIn) public view returns (uint256) {
        tokenIn = tokenIn == TransferLibrary.ETH ? weth : tokenIn;
        tokenOut = tokenOut == TransferLibrary.ETH ? weth : tokenOut;
        uint8 decimalsIn = IERC20Metadata(tokenIn).decimals();
        uint8 decimalsOut = IERC20Metadata(tokenOut).decimals();
        IAaveOracle oracle_ = IAaveOracle(oracle());
        uint256 tokenInPrice = oracle_.getAssetPrice(tokenIn);

exec
/bin/bash -lc "sed -n '441,658p' AUDIT_BUNDLE.txt" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
        uint256 tokenOutPrice = oracle_.getAssetPrice(tokenOut);
        if (decimalsIn == decimalsOut) {
            return Math.mulDiv(amountIn, tokenInPrice, tokenOutPrice);
        } else if (decimalsIn < decimalsOut) {
            return Math.mulDiv(amountIn, tokenInPrice * 10 ** (decimalsOut - decimalsIn), tokenOutPrice);
        } else {
            return Math.mulDiv(amountIn, tokenInPrice, tokenOutPrice * 10 ** (decimalsIn - decimalsOut));
        }
    }

    /// @inheritdoc ISwapModule
    function checkParams(Params calldata params) public view {
        if (!hasRole(TOKEN_IN_ROLE, params.tokenIn)) {
            revert Forbidden("tokenIn");
        }
        if (!hasRole(TOKEN_OUT_ROLE, params.tokenOut)) {
            revert Forbidden("tokenOut");
        }
        if (TransferLibrary.balanceOf(params.tokenIn, address(this)) < params.amountIn || params.amountIn == 0) {
            revert Forbidden("amountIn");
        }
        SwapModuleStorage storage $ = _swapModuleStorage();
        uint256 multiplier = $.customMultiplier[params.tokenIn][params.tokenOut];
        if (multiplier == 0) {
            multiplier = $.defaultMultiplier;
        }
        uint256 oracleMinAmount =
            Math.mulDiv(evaluate(params.tokenIn, params.tokenOut, params.amountIn), multiplier, BASE_MULTIPLIER);

        if (params.minAmountOut < oracleMinAmount) {
            revert Forbidden("minAmountOut < oracleMinAmount");
        }
        if (params.deadline < block.timestamp) {
            revert Forbidden("deadline");
        }
        if (params.tokenIn == params.tokenOut) {
            revert Forbidden("tokenIn == tokenOut");
        }
    }

    /// @inheritdoc ISwapModule
    function checkCowswapOrder(Params calldata params, GPv2Order.Data calldata order, bytes calldata orderUid)
        public
        view
    {
        if (params.tokenIn != address(order.sellToken) || params.tokenIn == TransferLibrary.ETH) {
            revert Forbidden("sellToken");
        }
        if (params.tokenOut != address(order.buyToken) || params.tokenOut == TransferLibrary.ETH) {
            revert Forbidden("buyToken");
        }
        if (address(this) != order.receiver) {
            revert Forbidden("receiver");
        }
        if (params.amountIn != order.sellAmount) {
            revert Forbidden("amountIn != sellAmount");
        }
        if (params.minAmountOut != order.buyAmount) {
            revert Forbidden("minAmountOut != buyAmount");
        }
        if (params.deadline != order.validTo) {
            revert Forbidden("deadline != validTo");
        }
        if (order.kind != GPv2Order.KIND_SELL) {
            revert Forbidden("kind != KIND_SELL");
        }
        if (order.sellTokenBalance != GPv2Order.BALANCE_ERC20) {
            revert Forbidden("sellTokenBalance != BALANCE_ERC20");
        }
        if (order.buyTokenBalance != GPv2Order.BALANCE_ERC20) {
            revert Forbidden("buyTokenBalance != BALANCE_ERC20");
        }

        bytes memory calculatedOrderUid = new bytes(56);
        GPv2Order.packOrderUidParams(
            calculatedOrderUid,
            GPv2Order.hash(order, GPv2Settlement(payable(cowswapSettlement)).domainSeparator()),
            address(this),
            order.validTo
        );
        if (keccak256(orderUid) != keccak256(calculatedOrderUid)) {
            revert Forbidden("orderUid != calculatedOrderUid");
        }
    }

    // Mutable functions

    /// @inheritdoc IFactoryEntity
    function initialize(bytes calldata data) external initializer {
        (
            address admin,
            address subvault_,
            address oracle_,
            uint256 defaultMultiplier_,
            address[] memory holders,
            bytes32[] memory roles
        ) = abi.decode(data, (address, address, address, uint256, address[], bytes32[]));
        if (admin == address(0) || subvault_ == address(0) || oracle_ == address(0)) {
            revert ZeroValue();
        }
        checkMultiplier(defaultMultiplier_);
        SwapModuleStorage storage $ = _swapModuleStorage();

        _grantRole(DEFAULT_ADMIN_ROLE, admin);
        $.subvault = subvault_;
        $.oracle = oracle_;
        $.defaultMultiplier = defaultMultiplier_;
        for (uint256 i = 0; i < holders.length; i++) {
            if (holders[i] == address(0) || roles[i] == bytes32(0)) {
                revert ZeroValue();
            }
            _grantRole(roles[i], holders[i]);
        }
        emit Initialized(data);
    }

    /// @inheritdoc ISwapModule
    function setOracle(address oracle_) external onlyRole(DEFAULT_ADMIN_ROLE) {
        if (oracle_ == address(0)) {
            revert ZeroValue();
        }
        _swapModuleStorage().oracle = oracle_;
        emit OracleSet(oracle_);
    }

    /// @inheritdoc ISwapModule
    function setDefaultMultiplier(uint256 multiplier) external onlyRole(SET_SLIPPAGE_ROLE) {
        checkMultiplier(multiplier);
        _swapModuleStorage().defaultMultiplier = multiplier;
        emit DefaultMultiplierSet(multiplier);
    }

    /// @inheritdoc ISwapModule
    function setCustomMultiplier(address tokenIn, address tokenOut, uint256 multiplier)
        external
        onlyRole(SET_SLIPPAGE_ROLE)
    {
        checkMultiplier(multiplier);
        _swapModuleStorage().customMultiplier[tokenIn][tokenOut] = multiplier;
        emit CustomMultiplierSet(tokenIn, tokenOut, multiplier);
    }

    /// @inheritdoc ISwapModule
    function pushAssets(address asset, uint256 value) external payable onlySubvault {
        TransferLibrary.receiveAssets(asset, _msgSender(), value);
        emit AssetsPushed(asset, value);
    }

    /// @inheritdoc ISwapModule
    function pullAssets(address asset, uint256 value) external onlySubvault {
        TransferLibrary.sendAssets(asset, _msgSender(), value);
        emit AssetsPulled(asset, value);
    }

    /// @inheritdoc ISwapModule
    function swap(Params calldata params, address router, bytes calldata data)
        external
        nonReentrant
        onlyRole(CALLER_ROLE)
        returns (bytes memory response)
    {
        checkParams(params);
        if (!hasRole(ROUTER_ROLE, router)) {
            revert Forbidden("router");
        }
        uint256 balanceBefore = TransferLibrary.balanceOf(params.tokenOut, address(this));
        if (params.tokenIn != TransferLibrary.ETH) {
            IERC20(params.tokenIn).forceApprove(router, params.amountIn);
            response = Address.functionCall(router, data);
            IERC20(params.tokenIn).forceApprove(router, 0);
        } else {
            response = Address.functionCallWithValue(router, data, params.amountIn);
        }
        uint256 amountOut = TransferLibrary.balanceOf(params.tokenOut, address(this)) - balanceBefore;
        if (amountOut < params.minAmountOut) {
            revert Forbidden("amountOut < minAmountOut");
        }
        emit Swap(params, router, amountOut);
    }

    /// @inheritdoc ISwapModule
    function setCowswapApproval(address asset, uint256 amount) external onlyRole(CALLER_ROLE) {
        if (asset == TransferLibrary.ETH || !hasRole(TOKEN_IN_ROLE, asset)) {
            revert Forbidden("asset");
        }
        IERC20(asset).forceApprove(cowswapVaultRelayer, amount);
        emit CowswapApprovalSet(asset, amount);
    }

    /// @inheritdoc ISwapModule
    function createLimitOrder(Params calldata params, GPv2Order.Data calldata order, bytes calldata orderUid)
        external
        onlyRole(CALLER_ROLE)
    {
        checkParams(params);
        checkCowswapOrder(params, order, orderUid);
        GPv2Settlement(payable(cowswapSettlement)).setPreSignature(orderUid, true);
        emit LimitOrderCreated(params, orderUid);
    }

    /// @inheritdoc ISwapModule
    function invalidateOrder(bytes calldata orderUid) external onlyRole(CALLER_ROLE) {
        GPv2Settlement(payable(cowswapSettlement)).invalidateOrder(orderUid);
        emit LimitOrderInvalidated(orderUid);
    }

    receive() external payable {}

    // Internal functions

    function _swapModuleStorage() internal view returns (SwapModuleStorage storage $) {
        bytes32 slot = _swapModuleStorageSlot;
        assembly {
            $.slot := slot
        }
    }
}


exec
/bin/bash -lc "nl -ba src/utils/SwapModule.sol | sed -n '1,260p'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
     1	// SPDX-License-Identifier: BUSL-1.1
     2	pragma solidity 0.8.25;
     3	
     4	import "../interfaces/utils/ISwapModule.sol";
     5	
     6	import "../libraries/TransferLibrary.sol";
     7	import "../permissions/MellowACL.sol";
     8	
     9	contract SwapModule is ISwapModule, MellowACL, ReentrancyGuardUpgradeable {
    10	    using SafeERC20 for IERC20;
    11	
    12	    /// @inheritdoc ISwapModule
    13	    uint256 public constant MIN_MULTIPLIER = 0.9e8;
    14	    /// @inheritdoc ISwapModule
    15	    uint256 public constant MAX_MULTIPLIER = 1.1e8;
    16	    /// @inheritdoc ISwapModule
    17	    uint256 public constant BASE_MULTIPLIER = 1e8;
    18	
    19	    /// @inheritdoc ISwapModule
    20	    bytes32 public constant TOKEN_IN_ROLE = keccak256("utils.SwapModule.TOKEN_IN_ROLE");
    21	    /// @inheritdoc ISwapModule
    22	    bytes32 public constant TOKEN_OUT_ROLE = keccak256("utils.SwapModule.TOKEN_OUT_ROLE");
    23	    /// @inheritdoc ISwapModule
    24	    bytes32 public constant ROUTER_ROLE = keccak256("utils.SwapModule.ROUTER_ROLE");
    25	    /// @inheritdoc ISwapModule
    26	    bytes32 public constant CALLER_ROLE = keccak256("utils.SwapModule.CALLER_ROLE");
    27	    /// @inheritdoc ISwapModule
    28	    bytes32 public constant SET_SLIPPAGE_ROLE = keccak256("utils.SwapModule.SET_SLIPPAGE_ROLE");
    29	
    30	    /// @inheritdoc ISwapModule
    31	    address public immutable cowswapSettlement;
    32	    /// @inheritdoc ISwapModule
    33	    address public immutable cowswapVaultRelayer;
    34	    /// @inheritdoc ISwapModule
    35	    address public immutable weth;
    36	
    37	    bytes32 private immutable _swapModuleStorageSlot;
    38	
    39	    constructor(
    40	        string memory name_,
    41	        uint256 version_,
    42	        address cowswapSettlement_,
    43	        address cowswapVaultRelayer_,
    44	        address weth_
    45	    ) MellowACL(name_, version_) {
    46	        cowswapSettlement = cowswapSettlement_;
    47	        cowswapVaultRelayer = cowswapVaultRelayer_;
    48	        weth = weth_;
    49	        _swapModuleStorageSlot = SlotLibrary.getSlot("SwapModule", name_, version_);
    50	    }
    51	
    52	    // View functions
    53	
    54	    modifier onlySubvault() {
    55	        if (_msgSender() != subvault()) {
    56	            revert Forbidden("msg.sender != subvault");
    57	        }
    58	        _;
    59	    }
    60	
    61	    /// @inheritdoc ISwapModule
    62	    function subvault() public view returns (address) {
    63	        return _swapModuleStorage().subvault;
    64	    }
    65	
    66	    /// @inheritdoc ISwapModule
    67	    function oracle() public view returns (address) {
    68	        return _swapModuleStorage().oracle;
    69	    }
    70	
    71	    /// @inheritdoc ISwapModule
    72	    function checkMultiplier(uint256 multiplier) public pure {
    73	        if (multiplier < MIN_MULTIPLIER || multiplier > MAX_MULTIPLIER) {
    74	            revert Forbidden("multiplier out of expected range");
    75	        }
    76	    }
    77	
    78	    /// @inheritdoc ISwapModule
    79	    function defaultMultiplier() public view returns (uint256) {
    80	        return _swapModuleStorage().defaultMultiplier;
    81	    }
    82	
    83	    /// @inheritdoc ISwapModule
    84	    function customMultiplier(address tokenIn, address tokenOut) public view returns (uint256) {
    85	        return _swapModuleStorage().customMultiplier[tokenIn][tokenOut];
    86	    }
    87	
    88	    /// @inheritdoc ISwapModule
    89	    function evaluate(address tokenIn, address tokenOut, uint256 amountIn) public view returns (uint256) {
    90	        tokenIn = tokenIn == TransferLibrary.ETH ? weth : tokenIn;
    91	        tokenOut = tokenOut == TransferLibrary.ETH ? weth : tokenOut;
    92	        uint8 decimalsIn = IERC20Metadata(tokenIn).decimals();
    93	        uint8 decimalsOut = IERC20Metadata(tokenOut).decimals();
    94	        IAaveOracle oracle_ = IAaveOracle(oracle());
    95	        uint256 tokenInPrice = oracle_.getAssetPrice(tokenIn);
    96	        uint256 tokenOutPrice = oracle_.getAssetPrice(tokenOut);
    97	        if (decimalsIn == decimalsOut) {
    98	            return Math.mulDiv(amountIn, tokenInPrice, tokenOutPrice);
    99	        } else if (decimalsIn < decimalsOut) {
   100	            return Math.mulDiv(amountIn, tokenInPrice * 10 ** (decimalsOut - decimalsIn), tokenOutPrice);
   101	        } else {
   102	            return Math.mulDiv(amountIn, tokenInPrice, tokenOutPrice * 10 ** (decimalsIn - decimalsOut));
   103	        }
   104	    }
   105	
   106	    /// @inheritdoc ISwapModule
   107	    function checkParams(Params calldata params) public view {
   108	        if (!hasRole(TOKEN_IN_ROLE, params.tokenIn)) {
   109	            revert Forbidden("tokenIn");
   110	        }
   111	        if (!hasRole(TOKEN_OUT_ROLE, params.tokenOut)) {
   112	            revert Forbidden("tokenOut");
   113	        }
   114	        if (TransferLibrary.balanceOf(params.tokenIn, address(this)) < params.amountIn || params.amountIn == 0) {
   115	            revert Forbidden("amountIn");
   116	        }
   117	        SwapModuleStorage storage $ = _swapModuleStorage();
   118	        uint256 multiplier = $.customMultiplier[params.tokenIn][params.tokenOut];
   119	        if (multiplier == 0) {
   120	            multiplier = $.defaultMultiplier;
   121	        }
   122	        uint256 oracleMinAmount =
   123	            Math.mulDiv(evaluate(params.tokenIn, params.tokenOut, params.amountIn), multiplier, BASE_MULTIPLIER);
   124	
   125	        if (params.minAmountOut < oracleMinAmount) {
   126	            revert Forbidden("minAmountOut < oracleMinAmount");
   127	        }
   128	        if (params.deadline < block.timestamp) {
   129	            revert Forbidden("deadline");
   130	        }
   131	        if (params.tokenIn == params.tokenOut) {
   132	            revert Forbidden("tokenIn == tokenOut");
   133	        }
   134	    }
   135	
   136	    /// @inheritdoc ISwapModule
   137	    function checkCowswapOrder(Params calldata params, GPv2Order.Data calldata order, bytes calldata orderUid)
   138	        public
   139	        view
   140	    {
   141	        if (params.tokenIn != address(order.sellToken) || params.tokenIn == TransferLibrary.ETH) {
   142	            revert Forbidden("sellToken");
   143	        }
   144	        if (params.tokenOut != address(order.buyToken) || params.tokenOut == TransferLibrary.ETH) {
   145	            revert Forbidden("buyToken");
   146	        }
   147	        if (address(this) != order.receiver) {
   148	            revert Forbidden("receiver");
   149	        }
   150	        if (params.amountIn != order.sellAmount) {
   151	            revert Forbidden("amountIn != sellAmount");
   152	        }
   153	        if (params.minAmountOut != order.buyAmount) {
   154	            revert Forbidden("minAmountOut != buyAmount");
   155	        }
   156	        if (params.deadline != order.validTo) {
   157	            revert Forbidden("deadline != validTo");
   158	        }
   159	        if (order.kind != GPv2Order.KIND_SELL) {
   160	            revert Forbidden("kind != KIND_SELL");
   161	        }
   162	        if (order.sellTokenBalance != GPv2Order.BALANCE_ERC20) {
   163	            revert Forbidden("sellTokenBalance != BALANCE_ERC20");
   164	        }
   165	        if (order.buyTokenBalance != GPv2Order.BALANCE_ERC20) {
   166	            revert Forbidden("buyTokenBalance != BALANCE_ERC20");
   167	        }
   168	
   169	        bytes memory calculatedOrderUid = new bytes(56);
   170	        GPv2Order.packOrderUidParams(
   171	            calculatedOrderUid,
   172	            GPv2Order.hash(order, GPv2Settlement(payable(cowswapSettlement)).domainSeparator()),
   173	            address(this),
   174	            order.validTo
   175	        );
   176	        if (keccak256(orderUid) != keccak256(calculatedOrderUid)) {
   177	            revert Forbidden("orderUid != calculatedOrderUid");
   178	        }
   179	    }
   180	
   181	    // Mutable functions
   182	
   183	    /// @inheritdoc IFactoryEntity
   184	    function initialize(bytes calldata data) external initializer {
   185	        (
   186	            address admin,
   187	            address subvault_,
   188	            address oracle_,
   189	            uint256 defaultMultiplier_,
   190	            address[] memory holders,
   191	            bytes32[] memory roles
   192	        ) = abi.decode(data, (address, address, address, uint256, address[], bytes32[]));
   193	        if (admin == address(0) || subvault_ == address(0) || oracle_ == address(0)) {
   194	            revert ZeroValue();
   195	        }
   196	        checkMultiplier(defaultMultiplier_);
   197	        SwapModuleStorage storage $ = _swapModuleStorage();
   198	
   199	        _grantRole(DEFAULT_ADMIN_ROLE, admin);
   200	        $.subvault = subvault_;
   201	        $.oracle = oracle_;
   202	        $.defaultMultiplier = defaultMultiplier_;
   203	        for (uint256 i = 0; i < holders.length; i++) {
   204	            if (holders[i] == address(0) || roles[i] == bytes32(0)) {
   205	                revert ZeroValue();
   206	            }
   207	            _grantRole(roles[i], holders[i]);
   208	        }
   209	        emit Initialized(data);
   210	    }
   211	
   212	    /// @inheritdoc ISwapModule
   213	    function setOracle(address oracle_) external onlyRole(DEFAULT_ADMIN_ROLE) {
   214	        if (oracle_ == address(0)) {
   215	            revert ZeroValue();
   216	        }
   217	        _swapModuleStorage().oracle = oracle_;
   218	        emit OracleSet(oracle_);
   219	    }
   220	
   221	    /// @inheritdoc ISwapModule
   222	    function setDefaultMultiplier(uint256 multiplier) external onlyRole(SET_SLIPPAGE_ROLE) {
   223	        checkMultiplier(multiplier);
   224	        _swapModuleStorage().defaultMultiplier = multiplier;
   225	        emit DefaultMultiplierSet(multiplier);
   226	    }
   227	
   228	    /// @inheritdoc ISwapModule
   229	    function setCustomMultiplier(address tokenIn, address tokenOut, uint256 multiplier)
   230	        external
   231	        onlyRole(SET_SLIPPAGE_ROLE)
   232	    {
   233	        checkMultiplier(multiplier);
   234	        _swapModuleStorage().customMultiplier[tokenIn][tokenOut] = multiplier;
   235	        emit CustomMultiplierSet(tokenIn, tokenOut, multiplier);
   236	    }
   237	
   238	    /// @inheritdoc ISwapModule
   239	    function pushAssets(address asset, uint256 value) external payable onlySubvault {
   240	        TransferLibrary.receiveAssets(asset, _msgSender(), value);
   241	        emit AssetsPushed(asset, value);
   242	    }
   243	
   244	    /// @inheritdoc ISwapModule
   245	    function pullAssets(address asset, uint256 value) external onlySubvault {
   246	        TransferLibrary.sendAssets(asset, _msgSender(), value);
   247	        emit AssetsPulled(asset, value);
   248	    }
   249	
   250	    /// @inheritdoc ISwapModule
   251	    function swap(Params calldata params, address router, bytes calldata data)
   252	        external
   253	        nonReentrant
   254	        onlyRole(CALLER_ROLE)
   255	        returns (bytes memory response)
   256	    {
   257	        checkParams(params);
   258	        if (!hasRole(ROUTER_ROLE, router)) {
   259	            revert Forbidden("router");
   260	        }

exec
/bin/bash -lc "nl -ba src/permissions/MellowACL.sol | sed -n '1,200p'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
     1	// SPDX-License-Identifier: BUSL-1.1
     2	pragma solidity 0.8.25;
     3	
     4	import "../interfaces/permissions/IMellowACL.sol";
     5	
     6	import "../libraries/SlotLibrary.sol";
     7	
     8	abstract contract MellowACL is IMellowACL, AccessControlEnumerableUpgradeable {
     9	    using EnumerableSet for EnumerableSet.Bytes32Set;
    10	
    11	    bytes32 private immutable _mellowACLStorageSlot;
    12	
    13	    constructor(string memory name_, uint256 version_) {
    14	        _mellowACLStorageSlot = SlotLibrary.getSlot("MellowACL", name_, version_);
    15	        _disableInitializers();
    16	    }
    17	
    18	    // View functions
    19	
    20	    /// @inheritdoc IMellowACL
    21	    function supportedRoles() external view returns (uint256) {
    22	        return _mellowACLStorage().supportedRoles.length();
    23	    }
    24	
    25	    /// @inheritdoc IMellowACL
    26	    function supportedRoleAt(uint256 index) external view returns (bytes32) {
    27	        return _mellowACLStorage().supportedRoles.at(index);
    28	    }
    29	
    30	    /// @inheritdoc IMellowACL
    31	    function hasSupportedRole(bytes32 role) external view returns (bool) {
    32	        return _mellowACLStorage().supportedRoles.contains(role);
    33	    }
    34	
    35	    // Internal functions
    36	
    37	    function _grantRole(bytes32 role, address account) internal virtual override returns (bool) {
    38	        if (super._grantRole(role, account)) {
    39	            if (_mellowACLStorage().supportedRoles.add(role)) {
    40	                emit RoleAdded(role);
    41	            }
    42	            return true;
    43	        }
    44	        return false;
    45	    }
    46	
    47	    function _revokeRole(bytes32 role, address account) internal virtual override returns (bool) {
    48	        if (super._revokeRole(role, account)) {
    49	            if (getRoleMemberCount(role) == 0) {
    50	                _mellowACLStorage().supportedRoles.remove(role);
    51	                emit RoleRemoved(role);
    52	            }
    53	            return true;
    54	        }
    55	        return false;
    56	    }
    57	
    58	    function _mellowACLStorage() private view returns (MellowACLStorage storage $) {
    59	        bytes32 slot = _mellowACLStorageSlot;
    60	        assembly {
    61	            $.slot := slot
    62	        }
    63	    }
    64	}

exec
/bin/bash -lc "nl -ba src/libraries/TransferLibrary.sol | sed -n '1,200p'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
     1	// SPDX-License-Identifier: BUSL-1.1
     2	pragma solidity 0.8.25;
     3	
     4	import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
     5	import "@openzeppelin/contracts/utils/Address.sol";
     6	
     7	/// @title TransferLibrary
     8	/// @notice Library for unified handling of native ETH and ERC20 asset transfers.
     9	/// @dev Provides safe and abstracted methods for sending and receiving both ETH and ERC20 tokens.
    10	///
    11	/// # ETH Convention
    12	/// Uses the constant `ETH = 0xEeee...EeE` to distinguish native ETH from ERC20 tokens.
    13	library TransferLibrary {
    14	    using SafeERC20 for IERC20;
    15	
    16	    /// @notice Error thrown when `msg.value` does not match expected ETH amount
    17	    error InvalidValue();
    18	
    19	    /// @dev Placeholder address used to represent native ETH transfers
    20	    address public constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    21	
    22	    /// @notice Safely sends assets (ETH or ERC20) to a recipient
    23	    /// @param asset Address of the asset to send (use `ETH` constant for native ETH)
    24	    /// @param to Recipient address
    25	    /// @param assets Amount of assets to send
    26	    /// @dev Uses `Address.sendValue` for ETH and `safeTransfer` for ERC20
    27	    function sendAssets(address asset, address to, uint256 assets) internal {
    28	        if (asset == ETH) {
    29	            Address.sendValue(payable(to), assets);
    30	        } else {
    31	            IERC20(asset).safeTransfer(to, assets);
    32	        }
    33	    }
    34	
    35	    /// @notice Safely receives assets (ETH or ERC20) from a sender
    36	    /// @param asset Address of the asset to receive (use `ETH` constant for native ETH)
    37	    /// @param from Sender address (only used for ERC20)
    38	    /// @param assets Amount of assets expected to receive
    39	    /// @dev Reverts if `msg.value` is incorrect for ETH or uses `safeTransferFrom` for ERC20
    40	    function receiveAssets(address asset, address from, uint256 assets) internal {
    41	        if (asset == ETH) {
    42	            if (msg.value != assets) {
    43	                revert InvalidValue();
    44	            }
    45	        } else {
    46	            IERC20(asset).safeTransferFrom(from, address(this), assets);
    47	        }
    48	    }
    49	
    50	    /// @notice Returns the balance of an account for a given asset
    51	    /// @param asset Address of the asset to check the balance of (use `ETH` constant for native ETH)
    52	    /// @param account Address of the account to check the balance of
    53	    /// @return Balance of the account for the given asset
    54	    function balanceOf(address asset, address account) internal view returns (uint256) {
    55	        if (asset == ETH) {
    56	            return account.balance;
    57	        } else {
    58	            return IERC20(asset).balanceOf(account);
    59	        }
    60	    }
    61	}

exec
/bin/bash -lc "nl -ba src/utils/SwapModule.sol | sed -n '260,360p'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
   260	        }
   261	        uint256 balanceBefore = TransferLibrary.balanceOf(params.tokenOut, address(this));
   262	        if (params.tokenIn != TransferLibrary.ETH) {
   263	            IERC20(params.tokenIn).forceApprove(router, params.amountIn);
   264	            response = Address.functionCall(router, data);
   265	            IERC20(params.tokenIn).forceApprove(router, 0);
   266	        } else {
   267	            response = Address.functionCallWithValue(router, data, params.amountIn);
   268	        }
   269	        uint256 amountOut = TransferLibrary.balanceOf(params.tokenOut, address(this)) - balanceBefore;
   270	        if (amountOut < params.minAmountOut) {
   271	            revert Forbidden("amountOut < minAmountOut");
   272	        }
   273	        emit Swap(params, router, amountOut);
   274	    }
   275	
   276	    /// @inheritdoc ISwapModule
   277	    function setCowswapApproval(address asset, uint256 amount) external onlyRole(CALLER_ROLE) {
   278	        if (asset == TransferLibrary.ETH || !hasRole(TOKEN_IN_ROLE, asset)) {
   279	            revert Forbidden("asset");
   280	        }
   281	        IERC20(asset).forceApprove(cowswapVaultRelayer, amount);
   282	        emit CowswapApprovalSet(asset, amount);
   283	    }
   284	
   285	    /// @inheritdoc ISwapModule
   286	    function createLimitOrder(Params calldata params, GPv2Order.Data calldata order, bytes calldata orderUid)
   287	        external
   288	        onlyRole(CALLER_ROLE)
   289	    {
   290	        checkParams(params);
   291	        checkCowswapOrder(params, order, orderUid);
   292	        GPv2Settlement(payable(cowswapSettlement)).setPreSignature(orderUid, true);
   293	        emit LimitOrderCreated(params, orderUid);
   294	    }
   295	
   296	    /// @inheritdoc ISwapModule
   297	    function invalidateOrder(bytes calldata orderUid) external onlyRole(CALLER_ROLE) {
   298	        GPv2Settlement(payable(cowswapSettlement)).invalidateOrder(orderUid);
   299	        emit LimitOrderInvalidated(orderUid);
   300	    }
   301	
   302	    receive() external payable {}
   303	
   304	    // Internal functions
   305	
   306	    function _swapModuleStorage() internal view returns (SwapModuleStorage storage $) {
   307	        bytes32 slot = _swapModuleStorageSlot;
   308	        assembly {
   309	            $.slot := slot
   310	        }
   311	    }
   312	}

exec
/bin/bash -lc "rg -n \"feeAmount|sellAmount \\+ feeAmount|executedFeeAmount|partiallyFillable\" lib/contracts/src/contracts -g '*.sol'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
lib/contracts/src/contracts/GPv2Settlement.sol:56:        uint256 feeAmount,
lib/contracts/src/contracts/GPv2Settlement.sol:192:        feeTransfer.amount = order.feeAmount;
lib/contracts/src/contracts/GPv2Settlement.sol:238:            order.feeAmount,
lib/contracts/src/contracts/GPv2Settlement.sol:375:        uint256 executedFeeAmount;
lib/contracts/src/contracts/GPv2Settlement.sol:379:            if (order.partiallyFillable) {
lib/contracts/src/contracts/GPv2Settlement.sol:381:                executedFeeAmount = order.feeAmount.mul(executedSellAmount).div(
lib/contracts/src/contracts/GPv2Settlement.sol:386:                executedFeeAmount = order.feeAmount;
lib/contracts/src/contracts/GPv2Settlement.sol:401:            if (order.partiallyFillable) {
lib/contracts/src/contracts/GPv2Settlement.sol:403:                executedFeeAmount = order.feeAmount.mul(executedBuyAmount).div(
lib/contracts/src/contracts/GPv2Settlement.sol:408:                executedFeeAmount = order.feeAmount;
lib/contracts/src/contracts/GPv2Settlement.sol:420:        executedSellAmount = executedSellAmount.add(executedFeeAmount);
lib/contracts/src/contracts/GPv2Settlement.sol:429:            executedFeeAmount,
lib/contracts/src/contracts/libraries/GPv2Trade.sol:24:        uint256 feeAmount;
lib/contracts/src/contracts/libraries/GPv2Trade.sol:48:        order.feeAmount = trade.feeAmount;
lib/contracts/src/contracts/libraries/GPv2Trade.sol:51:            order.partiallyFillable,
lib/contracts/src/contracts/libraries/GPv2Trade.sol:102:            bool partiallyFillable,
lib/contracts/src/contracts/libraries/GPv2Trade.sol:113:        partiallyFillable = flags & 0x02 != 0;
lib/contracts/src/contracts/libraries/GPv2Order.sol:19:        uint256 feeAmount;
lib/contracts/src/contracts/libraries/GPv2Order.sol:21:        bool partiallyFillable;
lib/contracts/src/contracts/libraries/GPv2Order.sol:39:    ///         "uint256 feeAmount," +
lib/contracts/src/contracts/libraries/GPv2Order.sol:41:    ///         "bool partiallyFillable," +

exec
/bin/bash -lc "rg -n \"setPreSignature|invalidateOrder\" lib/contracts/src/contracts -g '*.sol'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
lib/contracts/src/contracts/GPv2Settlement.sol:250:    function invalidateOrder(bytes calldata orderUid) external {
lib/contracts/src/contracts/mixins/GPv2Signing.sol:88:    function setPreSignature(bytes calldata orderUid, bool signed) external {

exec
/bin/bash -lc "rg -n \"struct Data\" lib/contracts/src/contracts/libraries/GPv2Order.sol && nl -ba lib/contracts/src/contracts/libraries/GPv2Order.sol | sed -n '1,220p'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
11:    struct Data {
     1	// SPDX-License-Identifier: LGPL-3.0-or-later
     2	pragma solidity >=0.7.6 <0.9.0;
     3	
     4	import "../interfaces/IERC20.sol";
     5	
     6	/// @title Gnosis Protocol v2 Order Library
     7	/// @author Gnosis Developers
     8	library GPv2Order {
     9	    /// @dev The complete data for a Gnosis Protocol order. This struct contains
    10	    /// all order parameters that are signed for submitting to GP.
    11	    struct Data {
    12	        IERC20 sellToken;
    13	        IERC20 buyToken;
    14	        address receiver;
    15	        uint256 sellAmount;
    16	        uint256 buyAmount;
    17	        uint32 validTo;
    18	        bytes32 appData;
    19	        uint256 feeAmount;
    20	        bytes32 kind;
    21	        bool partiallyFillable;
    22	        bytes32 sellTokenBalance;
    23	        bytes32 buyTokenBalance;
    24	    }
    25	
    26	    /// @dev The order EIP-712 type hash for the [`GPv2Order.Data`] struct.
    27	    ///
    28	    /// This value is pre-computed from the following expression:
    29	    /// ```
    30	    /// keccak256(
    31	    ///     "Order(" +
    32	    ///         "address sellToken," +
    33	    ///         "address buyToken," +
    34	    ///         "address receiver," +
    35	    ///         "uint256 sellAmount," +
    36	    ///         "uint256 buyAmount," +
    37	    ///         "uint32 validTo," +
    38	    ///         "bytes32 appData," +
    39	    ///         "uint256 feeAmount," +
    40	    ///         "string kind," +
    41	    ///         "bool partiallyFillable," +
    42	    ///         "string sellTokenBalance," +
    43	    ///         "string buyTokenBalance" +
    44	    ///     ")"
    45	    /// )
    46	    /// ```
    47	    bytes32 internal constant TYPE_HASH =
    48	        hex"d5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e489";
    49	
    50	    /// @dev The marker value for a sell order for computing the order struct
    51	    /// hash. This allows the EIP-712 compatible wallets to display a
    52	    /// descriptive string for the order kind (instead of 0 or 1).
    53	    ///
    54	    /// This value is pre-computed from the following expression:
    55	    /// ```
    56	    /// keccak256("sell")
    57	    /// ```
    58	    bytes32 internal constant KIND_SELL =
    59	        hex"f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775";
    60	
    61	    /// @dev The OrderKind marker value for a buy order for computing the order
    62	    /// struct hash.
    63	    ///
    64	    /// This value is pre-computed from the following expression:
    65	    /// ```
    66	    /// keccak256("buy")
    67	    /// ```
    68	    bytes32 internal constant KIND_BUY =
    69	        hex"6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc";
    70	
    71	    /// @dev The TokenBalance marker value for using direct ERC20 balances for
    72	    /// computing the order struct hash.
    73	    ///
    74	    /// This value is pre-computed from the following expression:
    75	    /// ```
    76	    /// keccak256("erc20")
    77	    /// ```
    78	    bytes32 internal constant BALANCE_ERC20 =
    79	        hex"5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9";
    80	
    81	    /// @dev The TokenBalance marker value for using Balancer Vault external
    82	    /// balances (in order to re-use Vault ERC20 approvals) for computing the
    83	    /// order struct hash.
    84	    ///
    85	    /// This value is pre-computed from the following expression:
    86	    /// ```
    87	    /// keccak256("external")
    88	    /// ```
    89	    bytes32 internal constant BALANCE_EXTERNAL =
    90	        hex"abee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea0632";
    91	
    92	    /// @dev The TokenBalance marker value for using Balancer Vault internal
    93	    /// balances for computing the order struct hash.
    94	    ///
    95	    /// This value is pre-computed from the following expression:
    96	    /// ```
    97	    /// keccak256("internal")
    98	    /// ```
    99	    bytes32 internal constant BALANCE_INTERNAL =
   100	        hex"4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce";
   101	
   102	    /// @dev Marker address used to indicate that the receiver of the trade
   103	    /// proceeds should the owner of the order.
   104	    ///
   105	    /// This is chosen to be `address(0)` for gas efficiency as it is expected
   106	    /// to be the most common case.
   107	    address internal constant RECEIVER_SAME_AS_OWNER = address(0);
   108	
   109	    /// @dev The byte length of an order unique identifier.
   110	    uint256 internal constant UID_LENGTH = 56;
   111	
   112	    /// @dev Returns the actual receiver for an order. This function checks
   113	    /// whether or not the [`receiver`] field uses the marker value to indicate
   114	    /// it is the same as the order owner.
   115	    ///
   116	    /// @return receiver The actual receiver of trade proceeds.
   117	    function actualReceiver(
   118	        Data memory order,
   119	        address owner
   120	    ) internal pure returns (address receiver) {
   121	        if (order.receiver == RECEIVER_SAME_AS_OWNER) {
   122	            receiver = owner;
   123	        } else {
   124	            receiver = order.receiver;
   125	        }
   126	    }
   127	
   128	    /// @dev Return the EIP-712 signing hash for the specified order.
   129	    ///
   130	    /// @param order The order to compute the EIP-712 signing hash for.
   131	    /// @param domainSeparator The EIP-712 domain separator to use.
   132	    /// @return orderDigest The 32 byte EIP-712 struct hash.
   133	    function hash(
   134	        Data memory order,
   135	        bytes32 domainSeparator
   136	    ) internal pure returns (bytes32 orderDigest) {
   137	        bytes32 structHash;
   138	
   139	        // NOTE: Compute the EIP-712 order struct hash in place. As suggested
   140	        // in the EIP proposal, noting that the order struct has 12 fields, and
   141	        // prefixing the type hash `(1 + 12) * 32 = 416` bytes to hash.
   142	        // <https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#rationale-for-encodedata>
   143	        // solhint-disable-next-line no-inline-assembly
   144	        assembly {
   145	            let dataStart := sub(order, 32)
   146	            let temp := mload(dataStart)
   147	            mstore(dataStart, TYPE_HASH)
   148	            structHash := keccak256(dataStart, 416)
   149	            mstore(dataStart, temp)
   150	        }
   151	
   152	        // NOTE: Now that we have the struct hash, compute the EIP-712 signing
   153	        // hash using scratch memory past the free memory pointer. The signing
   154	        // hash is computed from `"\x19\x01" || domainSeparator || structHash`.
   155	        // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory>
   156	        // <https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification>
   157	        // solhint-disable-next-line no-inline-assembly
   158	        assembly {
   159	            let freeMemoryPointer := mload(0x40)
   160	            mstore(freeMemoryPointer, "\x19\x01")
   161	            mstore(add(freeMemoryPointer, 2), domainSeparator)
   162	            mstore(add(freeMemoryPointer, 34), structHash)
   163	            orderDigest := keccak256(freeMemoryPointer, 66)
   164	        }
   165	    }
   166	
   167	    /// @dev Packs order UID parameters into the specified memory location. The
   168	    /// result is equivalent to `abi.encodePacked(...)` with the difference that
   169	    /// it allows re-using the memory for packing the order UID.
   170	    ///
   171	    /// This function reverts if the order UID buffer is not the correct size.
   172	    ///
   173	    /// @param orderUid The buffer pack the order UID parameters into.
   174	    /// @param orderDigest The EIP-712 struct digest derived from the order
   175	    /// parameters.
   176	    /// @param owner The address of the user who owns this order.
   177	    /// @param validTo The epoch time at which the order will stop being valid.
   178	    function packOrderUidParams(
   179	        bytes memory orderUid,
   180	        bytes32 orderDigest,
   181	        address owner,
   182	        uint32 validTo
   183	    ) internal pure {
   184	        require(orderUid.length == UID_LENGTH, "GPv2: uid buffer overflow");
   185	
   186	        // NOTE: Write the order UID to the allocated memory buffer. The order
   187	        // parameters are written to memory in **reverse order** as memory
   188	        // operations write 32-bytes at a time and we want to use a packed
   189	        // encoding. This means, for example, that after writing the value of
   190	        // `owner` to bytes `20:52`, writing the `orderDigest` to bytes `0:32`
   191	        // will **overwrite** bytes `20:32`. This is desirable as addresses are
   192	        // only 20 bytes and `20:32` should be `0`s:
   193	        //
   194	        //        |           1111111111222222222233333333334444444444555555
   195	        //   byte | 01234567890123456789012345678901234567890123456789012345
   196	        // -------+---------------------------------------------------------
   197	        //  field | [.........orderDigest..........][......owner.......][vT]
   198	        // -------+---------------------------------------------------------
   199	        // mstore |                         [000000000000000000000000000.vT]
   200	        //        |                     [00000000000.......owner.......]
   201	        //        | [.........orderDigest..........]
   202	        //
   203	        // Additionally, since Solidity `bytes memory` are length prefixed,
   204	        // 32 needs to be added to all the offsets.
   205	        //
   206	        // solhint-disable-next-line no-inline-assembly
   207	        assembly {
   208	            mstore(add(orderUid, 56), validTo)
   209	            mstore(add(orderUid, 52), owner)
   210	            mstore(add(orderUid, 32), orderDigest)
   211	        }
   212	    }
   213	
   214	    /// @dev Extracts specific order information from the standardized unique
   215	    /// order id of the protocol.
   216	    ///
   217	    /// @param orderUid The unique identifier used to represent an order in
   218	    /// the protocol. This uid is the packed concatenation of the order digest,
   219	    /// the validTo order parameter and the address of the user who created the
   220	    /// order. It is used by the user to interface with the contract directly,

exec
/bin/bash -lc "nl -ba lib/contracts/src/contracts/GPv2Settlement.sol | sed -n '360,435p'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
   360	        // limit_x * price_x >= limit_y * price_y
   361	        // ```
   362	        // - The executed amount of token `y` given some amount of `x` and
   363	        //   clearing prices is:
   364	        // ```
   365	        // amount_y = amount_x * price_x / price_y
   366	        // ```
   367	
   368	        require(
   369	            order.sellAmount.mul(sellPrice) >= order.buyAmount.mul(buyPrice),
   370	            "GPv2: limit price not respected"
   371	        );
   372	
   373	        uint256 executedSellAmount;
   374	        uint256 executedBuyAmount;
   375	        uint256 executedFeeAmount;
   376	        uint256 currentFilledAmount;
   377	
   378	        if (order.kind == GPv2Order.KIND_SELL) {
   379	            if (order.partiallyFillable) {
   380	                executedSellAmount = executedAmount;
   381	                executedFeeAmount = order.feeAmount.mul(executedSellAmount).div(
   382	                    order.sellAmount
   383	                );
   384	            } else {
   385	                executedSellAmount = order.sellAmount;
   386	                executedFeeAmount = order.feeAmount;
   387	            }
   388	
   389	            executedBuyAmount = executedSellAmount.mul(sellPrice).ceilDiv(
   390	                buyPrice
   391	            );
   392	
   393	            currentFilledAmount = filledAmount[orderUid].add(
   394	                executedSellAmount
   395	            );
   396	            require(
   397	                currentFilledAmount <= order.sellAmount,
   398	                "GPv2: order filled"
   399	            );
   400	        } else {
   401	            if (order.partiallyFillable) {
   402	                executedBuyAmount = executedAmount;
   403	                executedFeeAmount = order.feeAmount.mul(executedBuyAmount).div(
   404	                    order.buyAmount
   405	                );
   406	            } else {
   407	                executedBuyAmount = order.buyAmount;
   408	                executedFeeAmount = order.feeAmount;
   409	            }
   410	
   411	            executedSellAmount = executedBuyAmount.mul(buyPrice).div(sellPrice);
   412	
   413	            currentFilledAmount = filledAmount[orderUid].add(executedBuyAmount);
   414	            require(
   415	                currentFilledAmount <= order.buyAmount,
   416	                "GPv2: order filled"
   417	            );
   418	        }
   419	
   420	        executedSellAmount = executedSellAmount.add(executedFeeAmount);
   421	        filledAmount[orderUid] = currentFilledAmount;
   422	
   423	        emit Trade(
   424	            recoveredOrder.owner,
   425	            order.sellToken,
   426	            order.buyToken,
   427	            executedSellAmount,
   428	            executedBuyAmount,
   429	            executedFeeAmount,
   430	            orderUid
   431	        );
   432	
   433	        inTransfer.account = recoveredOrder.owner;
   434	        inTransfer.token = order.sellToken;
   435	        inTransfer.amount = executedSellAmount;

exec
/bin/bash -lc "nl -ba lib/contracts/src/contracts/GPv2Settlement.sol | sed -n '240,265p' && nl -ba lib/contracts/src/contracts/mixins/GPv2Signing.sol | sed -n '80,105p'" in /tmp/codex-idj_kbvw
 succeeded in 0ms:
   240	        );
   241	        emit Settlement(msg.sender);
   242	    }
   243	
   244	    /// @dev Invalidate onchain an order that has been signed offline.
   245	    ///
   246	    /// @param orderUid The unique identifier of the order that is to be made
   247	    /// invalid after calling this function. The user that created the order
   248	    /// must be the sender of this message. See [`extractOrderUidParams`]
   249	    /// for details on orderUid.
   250	    function invalidateOrder(bytes calldata orderUid) external {
   251	        (, address owner, ) = orderUid.extractOrderUidParams();
   252	        require(owner == msg.sender, "GPv2: caller does not own order");
   253	        filledAmount[orderUid] = type(uint256).max;
   254	        emit OrderInvalidated(owner, orderUid);
   255	    }
   256	
   257	    /// @dev Free storage from the filled amounts of **expired** orders to claim
   258	    /// a gas refund. This method can only be called as an interaction.
   259	    ///
   260	    /// @param orderUids The unique identifiers of the expired order to free
   261	    /// storage for.
   262	    function freeFilledAmountStorage(
   263	        bytes[] calldata orderUids
   264	    ) external onlyInteraction {
   265	        freeOrderStorage(filledAmount, orderUids);
    80	        );
    81	    }
    82	
    83	    /// @dev Sets a presignature for the specified order UID.
    84	    ///
    85	    /// @param orderUid The unique identifier of the order to pre-sign.
    86	    /// @param signed True to set the order as tradable with pre-sign, false to
    87	    /// false to unset it.
    88	    function setPreSignature(bytes calldata orderUid, bool signed) external {
    89	        (, address owner, ) = orderUid.extractOrderUidParams();
    90	        require(owner == msg.sender, "GPv2: cannot presign order");
    91	        if (signed) {
    92	            preSignature[orderUid] = PRE_SIGNED;
    93	        } else {
    94	            preSignature[orderUid] = 0;
    95	        }
    96	        emit PreSignature(owner, orderUid, signed);
    97	    }
    98	
    99	    /// @dev Returns an empty recovered order with a pre-allocated buffer for
   100	    /// packing the unique identifier.
   101	    ///
   102	    /// @return recoveredOrder The empty recovered order data.
   103	    function allocateRecoveredOrder()
   104	        internal
   105	        pure

codex
{"no_findings":false,"summary":"Read the full AUDIT_BUNDLE.txt. Found one high-severity invariant break in CowSwap limit-order validation: the module does not constrain order fees, so a presigned order can spend more sellToken than params.amountIn.","findings":[{"severity":"high","category":"other","title":"Unchecked CowSwap feeAmount lets a limit order drain extra sellToken beyond params.amountIn","exploit_scenario":"An address with CALLER_ROLE first sets a large allowance for cowswapVaultRelayer via setCowswapApproval, then calls createLimitOrder with params.amountIn = X and params.minAmountOut matching an apparently valid order, but sets order.feeAmount to a large value. checkCowswapOrder only checks sellAmount/buyAmount/receiver/validTo and accepts the order. When the presigned order is settled, CowSwap charges executedSellAmount + executedFeeAmount from the module, so the contract can lose much more than X of sellToken while only enforcing the buyAmount floor for X. Any extra approved balance becomes spendable as fee.","recommendation":"Validate the full GPv2Order.Data payload, not just sellAmount/buyAmount. At minimum require order.feeAmount == 0 unless fees are explicitly modeled in Params. If fees must be supported, include them in params and enforce balance/price checks on total spend (sellAmount + feeAmount). Also consider rejecting partiallyFillable orders unless their fee behavior is explicitly accounted for.","evidence":"In src/utils/SwapModule.sol, checkCowswapOrder validates sellToken, buyToken, receiver, sellAmount, buyAmount, validTo, kind, and token balance modes, but never checks order.feeAmount or order.partiallyFillable. createLimitOrder then presigns that unchecked order. CowSwap settlement adds the fee to the amount pulled from the owner: for sell orders it sets executedFeeAmount = order.feeAmount (or a proportional fraction for partial fills) and then executes executedSellAmount = executedSellAmount + executedFeeAmount.","locations":["src/utils/SwapModule.sol:137","src/utils/SwapModule.sol:286","src/utils/SwapModule.sol:277"]}]}
tokens used
25,207
Metadata
{
    "codex": {
        "ran_at": "2026-04-04T04:27:53.540454+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 49,
        "import_count": 60,
        "first_party_contracts_count": 8
    },
    "summary": "Read the full AUDIT_BUNDLE.txt. Found one high-severity invariant break in CowSwap limit-order validation: the module does not constrain order fees, so a presigned order can spend more sellToken than params.amountIn.",
    "raw_final": {
        "summary": "Read the full AUDIT_BUNDLE.txt. Found one high-severity invariant break in CowSwap limit-order validation: the module does not constrain order fees, so a presigned order can spend more sellToken than params.amountIn.",
        "findings": [
            {
                "title": "Unchecked CowSwap feeAmount lets a limit order drain extra sellToken beyond params.amountIn",
                "category": "other",
                "evidence": "In src/utils/SwapModule.sol, checkCowswapOrder validates sellToken, buyToken, receiver, sellAmount, buyAmount, validTo, kind, and token balance modes, but never checks order.feeAmount or order.partiallyFillable. createLimitOrder then presigns that unchecked order. CowSwap settlement adds the fee to the amount pulled from the owner: for sell orders it sets executedFeeAmount = order.feeAmount (or a proportional fraction for partial fills) and then executes executedSellAmount = executedSellAmount + executedFeeAmount.",
                "severity": "high",
                "locations": [
                    "src/utils/SwapModule.sol:137",
                    "src/utils/SwapModule.sol:286",
                    "src/utils/SwapModule.sol:277"
                ],
                "recommendation": "Validate the full GPv2Order.Data payload, not just sellAmount/buyAmount. At minimum require order.feeAmount == 0 unless fees are explicitly modeled in Params. If fees must be supported, include them in params and enforce balance/price checks on total spend (sellAmount + feeAmount). Also consider rejecting partiallyFillable orders unless their fee behavior is explicitly accounted for.",
                "exploit_scenario": "An address with CALLER_ROLE first sets a large allowance for cowswapVaultRelayer via setCowswapApproval, then calls createLimitOrder with params.amountIn = X and params.minAmountOut matching an apparently valid order, but sets order.feeAmount to a large value. checkCowswapOrder only checks sellAmount/buyAmount/receiver/validTo and accepts the order. When the presigned order is settled, CowSwap charges executedSellAmount + executedFeeAmount from the module, so the contract can lose much more than X of sellToken while only enforcing the buyAmount floor for X. Any extra approved balance becomes spendable as fee."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
14
EXT*/BALANCE
7
Total opcodes
8293
Flags
create_opcodes_present heavy_ext_balance_usage call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x024b
0000000c: JUMPI
0000000d: PUSH0
0000000e: CALLDATALOAD
0000000f: PUSH1 0xe0
00000011: SHR
00000012: DUP1
00000013: PUSH4 0x87cd303d
00000018: GT
00000019: PUSH2 0x0134
0000001c: JUMPI
0000001d: DUP1
0000001e: PUSH4 0xc5b26eaa
00000023: GT
00000024: PUSH2 0x00b3
00000027: JUMPI
00000028: DUP1
00000029: PUSH4 0xdac9318f
0000002e: GT
0000002f: PUSH2 0x0078
00000032: JUMPI
00000033: DUP1
00000034: PUSH4 0xdac9318f
00000039: EQ
0000003a: PUSH2 0x0750
0000003d: JUMPI
0000003e: DUP1
0000003f: PUSH4 0xe4891825
00000044: EQ
00000045: PUSH2 0x076f
00000048: JUMPI
00000049: DUP1
0000004a: PUSH4 0xe8d96a2e
0000004f: EQ
00000050: PUSH2 0x07a5
00000053: JUMPI
00000054: DUP1
00000055: PUSH4 0xed03e78c
0000005a: EQ
0000005b: PUSH2 0x07d8
0000005e: JUMPI
0000005f: DUP1
00000060: PUSH4 0xf2309ab6
00000065: EQ
00000066: PUSH2 0x07ef
00000069: JUMPI
0000006a: DUP1
0000006b: PUSH4 0xff0e6489
00000070: EQ
00000071: PUSH2 0x0822
00000074: JUMPI
00000075: PUSH0
00000076: DUP1
00000077: REVERT
00000078: JUMPDEST
00000079: DUP1
0000007a: PUSH4 0xc5b26eaa
0000007f: EQ
00000080: PUSH2 0x06a8
00000083: JUMPI
00000084: DUP1
00000085: PUSH4 0xca15c873
0000008a: EQ
0000008b: PUSH2 0x06c7
0000008e: JUMPI
0000008f: DUP1
00000090: PUSH4 0xd4fec678
00000095: EQ
00000096: PUSH2 0x06e6
00000099: JUMPI
0000009a: DUP1
0000009b: PUSH4 0xd547741f
000000a0: EQ
000000a1: PUSH2 0x0712
000000a4: JUMPI
000000a5: DUP1
000000a6: PUSH4 0xd730ce6d
000000ab: EQ
000000ac: PUSH2 0x0731
000000af: JUMPI
000000b0: PUSH0
000000b1: DUP1
000000b2: REVERT
000000b3: JUMPDEST
000000b4: DUP1
000000b5: PUSH4 0xa217fddf
000000ba: GT
000000bb: PUSH2 0x00f9
000000be: JUMPI
000000bf: DUP1
000000c0: PUSH4 0xa217fddf
000000c5: EQ
000000c6: PUSH2 0x061f
000000c9: JUMPI
000000ca: DUP1
000000cb: PUSH4 0xa2b44393
000000d0: EQ
000000d1: PUSH2 0x0632
000000d4: JUMPI
000000d5: DUP1
000000d6: PUSH4 0xa2cb31e5
000000db: EQ
000000dc: PUSH2 0x0649
000000df: JUMPI
000000e0: DUP1
000000e1: PUSH4 0xa3246ad3
000000e6: EQ
000000e7: PUSH2 0x0668
000000ea: JUMPI
000000eb: DUP1
000000ec: PUSH4 0xb3ab252a
000000f1: EQ
000000f2: PUSH2 0x0694
000000f5: JUMPI
000000f6: PUSH0
000000f7: DUP1
000000f8: REVERT
000000f9: JUMPDEST
000000fa: DUP1
000000fb: PUSH4 0x87cd303d
00000100: EQ
00000101: PUSH2 0x0584
00000104: JUMPI
00000105: DUP1
00000106: PUSH4 0x9010d07c
0000010b: EQ
0000010c: PUSH2 0x05a3
0000010f: JUMPI
00000110: DUP1
00000111: PUSH4 0x908e9ee0
00000116: EQ
00000117: PUSH2 0x05c2
0000011a: JUMPI
0000011b: DUP1
0000011c: PUSH4 0x909e3363
00000121: EQ
00000122: PUSH2 0x05e1
00000125: JUMPI
00000126: DUP1
00000127: PUSH4 0x91d14854
0000012c: EQ
0000012d: PUSH2 0x0600
00000130: JUMPI
00000131: PUSH0
00000132: DUP1
00000133: REVERT
00000134: JUMPDEST
00000135: DUP1
00000136: PUSH4 0x419a2053
0000013b: GT
0000013c: PUSH2 0x01cb
0000013f: JUMPI
00000140: DUP1
00000141: PUSH4 0x5d6a618d
00000146: GT
00000147: PUSH2 0x0190
0000014a: JUMPI
0000014b: DUP1
0000014c: PUSH4 0x5d6a618d
00000151: EQ
00000152: PUSH2 0x04a9
00000155: JUMPI
00000156: DUP1
00000157: PUSH4 0x75d2b607
0000015c: EQ
0000015d: PUSH2 0x04c0
00000160: JUMPI
00000161: DUP1
00000162: PUSH4 0x774237fc
00000167: EQ
00000168: PUSH2 0x04d3
0000016b: JUMPI
0000016c: DUP1
0000016d: PUSH4 0x7adbf973
00000172: EQ
00000173: PUSH2 0x04f3
00000176: JUMPI
00000177: DUP1
00000178: PUSH4 0x7da6aafb
0000017d: EQ
0000017e: PUSH2 0x0512
00000181: JUMPI
00000182: DUP1
00000183: PUSH4 0x7dc0d1d0
00000188: EQ
00000189: PUSH2 0x0545
0000018c: JUMPI
0000018d: PUSH0
0000018e: DUP1
0000018f: REVERT
00000190: JUMPDEST
00000191: DUP1
00000192: PUSH4 0x419a2053
00000197: EQ
00000198: PUSH2 0x0405
0000019b: JUMPI
0000019c: DUP1
0000019d: PUSH4 0x439fab91
000001a2: EQ
000001a3: PUSH2 0x0419
000001a6: JUMPI
000001a7: DUP1
000001a8: PUSH4 0x44a14e94
000001ad: EQ
000001ae: PUSH2 0x0438
000001b1: JUMPI
000001b2: DUP1
000001b3: PUSH4 0x48512509
000001b8: EQ
000001b9: PUSH2 0x0457
000001bc: JUMPI
000001bd: DUP1
000001be: PUSH4 0x4a46b4cf
000001c3: EQ
000001c4: PUSH2 0x048a
000001c7: JUMPI
000001c8: PUSH0
000001c9: DUP1
000001ca: REVERT
000001cb: JUMPDEST
000001cc: DUP1
000001cd: PUSH4 0x2b9b016b
000001d2: GT
000001d3: PUSH2 0x0211
000001d6: JUMPI
000001d7: DUP1
000001d8: PUSH4 0x2b9b016b
000001dd: EQ
000001de: PUSH2 0x032a
000001e1: JUMPI
000001e2: DUP1
000001e3: PUSH4 0x2f2ff15d
000001e8: EQ
000001e9: PUSH2 0x0349
000001ec: JUMPI
000001ed: DUP1
000001ee: PUSH4 0x30d643b5
000001f3: EQ
000001f4: PUSH2 0x0368
000001f7: JUMPI
000001f8: DUP1
000001f9: PUSH4 0x36568abe
000001fe: EQ
000001ff: PUSH2 0x039b
00000202: JUMPI
00000203: DUP1
00000204: PUSH4 0x3fc8cef3
00000209: EQ
0000020a: PUSH2 0x03ba
0000020d: JUMPI
0000020e: PUSH0
0000020f: DUP1
00000210: REVERT
00000211: JUMPDEST
00000212: DUP1
00000213: PUSH3 0x98498a
00000217: EQ
00000218: PUSH2 0x0256
0000021b: JUMPI
0000021c: DUP1
0000021d: PUSH4 0x01ffc9a7
00000222: EQ
00000223: PUSH2 0x0277
00000226: JUMPI
00000227: DUP1
00000228: PUSH4 0x15337bc0
0000022d: EQ
0000022e: PUSH2 0x02ab
00000231: JUMPI
00000232: DUP1
00000233: PUSH4 0x248a9ca3
00000238: EQ
00000239: PUSH2 0x02ca
0000023c: JUMPI
0000023d: DUP1
0000023e: PUSH4 0x281f4705
00000243: EQ
00000244: PUSH2 0x02f7
00000247: JUMPI
00000248: PUSH0
00000249: DUP1
0000024a: REVERT
0000024b: JUMPDEST
0000024c: CALLDATASIZE
0000024d: PUSH2 0x0252
00000250: JUMPI
00000251: STOP
00000252: JUMPDEST
00000253: PUSH0
00000254: DUP1
00000255: REVERT
00000256: JUMPDEST
00000257: CALLVALUE
00000258: DUP1
00000259: ISZERO
0000025a: PUSH2 0x0261
0000025d: JUMPI
0000025e: PUSH0
0000025f: DUP1
00000260: REVERT
00000261: JUMPDEST
00000262: POP
00000263: PUSH2 0x0275
00000266: PUSH2 0x0270
00000269: CALLDATASIZE
0000026a: PUSH1 0x04
0000026c: PUSH2 0x2db0
0000026f: JUMP
00000270: JUMPDEST
00000271: PUSH2 0x0888
00000274: JUMP
00000275: JUMPDEST
00000276: STOP
00000277: JUMPDEST
00000278: CALLVALUE
00000279: DUP1
0000027a: ISZERO
0000027b: PUSH2 0x0282
0000027e: JUMPI
0000027f: PUSH0
00000280: DUP1
00000281: REVERT
00000282: JUMPDEST
00000283: POP
00000284: PUSH2 0x0296
00000287: PUSH2 0x0291
0000028a: CALLDATASIZE
0000028b: PUSH1 0x04
0000028d: PUSH2 0x2dca
00000290: JUMP
00000291: JUMPDEST
00000292: PUSH2 0x0ba3
00000295: JUMP
00000296: JUMPDEST
00000297: PUSH1 0x40
00000299: MLOAD
0000029a: SWAP1
0000029b: ISZERO
0000029c: ISZERO
0000029d: DUP2
0000029e: MSTORE
0000029f: PUSH1 0x20
000002a1: ADD
000002a2: JUMPDEST
000002a3: PUSH1 0x40
000002a5: MLOAD
000002a6: DUP1
000002a7: SWAP2
000002a8: SUB
000002a9: SWAP1
000002aa: RETURN
000002ab: JUMPDEST
000002ac: CALLVALUE
000002ad: DUP1
000002ae: ISZERO
000002af: PUSH2 0x02b6
000002b2: JUMPI
000002b3: PUSH0
000002b4: DUP1
000002b5: REVERT
000002b6: JUMPDEST
000002b7: POP
000002b8: PUSH2 0x0275
000002bb: PUSH2 0x02c5
000002be: CALLDATASIZE
000002bf: PUSH1 0x04
000002c1: PUSH2 0x2e36
000002c4: JUMP
000002c5: JUMPDEST
000002c6: PUSH2 0x0bcd
000002c9: JUMP
000002ca: JUMPDEST
000002cb: CALLVALUE
000002cc: DUP1
000002cd: ISZERO
000002ce: PUSH2 0x02d5
000002d1: JUMPI
000002d2: PUSH0
000002d3: DUP1
000002d4: REVERT
000002d5: JUMPDEST
000002d6: POP
000002d7: PUSH2 0x02e9
000002da: PUSH2 0x02e4
000002dd: CALLDATASIZE
000002de: PUSH1 0x04
000002e0: PUSH2 0x2e75
000002e3: JUMP
000002e4: JUMPDEST
000002e5: PUSH2 0x0c9c
000002e8: JUMP
000002e9: JUMPDEST
000002ea: PUSH1 0x40
000002ec: MLOAD
000002ed: SWAP1
000002ee: DUP2
000002ef: MSTORE
000002f0: PUSH1 0x20
000002f2: ADD
000002f3: PUSH2 0x02a2
000002f6: JUMP
000002f7: JUMPDEST
000002f8: CALLVALUE
000002f9: DUP1
000002fa: ISZERO
000002fb: PUSH2 0x0302
000002fe: JUMPI
000002ff: PUSH0
00000300: DUP1
00000301: REVERT
00000302: JUMPDEST
00000303: POP
00000304: PUSH2 0x02e9
00000307: PUSH32 0x32a83f2101a3db03d031fa7d978ba44116bbbd832fcef7908374354ae8de2b38
00000328: DUP2
00000329: JUMP
0000032a: JUMPDEST
0000032b: CALLVALUE
0000032c: DUP1
0000032d: ISZERO
0000032e: PUSH2 0x0335
00000331: JUMPI
00000332: PUSH0
00000333: DUP1
00000334: REVERT
00000335: JUMPDEST
00000336: POP
00000337: PUSH2 0x0275
0000033a: PUSH2 0x0344
0000033d: CALLDATASIZE
0000033e: PUSH1 0x04
00000340: PUSH2 0x2e75
00000343: JUMP
00000344: JUMPDEST
00000345: PUSH2 0x0cbc
00000348: JUMP
00000349: JUMPDEST
0000034a: CALLVALUE
0000034b: DUP1
0000034c: ISZERO
0000034d: PUSH2 0x0354
00000350: JUMPI
00000351: PUSH0
00000352: DUP1
00000353: REVERT
00000354: JUMPDEST
00000355: POP
00000356: PUSH2 0x0275
00000359: PUSH2 0x0363
0000035c: CALLDATASIZE
0000035d: PUSH1 0x04
0000035f: PUSH2 0x2eb0
00000362: JUMP
00000363: JUMPDEST
00000364: PUSH2 0x0d22
00000367: JUMP
00000368: JUMPDEST
00000369: CALLVALUE
0000036a: DUP1
0000036b: ISZERO
0000036c: PUSH2 0x0373
0000036f: JUMPI
00000370: PUSH0
00000371: DUP1
00000372: REVERT
00000373: JUMPDEST
00000374: POP
00000375: PUSH2 0x02e9
00000378: PUSH32 0x59a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d90
00000399: DUP2
0000039a: JUMP
0000039b: JUMPDEST
0000039c: CALLVALUE
0000039d: DUP1
0000039e: ISZERO
0000039f: PUSH2 0x03a6
000003a2: JUMPI
000003a3: PUSH0
000003a4: DUP1
000003a5: REVERT
000003a6: JUMPDEST
000003a7: POP
000003a8: PUSH2 0x0275
000003ab: PUSH2 0x03b5
000003ae: CALLDATASIZE
000003af: PUSH1 0x04
000003b1: PUSH2 0x2eb0
000003b4: JUMP
000003b5: JUMPDEST
000003b6: PUSH2 0x0d3e
000003b9: JUMP
000003ba: JUMPDEST
000003bb: CALLVALUE
000003bc: DUP1
000003bd: ISZERO
000003be: PUSH2 0x03c5
000003c1: JUMPI
000003c2: PUSH0
000003c3: DUP1
000003c4: REVERT
000003c5: JUMPDEST
000003c6: POP
000003c7: PUSH2 0x03ed
000003ca: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
000003eb: DUP2
000003ec: JUMP
000003ed: JUMPDEST
000003ee: PUSH1 0x40
000003f0: MLOAD
000003f1: PUSH1 0x01
000003f3: PUSH1 0x01
000003f5: PUSH1 0xa0
000003f7: SHL
000003f8: SUB
000003f9: SWAP1
000003fa: SWAP2
000003fb: AND
000003fc: DUP2
000003fd: MSTORE
000003fe: PUSH1 0x20
00000400: ADD
00000401: PUSH2 0x02a2
00000404: JUMP
00000405: JUMPDEST
00000406: CALLVALUE
00000407: DUP1
00000408: ISZERO
00000409: PUSH2 0x0410
0000040c: JUMPI
0000040d: PUSH0
0000040e: DUP1
0000040f: REVERT
00000410: JUMPDEST
00000411: POP
00000412: PUSH2 0x02e9
00000415: PUSH2 0x0d76
00000418: JUMP
00000419: JUMPDEST
0000041a: CALLVALUE
0000041b: DUP1
0000041c: ISZERO
0000041d: PUSH2 0x0424
00000420: JUMPI
00000421: PUSH0
00000422: DUP1
00000423: REVERT
00000424: JUMPDEST
00000425: POP
00000426: PUSH2 0x0275
00000429: PUSH2 0x0433
0000042c: CALLDATASIZE
0000042d: PUSH1 0x04
0000042f: PUSH2 0x2e36
00000432: JUMP
00000433: JUMPDEST
00000434: PUSH2 0x0da5
00000437: JUMP
00000438: JUMPDEST
00000439: CALLVALUE
0000043a: DUP1
0000043b: ISZERO
0000043c: PUSH2 0x0443
0000043f: JUMPI
00000440: PUSH0
00000441: DUP1
00000442: REVERT
00000443: JUMPDEST
00000444: POP
00000445: PUSH2 0x0275
00000448: PUSH2 0x0452
0000044b: CALLDATASIZE
0000044c: PUSH1 0x04
0000044e: PUSH2 0x2ede
00000451: JUMP
00000452: JUMPDEST
00000453: PUSH2 0x1075
00000456: JUMP
00000457: JUMPDEST
00000458: CALLVALUE
00000459: DUP1
0000045a: ISZERO
0000045b: PUSH2 0x0462
0000045e: JUMPI
0000045f: PUSH0
00000460: DUP1
00000461: REVERT
00000462: JUMPDEST
00000463: POP
00000464: PUSH2 0x02e9
00000467: PUSH32 0x9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c2531
00000488: DUP2
00000489: JUMP
0000048a: JUMPDEST
0000048b: CALLVALUE
0000048c: DUP1
0000048d: ISZERO
0000048e: PUSH2 0x0495
00000491: JUMPI
00000492: PUSH0
00000493: DUP1
00000494: REVERT
00000495: JUMPDEST
00000496: POP
00000497: PUSH2 0x0296
0000049a: PUSH2 0x04a4
0000049d: CALLDATASIZE
0000049e: PUSH1 0x04
000004a0: PUSH2 0x2e75
000004a3: JUMP
000004a4: JUMPDEST
000004a5: PUSH2 0x1190
000004a8: JUMP
000004a9: JUMPDEST
000004aa: CALLVALUE
000004ab: DUP1
000004ac: ISZERO
000004ad: PUSH2 0x04b4
000004b0: JUMPI
000004b1: PUSH0
000004b2: DUP1
000004b3: REVERT
000004b4: JUMPDEST
000004b5: POP
000004b6: PUSH2 0x02e9
000004b9: PUSH4 0x068e7780
000004be: DUP2
000004bf: JUMP
000004c0: JUMPDEST
000004c1: PUSH2 0x0275
000004c4: PUSH2 0x04ce
000004c7: CALLDATASIZE
000004c8: PUSH1 0x04
000004ca: PUSH2 0x2ede
000004cd: JUMP
000004ce: JUMPDEST
000004cf: PUSH2 0x11bb
000004d2: JUMP
000004d3: JUMPDEST
000004d4: CALLVALUE
000004d5: DUP1
000004d6: ISZERO
000004d7: PUSH2 0x04de
000004da: JUMPI
000004db: PUSH0
000004dc: DUP1
000004dd: REVERT
000004de: JUMPDEST
000004df: POP
000004e0: PUSH2 0x02e9
000004e3: PUSH0
000004e4: DUP1
000004e5: MLOAD
000004e6: PUSH1 0x20
000004e8: PUSH2 0x36ce
000004eb: DUP4
000004ec: CODECOPY
000004ed: DUP2
000004ee: MLOAD
000004ef: SWAP2
000004f0: MSTORE
000004f1: DUP2
000004f2: JUMP
000004f3: JUMPDEST
000004f4: CALLVALUE
000004f5: DUP1
000004f6: ISZERO
000004f7: PUSH2 0x04fe
000004fa: JUMPI
000004fb: PUSH0
000004fc: DUP1
000004fd: REVERT
000004fe: JUMPDEST
000004ff: POP
00000500: PUSH2 0x0275
00000503: PUSH2 0x050d
00000506: CALLDATASIZE
00000507: PUSH1 0x04
00000509: PUSH2 0x2f08
0000050c: JUMP
0000050d: JUMPDEST
0000050e: PUSH2 0x126f
00000511: JUMP
00000512: JUMPDEST
00000513: CALLVALUE
00000514: DUP1
00000515: ISZERO
00000516: PUSH2 0x051d
00000519: JUMPI
0000051a: PUSH0
0000051b: DUP1
0000051c: REVERT
0000051d: JUMPDEST
0000051e: POP
0000051f: PUSH2 0x03ed
00000522: PUSH32 0x000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe0110
00000543: DUP2
00000544: JUMP
00000545: JUMPDEST
00000546: CALLVALUE
00000547: DUP1
00000548: ISZERO
00000549: PUSH2 0x0550
0000054c: JUMPI
0000054d: PUSH0
0000054e: DUP1
0000054f: REVERT
00000550: JUMPDEST
00000551: POP
00000552: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
00000573: PUSH1 0x01
00000575: ADD
00000576: SLOAD
00000577: PUSH1 0x01
00000579: PUSH1 0x01
0000057b: PUSH1 0xa0
0000057d: SHL
0000057e: SUB
0000057f: AND
00000580: PUSH2 0x03ed
00000583: JUMP
00000584: JUMPDEST
00000585: CALLVALUE
00000586: DUP1
00000587: ISZERO
00000588: PUSH2 0x058f
0000058b: JUMPI
0000058c: PUSH0
0000058d: DUP1
0000058e: REVERT
0000058f: JUMPDEST
00000590: POP
00000591: PUSH2 0x0275
00000594: PUSH2 0x059e
00000597: CALLDATASIZE
00000598: PUSH1 0x04
0000059a: PUSH2 0x2ede
0000059d: JUMP
0000059e: JUMPDEST
0000059f: PUSH2 0x130c
000005a2: JUMP
000005a3: JUMPDEST
000005a4: CALLVALUE
000005a5: DUP1
000005a6: ISZERO
000005a7: PUSH2 0x05ae
000005aa: JUMPI
000005ab: PUSH0
000005ac: DUP1
000005ad: REVERT
000005ae: JUMPDEST
000005af: POP
000005b0: PUSH2 0x03ed
000005b3: PUSH2 0x05bd
000005b6: CALLDATASIZE
000005b7: PUSH1 0x04
000005b9: PUSH2 0x2f23
000005bc: JUMP
000005bd: JUMPDEST
000005be: PUSH2 0x13b4
000005c1: JUMP
000005c2: JUMPDEST
000005c3: CALLVALUE
000005c4: DUP1
000005c5: ISZERO
000005c6: PUSH2 0x05cd
000005c9: JUMPI
000005ca: PUSH0
000005cb: DUP1
000005cc: REVERT
000005cd: JUMPDEST
000005ce: POP
000005cf: PUSH2 0x0275
000005d2: PUSH2 0x05dc
000005d5: CALLDATASIZE
000005d6: PUSH1 0x04
000005d8: PUSH2 0x2f43
000005db: JUMP
000005dc: JUMPDEST
000005dd: PUSH2 0x13e1
000005e0: JUMP
000005e1: JUMPDEST
000005e2: CALLVALUE
000005e3: DUP1
000005e4: ISZERO
000005e5: PUSH2 0x05ec
000005e8: JUMPI
000005e9: PUSH0
000005ea: DUP1
000005eb: REVERT
000005ec: JUMPDEST
000005ed: POP
000005ee: PUSH2 0x0275
000005f1: PUSH2 0x05fb
000005f4: CALLDATASIZE
000005f5: PUSH1 0x04
000005f7: PUSH2 0x2e75
000005fa: JUMP
000005fb: JUMPDEST
000005fc: PUSH2 0x14cd
000005ff: JUMP
00000600: JUMPDEST
00000601: CALLVALUE
00000602: DUP1
00000603: ISZERO
00000604: PUSH2 0x060b
00000607: JUMPI
00000608: PUSH0
00000609: DUP1
0000060a: REVERT
0000060b: JUMPDEST
0000060c: POP
0000060d: PUSH2 0x0296
00000610: PUSH2 0x061a
00000613: CALLDATASIZE
00000614: PUSH1 0x04
00000616: PUSH2 0x2eb0
00000619: JUMP
0000061a: JUMPDEST
0000061b: PUSH2 0x1554
0000061e: JUMP
0000061f: JUMPDEST
00000620: CALLVALUE
00000621: DUP1
00000622: ISZERO
00000623: PUSH2 0x062a
00000626: JUMPI
00000627: PUSH0
00000628: DUP1
00000629: REVERT
0000062a: JUMPDEST
0000062b: POP
0000062c: PUSH2 0x02e9
0000062f: PUSH0
00000630: DUP2
00000631: JUMP
00000632: JUMPDEST
00000633: CALLVALUE
00000634: DUP1
00000635: ISZERO
00000636: PUSH2 0x063d
00000639: JUMPI
0000063a: PUSH0
0000063b: DUP1
0000063c: REVERT
0000063d: JUMPDEST
0000063e: POP
0000063f: PUSH2 0x02e9
00000642: PUSH4 0x05f5e100
00000647: DUP2
00000648: JUMP
00000649: JUMPDEST
0000064a: CALLVALUE
0000064b: DUP1
0000064c: ISZERO
0000064d: PUSH2 0x0654
00000650: JUMPI
00000651: PUSH0
00000652: DUP1
00000653: REVERT
00000654: JUMPDEST
00000655: POP
00000656: PUSH2 0x02e9
00000659: PUSH2 0x0663
0000065c: CALLDATASIZE
0000065d: PUSH1 0x04
0000065f: PUSH2 0x2e75
00000662: JUMP
00000663: JUMPDEST
00000664: PUSH2 0x158a
00000667: JUMP
00000668: JUMPDEST
00000669: CALLVALUE
0000066a: DUP1
0000066b: ISZERO
0000066c: PUSH2 0x0673
0000066f: JUMPI
00000670: PUSH0
00000671: DUP1
00000672: REVERT
00000673: JUMPDEST
00000674: POP
00000675: PUSH2 0x0687
00000678: PUSH2 0x0682
0000067b: CALLDATASIZE
0000067c: PUSH1 0x04
0000067e: PUSH2 0x2e75
00000681: JUMP
00000682: JUMPDEST
00000683: PUSH2 0x15b5
00000686: JUMP
00000687: JUMPDEST
00000688: PUSH1 0x40
0000068a: MLOAD
0000068b: PUSH2 0x02a2
0000068e: SWAP2
0000068f: SWAP1
00000690: PUSH2 0x2faf
00000693: JUMP
00000694: JUMPDEST
00000695: CALLVALUE
00000696: DUP1
00000697: ISZERO
00000698: PUSH2 0x069f
0000069b: JUMPI
0000069c: PUSH0
0000069d: DUP1
0000069e: REVERT
0000069f: JUMPDEST
000006a0: POP
000006a1: PUSH2 0x03ed
000006a4: PUSH2 0x15e5
000006a7: JUMP
000006a8: JUMPDEST
000006a9: CALLVALUE
000006aa: DUP1
000006ab: ISZERO
000006ac: PUSH2 0x06b3
000006af: JUMPI
000006b0: PUSH0
000006b1: DUP1
000006b2: REVERT
000006b3: JUMPDEST
000006b4: POP
000006b5: PUSH2 0x0275
000006b8: PUSH2 0x06c2
000006bb: CALLDATASIZE
000006bc: PUSH1 0x04
000006be: PUSH2 0x2ffb
000006c1: JUMP
000006c2: JUMPDEST
000006c3: PUSH2 0x1613
000006c6: JUMP
000006c7: JUMPDEST
000006c8: CALLVALUE
000006c9: DUP1
000006ca: ISZERO
000006cb: PUSH2 0x06d2
000006ce: JUMPI
000006cf: PUSH0
000006d0: DUP1
000006d1: REVERT
000006d2: JUMPDEST
000006d3: POP
000006d4: PUSH2 0x02e9
000006d7: PUSH2 0x06e1
000006da: CALLDATASIZE
000006db: PUSH1 0x04
000006dd: PUSH2 0x2e75
000006e0: JUMP
000006e1: JUMPDEST
000006e2: PUSH2 0x16c1
000006e5: JUMP
000006e6: JUMPDEST
000006e7: CALLVALUE
000006e8: DUP1
000006e9: ISZERO
000006ea: PUSH2 0x06f1
000006ed: JUMPI
000006ee: PUSH0
000006ef: DUP1
000006f0: REVERT
000006f1: JUMPDEST
000006f2: POP
000006f3: PUSH2 0x0705
000006f6: PUSH2 0x0700
000006f9: CALLDATASIZE
000006fa: PUSH1 0x04
000006fc: PUSH2 0x3039
000006ff: JUMP
00000700: JUMPDEST
00000701: PUSH2 0x16e5
00000704: JUMP
00000705: JUMPDEST
00000706: PUSH1 0x40
00000708: MLOAD
00000709: PUSH2 0x02a2
0000070c: SWAP2
0000070d: SWAP1
0000070e: PUSH2 0x3081
00000711: JUMP
00000712: JUMPDEST
00000713: CALLVALUE
00000714: DUP1
00000715: ISZERO
00000716: PUSH2 0x071d
00000719: JUMPI
0000071a: PUSH0
0000071b: DUP1
0000071c: REVERT
0000071d: JUMPDEST
0000071e: POP
0000071f: PUSH2 0x0275
00000722: PUSH2 0x072c
00000725: CALLDATASIZE
00000726: PUSH1 0x04
00000728: PUSH2 0x2eb0
0000072b: JUMP
0000072c: JUMPDEST
0000072d: PUSH2 0x1956
00000730: JUMP
00000731: JUMPDEST
00000732: CALLVALUE
00000733: DUP1
00000734: ISZERO
00000735: PUSH2 0x073c
00000738: JUMPI
00000739: PUSH0
0000073a: DUP1
0000073b: REVERT
0000073c: JUMPDEST
0000073d: POP
0000073e: PUSH2 0x0275
00000741: PUSH2 0x074b
00000744: CALLDATASIZE
00000745: PUSH1 0x04
00000747: PUSH2 0x2f43
0000074a: JUMP
0000074b: JUMPDEST
0000074c: PUSH2 0x1972
0000074f: JUMP
00000750: JUMPDEST
00000751: CALLVALUE
00000752: DUP1
00000753: ISZERO
00000754: PUSH2 0x075b
00000757: JUMPI
00000758: PUSH0
00000759: DUP1
0000075a: REVERT
0000075b: JUMPDEST
0000075c: POP
0000075d: PUSH2 0x02e9
00000760: PUSH2 0x076a
00000763: CALLDATASIZE
00000764: PUSH1 0x04
00000766: PUSH2 0x2ffb
00000769: JUMP
0000076a: JUMPDEST
0000076b: PUSH2 0x1f03
0000076e: JUMP
0000076f: JUMPDEST
00000770: CALLVALUE
00000771: DUP1
00000772: ISZERO
00000773: PUSH2 0x077a
00000776: JUMPI
00000777: PUSH0
00000778: DUP1
00000779: REVERT
0000077a: JUMPDEST
0000077b: POP
0000077c: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
0000079d: PUSH1 0x02
0000079f: ADD
000007a0: SLOAD
000007a1: PUSH2 0x02e9
000007a4: JUMP
000007a5: JUMPDEST
000007a6: CALLVALUE
000007a7: DUP1
000007a8: ISZERO
000007a9: PUSH2 0x07b0
000007ac: JUMPI
000007ad: PUSH0
000007ae: DUP1
000007af: REVERT
000007b0: JUMPDEST
000007b1: POP
000007b2: PUSH2 0x02e9
000007b5: PUSH32 0x35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb
000007d6: DUP2
000007d7: JUMP
000007d8: JUMPDEST
000007d9: CALLVALUE
000007da: DUP1
000007db: ISZERO
000007dc: PUSH2 0x07e3
000007df: JUMPI
000007e0: PUSH0
000007e1: DUP1
000007e2: REVERT
000007e3: JUMPDEST
000007e4: POP
000007e5: PUSH2 0x02e9
000007e8: PUSH4 0x055d4a80
000007ed: DUP2
000007ee: JUMP
000007ef: JUMPDEST
000007f0: CALLVALUE
000007f1: DUP1
000007f2: ISZERO
000007f3: PUSH2 0x07fa
000007f6: JUMPI
000007f7: PUSH0
000007f8: DUP1
000007f9: REVERT
000007fa: JUMPDEST
000007fb: POP
000007fc: PUSH2 0x03ed
000007ff: PUSH32 0x0000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41
00000820: DUP2
00000821: JUMP
00000822: JUMPDEST
00000823: CALLVALUE
00000824: DUP1
00000825: ISZERO
00000826: PUSH2 0x082d
00000829: JUMPI
0000082a: PUSH0
0000082b: DUP1
0000082c: REVERT
0000082d: JUMPDEST
0000082e: POP
0000082f: PUSH2 0x02e9
00000832: PUSH2 0x083c
00000835: CALLDATASIZE
00000836: PUSH1 0x04
00000838: PUSH2 0x30b6
0000083b: JUMP
0000083c: JUMPDEST
0000083d: PUSH1 0x01
0000083f: PUSH1 0x01
00000841: PUSH1 0xa0
00000843: SHL
00000844: SUB
00000845: SWAP2
00000846: DUP3
00000847: AND
00000848: PUSH0
00000849: SWAP1
0000084a: DUP2
0000084b: MSTORE
0000084c: PUSH1 0x03
0000084e: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
0000086f: ADD
00000870: PUSH1 0x20
00000872: SWAP1
00000873: DUP2
00000874: MSTORE
00000875: PUSH1 0x40
00000877: DUP1
00000878: DUP4
00000879: KECCAK256
0000087a: SWAP4
0000087b: SWAP1
0000087c: SWAP5
0000087d: AND
0000087e: DUP3
0000087f: MSTORE
00000880: SWAP2
00000881: SWAP1
00000882: SWAP2
00000883: MSTORE
00000884: KECCAK256
00000885: SLOAD
00000886: SWAP1
00000887: JUMP
00000888: JUMPDEST
00000889: PUSH2 0x08b9
0000088c: PUSH32 0x35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb
000008ad: PUSH2 0x061a
000008b0: PUSH1 0x20
000008b2: DUP5
000008b3: ADD
000008b4: DUP5
000008b5: PUSH2 0x2f08
000008b8: JUMP
000008b9: JUMPDEST
000008ba: PUSH2 0x08f5
000008bd: JUMPI
000008be: PUSH1 0x40
000008c0: MLOAD
000008c1: PUSH4 0xd5efc6bb
000008c6: PUSH1 0xe0
000008c8: SHL
000008c9: DUP2
000008ca: MSTORE
000008cb: PUSH1 0x20
000008cd: PUSH1 0x04
000008cf: DUP3
000008d0: ADD
000008d1: MSTORE
000008d2: PUSH1 0x07
000008d4: PUSH1 0x24
000008d6: DUP3
000008d7: ADD
000008d8: MSTORE
000008d9: PUSH7 0x3a37b5b2b724b7
000008e1: PUSH1 0xc9
000008e3: SHL
000008e4: PUSH1 0x44
000008e6: DUP3
000008e7: ADD
000008e8: MSTORE
000008e9: PUSH1 0x64
000008eb: ADD
000008ec: JUMPDEST
000008ed: PUSH1 0x40
000008ef: MLOAD
000008f0: DUP1
000008f1: SWAP2
000008f2: SUB
000008f3: SWAP1
000008f4: REVERT
000008f5: JUMPDEST
000008f6: PUSH2 0x0929
000008f9: PUSH32 0x9d556436fc766d4a6d24fe48c90073bc03600d7556265a3217def4578d7c2531
0000091a: PUSH2 0x061a
0000091d: PUSH1 0x40
0000091f: DUP5
00000920: ADD
00000921: PUSH1 0x20
00000923: DUP6
00000924: ADD
00000925: PUSH2 0x2f08
00000928: JUMP
00000929: JUMPDEST
0000092a: PUSH2 0x0961
0000092d: JUMPI
0000092e: PUSH1 0x40
00000930: MLOAD
00000931: PUSH4 0xd5efc6bb
00000936: PUSH1 0xe0
00000938: SHL
00000939: DUP2
0000093a: MSTORE
0000093b: PUSH1 0x20
0000093d: PUSH1 0x04
0000093f: DUP3
00000940: ADD
00000941: MSTORE
00000942: PUSH1 0x08
00000944: PUSH1 0x24
00000946: DUP3
00000947: ADD
00000948: MSTORE
00000949: PUSH8 0x1d1bdad95b93dd5d
00000952: PUSH1 0xc2
00000954: SHL
00000955: PUSH1 0x44
00000957: DUP3
00000958: ADD
00000959: MSTORE
0000095a: PUSH1 0x64
0000095c: ADD
0000095d: PUSH2 0x08ec
00000960: JUMP
00000961: JUMPDEST
00000962: PUSH1 0x40
00000964: DUP2
00000965: ADD
00000966: CALLDATALOAD
00000967: PUSH2 0x097c
0000096a: PUSH2 0x0976
0000096d: PUSH1 0x20
0000096f: DUP5
00000970: ADD
00000971: DUP5
00000972: PUSH2 0x2f08
00000975: JUMP
00000976: JUMPDEST
00000977: ADDRESS
00000978: PUSH2 0x21fb
0000097b: JUMP
0000097c: JUMPDEST
0000097d: LT
0000097e: DUP1
0000097f: PUSH2 0x098a
00000982: JUMPI
00000983: POP
00000984: PUSH1 0x40
00000986: DUP2
00000987: ADD
00000988: CALLDATALOAD
00000989: ISZERO
0000098a: JUMPDEST
0000098b: ISZERO
0000098c: PUSH2 0x09c3
0000098f: JUMPI
00000990: PUSH1 0x40
00000992: MLOAD
00000993: PUSH4 0xd5efc6bb
00000998: PUSH1 0xe0
0000099a: SHL
0000099b: DUP2
0000099c: MSTORE
0000099d: PUSH1 0x20
0000099f: PUSH1 0x04
000009a1: DUP3
000009a2: ADD
000009a3: MSTORE
000009a4: PUSH1 0x08
000009a6: PUSH1 0x24
000009a8: DUP3
000009a9: ADD
000009aa: MSTORE
000009ab: PUSH8 0x30b6b7bab73a24b7
000009b4: PUSH1 0xc1
000009b6: SHL
000009b7: PUSH1 0x44
000009b9: DUP3
000009ba: ADD
000009bb: MSTORE
000009bc: PUSH1 0x64
000009be: ADD
000009bf: PUSH2 0x08ec
000009c2: JUMP
000009c3: JUMPDEST
000009c4: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
000009e5: PUSH0
000009e6: PUSH1 0x03
000009e8: DUP3
000009e9: ADD
000009ea: DUP2
000009eb: PUSH2 0x09f7
000009ee: PUSH1 0x20
000009f0: DUP7
000009f1: ADD
000009f2: DUP7
000009f3: PUSH2 0x2f08
000009f6: JUMP
000009f7: JUMPDEST
000009f8: PUSH1 0x01
000009fa: PUSH1 0x01
000009fc: PUSH1 0xa0
000009fe: SHL
000009ff: SUB
00000a00: AND
00000a01: PUSH1 0x01
00000a03: PUSH1 0x01
00000a05: PUSH1 0xa0
00000a07: SHL
00000a08: SUB
00000a09: AND
00000a0a: DUP2
00000a0b: MSTORE
00000a0c: PUSH1 0x20
00000a0e: ADD
00000a0f: SWAP1
00000a10: DUP2
00000a11: MSTORE
00000a12: PUSH1 0x20
00000a14: ADD
00000a15: PUSH0
00000a16: KECCAK256
00000a17: PUSH0
00000a18: DUP5
00000a19: PUSH1 0x20
00000a1b: ADD
00000a1c: PUSH1 0x20
00000a1e: DUP2
00000a1f: ADD
00000a20: SWAP1
00000a21: PUSH2 0x0a2a
00000a24: SWAP2
00000a25: SWAP1
00000a26: PUSH2 0x2f08
00000a29: JUMP
00000a2a: JUMPDEST
00000a2b: PUSH1 0x01
00000a2d: PUSH1 0x01
00000a2f: PUSH1 0xa0
00000a31: SHL
00000a32: SUB
00000a33: AND
00000a34: PUSH1 0x01
00000a36: PUSH1 0x01
00000a38: PUSH1 0xa0
00000a3a: SHL
00000a3b: SUB
00000a3c: AND
00000a3d: DUP2
00000a3e: MSTORE
00000a3f: PUSH1 0x20
00000a41: ADD
00000a42: SWAP1
00000a43: DUP2
00000a44: MSTORE
00000a45: PUSH1 0x20
00000a47: ADD
00000a48: PUSH0
00000a49: KECCAK256
00000a4a: SLOAD
00000a4b: SWAP1
00000a4c: POP
00000a4d: DUP1
00000a4e: PUSH0
00000a4f: SUB
00000a50: PUSH2 0x0a5a
00000a53: JUMPI
00000a54: POP
00000a55: PUSH1 0x02
00000a57: DUP2
00000a58: ADD
00000a59: SLOAD
00000a5a: JUMPDEST
00000a5b: PUSH0
00000a5c: PUSH2 0x0a93
00000a5f: PUSH2 0x0a88
00000a62: PUSH2 0x0a6e
00000a65: PUSH1 0x20
00000a67: DUP8
00000a68: ADD
00000a69: DUP8
00000a6a: PUSH2 0x2f08
00000a6d: JUMP
00000a6e: JUMPDEST
00000a6f: PUSH2 0x0a7e
00000a72: PUSH1 0x40
00000a74: DUP9
00000a75: ADD
00000a76: PUSH1 0x20
00000a78: DUP10
00000a79: ADD
00000a7a: PUSH2 0x2f08
00000a7d: JUMP
00000a7e: JUMPDEST
00000a7f: DUP8
00000a80: PUSH1 0x40
00000a82: ADD
00000a83: CALLDATALOAD
00000a84: PUSH2 0x1f03
00000a87: JUMP
00000a88: JUMPDEST
00000a89: DUP4
00000a8a: PUSH4 0x05f5e100
00000a8f: PUSH2 0x22a1
00000a92: JUMP
00000a93: JUMPDEST
00000a94: SWAP1
00000a95: POP
00000a96: DUP1
00000a97: DUP5
00000a98: PUSH1 0x60
00000a9a: ADD
00000a9b: CALLDATALOAD
00000a9c: LT
00000a9d: ISZERO
00000a9e: PUSH2 0x0aea
00000aa1: JUMPI
00000aa2: PUSH1 0x40
00000aa4: MLOAD
00000aa5: PUSH4 0xd5efc6bb
00000aaa: PUSH1 0xe0
00000aac: SHL
00000aad: DUP2
00000aae: MSTORE
00000aaf: PUSH1 0x20
00000ab1: PUSH1 0x04
00000ab3: DUP3
00000ab4: ADD
00000ab5: MSTORE
00000ab6: PUSH1 0x1e
00000ab8: PUSH1 0x24
00000aba: DUP3
00000abb: ADD
00000abc: MSTORE
00000abd: PUSH32 0x6d696e416d6f756e744f7574203c206f7261636c654d696e416d6f756e740000
00000ade: PUSH1 0x44
00000ae0: DUP3
00000ae1: ADD
00000ae2: MSTORE
00000ae3: PUSH1 0x64
00000ae5: ADD
00000ae6: PUSH2 0x08ec
00000ae9: JUMP
00000aea: JUMPDEST
00000aeb: TIMESTAMP
00000aec: DUP5
00000aed: PUSH1 0x80
00000aef: ADD
00000af0: CALLDATALOAD
00000af1: LT
00000af2: ISZERO
00000af3: PUSH2 0x0b2a
00000af6: JUMPI
00000af7: PUSH1 0x40
00000af9: MLOAD
00000afa: PUSH4 0xd5efc6bb
00000aff: PUSH1 0xe0
00000b01: SHL
00000b02: DUP2
00000b03: MSTORE
00000b04: PUSH1 0x20
00000b06: PUSH1 0x04
00000b08: DUP3
00000b09: ADD
00000b0a: MSTORE
00000b0b: PUSH1 0x08
00000b0d: PUSH1 0x24
00000b0f: DUP3
00000b10: ADD
00000b11: MSTORE
00000b12: PUSH8 0x646561646c696e65
00000b1b: PUSH1 0xc0
00000b1d: SHL
00000b1e: PUSH1 0x44
00000b20: DUP3
00000b21: ADD
00000b22: MSTORE
00000b23: PUSH1 0x64
00000b25: ADD
00000b26: PUSH2 0x08ec
00000b29: JUMP
00000b2a: JUMPDEST
00000b2b: PUSH2 0x0b3a
00000b2e: PUSH1 0x40
00000b30: DUP6
00000b31: ADD
00000b32: PUSH1 0x20
00000b34: DUP7
00000b35: ADD
00000b36: PUSH2 0x2f08
00000b39: JUMP
00000b3a: JUMPDEST
00000b3b: PUSH1 0x01
00000b3d: PUSH1 0x01
00000b3f: PUSH1 0xa0
00000b41: SHL
00000b42: SUB
00000b43: AND
00000b44: PUSH2 0x0b50
00000b47: PUSH1 0x20
00000b49: DUP7
00000b4a: ADD
00000b4b: DUP7
00000b4c: PUSH2 0x2f08
00000b4f: JUMP
00000b50: JUMPDEST
00000b51: PUSH1 0x01
00000b53: PUSH1 0x01
00000b55: PUSH1 0xa0
00000b57: SHL
00000b58: SUB
00000b59: AND
00000b5a: SUB
00000b5b: PUSH2 0x0b9d
00000b5e: JUMPI
00000b5f: PUSH1 0x40
00000b61: MLOAD
00000b62: PUSH4 0xd5efc6bb
00000b67: PUSH1 0xe0
00000b69: SHL
00000b6a: DUP2
00000b6b: MSTORE
00000b6c: PUSH1 0x20
00000b6e: PUSH1 0x04
00000b70: DUP3
00000b71: ADD
00000b72: MSTORE
00000b73: PUSH1 0x13
00000b75: PUSH1 0x24
00000b77: DUP3
00000b78: ADD
00000b79: MSTORE
00000b7a: PUSH19 0x1d1bdad95b925b880f4f481d1bdad95b93dd5d
00000b8e: PUSH1 0x6a
00000b90: SHL
00000b91: PUSH1 0x44
00000b93: DUP3
00000b94: ADD
00000b95: MSTORE
00000b96: PUSH1 0x64
00000b98: ADD
00000b99: PUSH2 0x08ec
00000b9c: JUMP
00000b9d: JUMPDEST
00000b9e: POP
00000b9f: POP
00000ba0: POP
00000ba1: POP
00000ba2: JUMP
00000ba3: JUMPDEST
00000ba4: PUSH0
00000ba5: PUSH1 0x01
00000ba7: PUSH1 0x01
00000ba9: PUSH1 0xe0
00000bab: SHL
00000bac: SUB
00000bad: NOT
00000bae: DUP3
00000baf: AND
00000bb0: PUSH4 0x5a05180f
00000bb5: PUSH1 0xe0
00000bb7: SHL
00000bb8: EQ
00000bb9: DUP1
00000bba: PUSH2 0x0bc7
00000bbd: JUMPI
00000bbe: POP
00000bbf: PUSH2 0x0bc7
00000bc2: DUP3
00000bc3: PUSH2 0x2351
00000bc6: JUMP
00000bc7: JUMPDEST
00000bc8: SWAP3
00000bc9: SWAP2
00000bca: POP
00000bcb: POP
00000bcc: JUMP
00000bcd: JUMPDEST
00000bce: PUSH0
00000bcf: DUP1
00000bd0: MLOAD
00000bd1: PUSH1 0x20
00000bd3: PUSH2 0x36ce
00000bd6: DUP4
00000bd7: CODECOPY
00000bd8: DUP2
00000bd9: MLOAD
00000bda: SWAP2
00000bdb: MSTORE
00000bdc: PUSH2 0x0be4
00000bdf: DUP2
00000be0: PUSH2 0x2385
00000be3: JUMP
00000be4: JUMPDEST
00000be5: PUSH1 0x40
00000be7: MLOAD
00000be8: PUSH3 0x54cdef
00000bec: PUSH1 0xe6
00000bee: SHL
00000bef: DUP2
00000bf0: MSTORE
00000bf1: PUSH1 0x01
00000bf3: PUSH1 0x01
00000bf5: PUSH1 0xa0
00000bf7: SHL
00000bf8: SUB
00000bf9: PUSH32 0x0000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41
00000c1a: AND
00000c1b: SWAP1
00000c1c: PUSH4 0x15337bc0
00000c21: SWAP1
00000c22: PUSH2 0x0c31
00000c25: SWAP1
00000c26: DUP7
00000c27: SWAP1
00000c28: DUP7
00000c29: SWAP1
00000c2a: PUSH1 0x04
00000c2c: ADD
00000c2d: PUSH2 0x310a
00000c30: JUMP
00000c31: JUMPDEST
00000c32: PUSH0
00000c33: PUSH1 0x40
00000c35: MLOAD
00000c36: DUP1
00000c37: DUP4
00000c38: SUB
00000c39: DUP2
00000c3a: PUSH0
00000c3b: DUP8
00000c3c: DUP1
00000c3d: EXTCODESIZE
00000c3e: ISZERO
00000c3f: DUP1
00000c40: ISZERO
00000c41: PUSH2 0x0c48
00000c44: JUMPI
00000c45: PUSH0
00000c46: DUP1
00000c47: REVERT
00000c48: JUMPDEST
00000c49: POP
00000c4a: GAS
00000c4b: CALL
00000c4c: ISZERO
00000c4d: DUP1
00000c4e: ISZERO
00000c4f: PUSH2 0x0c5a
00000c52: JUMPI
00000c53: RETURNDATASIZE
00000c54: PUSH0
00000c55: DUP1
00000c56: RETURNDATACOPY
00000c57: RETURNDATASIZE
00000c58: PUSH0
00000c59: REVERT
00000c5a: JUMPDEST
00000c5b: POP
00000c5c: POP
00000c5d: POP
00000c5e: POP
00000c5f: PUSH32 0x53a0d823aed1a4804707fe8fd5f5fbd95767ee12e836f69db0c4b88333f12062
00000c80: DUP4
00000c81: DUP4
00000c82: PUSH1 0x40
00000c84: MLOAD
00000c85: PUSH2 0x0c8f
00000c88: SWAP3
00000c89: SWAP2
00000c8a: SWAP1
00000c8b: PUSH2 0x310a
00000c8e: JUMP
00000c8f: JUMPDEST
00000c90: PUSH1 0x40
00000c92: MLOAD
00000c93: DUP1
00000c94: SWAP2
00000c95: SUB
00000c96: SWAP1
00000c97: LOG1
00000c98: POP
00000c99: POP
00000c9a: POP
00000c9b: JUMP
00000c9c: JUMPDEST
00000c9d: PUSH0
00000c9e: SWAP1
00000c9f: DUP2
00000ca0: MSTORE
00000ca1: PUSH0
00000ca2: DUP1
00000ca3: MLOAD
00000ca4: PUSH1 0x20
00000ca6: PUSH2 0x36ee
00000ca9: DUP4
00000caa: CODECOPY
00000cab: DUP2
00000cac: MLOAD
00000cad: SWAP2
00000cae: MSTORE
00000caf: PUSH1 0x20
00000cb1: MSTORE
00000cb2: PUSH1 0x40
00000cb4: SWAP1
00000cb5: KECCAK256
00000cb6: PUSH1 0x01
00000cb8: ADD
00000cb9: SLOAD
00000cba: SWAP1
00000cbb: JUMP
00000cbc: JUMPDEST
00000cbd: PUSH4 0x055d4a80
00000cc2: DUP2
00000cc3: LT
00000cc4: DUP1
00000cc5: PUSH2 0x0cd1
00000cc8: JUMPI
00000cc9: POP
00000cca: PUSH4 0x068e7780
00000ccf: DUP2
00000cd0: GT
00000cd1: JUMPDEST
00000cd2: ISZERO
00000cd3: PUSH2 0x0d1f
00000cd6: JUMPI
00000cd7: PUSH1 0x40
00000cd9: MLOAD
00000cda: PUSH4 0xd5efc6bb
00000cdf: PUSH1 0xe0
00000ce1: SHL
00000ce2: DUP2
00000ce3: MSTORE
00000ce4: PUSH1 0x20
00000ce6: PUSH1 0x04
00000ce8: DUP3
00000ce9: ADD
00000cea: DUP2
00000ceb: SWAP1
00000cec: MSTORE
00000ced: PUSH1 0x24
00000cef: DUP3
00000cf0: ADD
00000cf1: MSTORE
00000cf2: PUSH32 0x6d756c7469706c696572206f7574206f662065787065637465642072616e6765
00000d13: PUSH1 0x44
00000d15: DUP3
00000d16: ADD
00000d17: MSTORE
00000d18: PUSH1 0x64
00000d1a: ADD
00000d1b: PUSH2 0x08ec
00000d1e: JUMP
00000d1f: JUMPDEST
00000d20: POP
00000d21: JUMP
00000d22: JUMPDEST
00000d23: PUSH2 0x0d2b
00000d26: DUP3
00000d27: PUSH2 0x0c9c
00000d2a: JUMP
00000d2b: JUMPDEST
00000d2c: PUSH2 0x0d34
00000d2f: DUP2
00000d30: PUSH2 0x2385
00000d33: JUMP
00000d34: JUMPDEST
00000d35: PUSH2 0x0b9d
00000d38: DUP4
00000d39: DUP4
00000d3a: PUSH2 0x238f
00000d3d: JUMP
00000d3e: JUMPDEST
00000d3f: PUSH1 0x01
00000d41: PUSH1 0x01
00000d43: PUSH1 0xa0
00000d45: SHL
00000d46: SUB
00000d47: DUP2
00000d48: AND
00000d49: CALLER
00000d4a: EQ
00000d4b: PUSH2 0x0d67
00000d4e: JUMPI
00000d4f: PUSH1 0x40
00000d51: MLOAD
00000d52: PUSH4 0x334bd919
00000d57: PUSH1 0xe1
00000d59: SHL
00000d5a: DUP2
00000d5b: MSTORE
00000d5c: PUSH1 0x04
00000d5e: ADD
00000d5f: PUSH1 0x40
00000d61: MLOAD
00000d62: DUP1
00000d63: SWAP2
00000d64: SUB
00000d65: SWAP1
00000d66: REVERT
00000d67: JUMPDEST
00000d68: PUSH2 0x0d71
00000d6b: DUP3
00000d6c: DUP3
00000d6d: PUSH2 0x2409
00000d70: JUMP
00000d71: JUMPDEST
00000d72: POP
00000d73: POP
00000d74: POP
00000d75: JUMP
00000d76: JUMPDEST
00000d77: PUSH0
00000d78: PUSH2 0x0da0
00000d7b: PUSH32 0x062030953ce644a2a7115259790ad01d3c2b5e8c98fc6b190da443a3f0a7c900
00000d9c: PUSH2 0x2485
00000d9f: JUMP
00000da0: JUMPDEST
00000da1: SWAP1
00000da2: POP
00000da3: SWAP1
00000da4: JUMP
00000da5: JUMPDEST
00000da6: PUSH0
00000da7: PUSH2 0x0dae
00000daa: PUSH2 0x248e
00000dad: JUMP
00000dae: JUMPDEST
00000daf: DUP1
00000db0: SLOAD
00000db1: SWAP1
00000db2: SWAP2
00000db3: POP
00000db4: PUSH1 0xff
00000db6: PUSH1 0x01
00000db8: PUSH1 0x40
00000dba: SHL
00000dbb: DUP3
00000dbc: DIV
00000dbd: AND
00000dbe: ISZERO
00000dbf: SWAP1
00000dc0: PUSH8 0xffffffffffffffff
00000dc9: AND
00000dca: PUSH0
00000dcb: DUP2
00000dcc: ISZERO
00000dcd: DUP1
00000dce: ISZERO
00000dcf: PUSH2 0x0dd5
00000dd2: JUMPI
00000dd3: POP
00000dd4: DUP3
00000dd5: JUMPDEST
00000dd6: SWAP1
00000dd7: POP
00000dd8: PUSH0
00000dd9: DUP3
00000dda: PUSH8 0xffffffffffffffff
00000de3: AND
00000de4: PUSH1 0x01
00000de6: EQ
00000de7: DUP1
00000de8: ISZERO
00000de9: PUSH2 0x0df1
00000dec: JUMPI
00000ded: POP
00000dee: ADDRESS
00000def: EXTCODESIZE
00000df0: ISZERO
00000df1: JUMPDEST
00000df2: SWAP1
00000df3: POP
00000df4: DUP2
00000df5: ISZERO
00000df6: DUP1
00000df7: ISZERO
00000df8: PUSH2 0x0dff
00000dfb: JUMPI
00000dfc: POP
00000dfd: DUP1
00000dfe: ISZERO
00000dff: JUMPDEST
00000e00: ISZERO
00000e01: PUSH2 0x0e1d
00000e04: JUMPI
00000e05: PUSH1 0x40
00000e07: MLOAD
00000e08: PUSH4 0xf92ee8a9
00000e0d: PUSH1 0xe0
00000e0f: SHL
00000e10: DUP2
00000e11: MSTORE
00000e12: PUSH1 0x04
00000e14: ADD
00000e15: PUSH1 0x40
00000e17: MLOAD
00000e18: DUP1
00000e19: SWAP2
00000e1a: SUB
00000e1b: SWAP1
00000e1c: REVERT
00000e1d: JUMPDEST
00000e1e: DUP5
00000e1f: SLOAD
00000e20: PUSH8 0xffffffffffffffff
00000e29: NOT
00000e2a: AND
00000e2b: PUSH1 0x01
00000e2d: OR
00000e2e: DUP6
00000e2f: SSTORE
00000e30: DUP4
00000e31: ISZERO
00000e32: PUSH2 0x0e47
00000e35: JUMPI
00000e36: DUP5
00000e37: SLOAD
00000e38: PUSH1 0xff
00000e3a: PUSH1 0x40
00000e3c: SHL
00000e3d: NOT
00000e3e: AND
00000e3f: PUSH1 0x01
00000e41: PUSH1 0x40
00000e43: SHL
00000e44: OR
00000e45: DUP6
00000e46: SSTORE
00000e47: JUMPDEST
00000e48: PUSH0
00000e49: DUP1
00000e4a: DUP1
00000e4b: DUP1
00000e4c: DUP1
00000e4d: DUP1
00000e4e: PUSH2 0x0e59
00000e51: DUP13
00000e52: DUP15
00000e53: ADD
00000e54: DUP15
00000e55: PUSH2 0x321b
00000e58: JUMP
00000e59: JUMPDEST
00000e5a: SWAP6
00000e5b: POP
00000e5c: SWAP6
00000e5d: POP
00000e5e: SWAP6
00000e5f: POP
00000e60: SWAP6
00000e61: POP
00000e62: SWAP6
00000e63: POP
00000e64: SWAP6
00000e65: POP
00000e66: PUSH0
00000e67: PUSH1 0x01
00000e69: PUSH1 0x01
00000e6b: PUSH1 0xa0
00000e6d: SHL
00000e6e: SUB
00000e6f: AND
00000e70: DUP7
00000e71: PUSH1 0x01
00000e73: PUSH1 0x01
00000e75: PUSH1 0xa0
00000e77: SHL
00000e78: SUB
00000e79: AND
00000e7a: EQ
00000e7b: DUP1
00000e7c: PUSH2 0x0e8c
00000e7f: JUMPI
00000e80: POP
00000e81: PUSH1 0x01
00000e83: PUSH1 0x01
00000e85: PUSH1 0xa0
00000e87: SHL
00000e88: SUB
00000e89: DUP6
00000e8a: AND
00000e8b: ISZERO
00000e8c: JUMPDEST
00000e8d: DUP1
00000e8e: PUSH2 0x0e9e
00000e91: JUMPI
00000e92: POP
00000e93: PUSH1 0x01
00000e95: PUSH1 0x01
00000e97: PUSH1 0xa0
00000e99: SHL
00000e9a: SUB
00000e9b: DUP5
00000e9c: AND
00000e9d: ISZERO
00000e9e: JUMPDEST
00000e9f: ISZERO
00000ea0: PUSH2 0x0ebc
00000ea3: JUMPI
00000ea4: PUSH1 0x40
00000ea6: MLOAD
00000ea7: PUSH4 0x7c946ed7
00000eac: PUSH1 0xe0
00000eae: SHL
00000eaf: DUP2
00000eb0: MSTORE
00000eb1: PUSH1 0x04
00000eb3: ADD
00000eb4: PUSH1 0x40
00000eb6: MLOAD
00000eb7: DUP1
00000eb8: SWAP2
00000eb9: SUB
00000eba: SWAP1
00000ebb: REVERT
00000ebc: JUMPDEST
00000ebd: PUSH2 0x0ec5
00000ec0: DUP4
00000ec1: PUSH2 0x0cbc
00000ec4: JUMP
00000ec5: JUMPDEST
00000ec6: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
00000ee7: PUSH2 0x0ef0
00000eea: PUSH0
00000eeb: DUP9
00000eec: PUSH2 0x238f
00000eef: JUMP
00000ef0: JUMPDEST
00000ef1: POP
00000ef2: DUP1
00000ef3: SLOAD
00000ef4: PUSH1 0x01
00000ef6: PUSH1 0x01
00000ef8: PUSH1 0xa0
00000efa: SHL
00000efb: SUB
00000efc: DUP1
00000efd: DUP9
00000efe: AND
00000eff: PUSH1 0x01
00000f01: PUSH1 0x01
00000f03: PUSH1 0xa0
00000f05: SHL
00000f06: SUB
00000f07: NOT
00000f08: SWAP3
00000f09: DUP4
00000f0a: AND
00000f0b: OR
00000f0c: DUP4
00000f0d: SSTORE
00000f0e: PUSH1 0x01
00000f10: DUP4
00000f11: ADD
00000f12: DUP1
00000f13: SLOAD
00000f14: SWAP2
00000f15: DUP9
00000f16: AND
00000f17: SWAP2
00000f18: SWAP1
00000f19: SWAP3
00000f1a: AND
00000f1b: OR
00000f1c: SWAP1
00000f1d: SSTORE
00000f1e: PUSH1 0x02
00000f20: DUP2
00000f21: ADD
00000f22: DUP5
00000f23: SWAP1
00000f24: SSTORE
00000f25: PUSH0
00000f26: JUMPDEST
00000f27: DUP4
00000f28: MLOAD
00000f29: DUP2
00000f2a: LT
00000f2b: ISZERO
00000f2c: PUSH2 0x0fe5
00000f2f: JUMPI
00000f30: PUSH0
00000f31: PUSH1 0x01
00000f33: PUSH1 0x01
00000f35: PUSH1 0xa0
00000f37: SHL
00000f38: SUB
00000f39: AND
00000f3a: DUP5
00000f3b: DUP3
00000f3c: DUP2
00000f3d: MLOAD
00000f3e: DUP2
00000f3f: LT
00000f40: PUSH2 0x0f4b
00000f43: JUMPI
00000f44: PUSH2 0x0f4b
00000f47: PUSH2 0x3317
00000f4a: JUMP
00000f4b: JUMPDEST
00000f4c: PUSH1 0x20
00000f4e: MUL
00000f4f: PUSH1 0x20
00000f51: ADD
00000f52: ADD
00000f53: MLOAD
00000f54: PUSH1 0x01
00000f56: PUSH1 0x01
00000f58: PUSH1 0xa0
00000f5a: SHL
00000f5b: SUB
00000f5c: AND
00000f5d: EQ
00000f5e: DUP1
00000f5f: PUSH2 0x0f82
00000f62: JUMPI
00000f63: POP
00000f64: PUSH0
00000f65: DUP1
00000f66: SHL
00000f67: DUP4
00000f68: DUP3
00000f69: DUP2
00000f6a: MLOAD
00000f6b: DUP2
00000f6c: LT
00000f6d: PUSH2 0x0f78
00000f70: JUMPI
00000f71: PUSH2 0x0f78
00000f74: PUSH2 0x3317
00000f77: JUMP
00000f78: JUMPDEST
00000f79: PUSH1 0x20
00000f7b: MUL
00000f7c: PUSH1 0x20
00000f7e: ADD
00000f7f: ADD
00000f80: MLOAD
00000f81: EQ
00000f82: JUMPDEST
00000f83: ISZERO
00000f84: PUSH2 0x0fa0
00000f87: JUMPI
00000f88: PUSH1 0x40
00000f8a: MLOAD
00000f8b: PUSH4 0x7c946ed7
00000f90: PUSH1 0xe0
00000f92: SHL
00000f93: DUP2
00000f94: MSTORE
00000f95: PUSH1 0x04
00000f97: ADD
00000f98: PUSH1 0x40
00000f9a: MLOAD
00000f9b: DUP1
00000f9c: SWAP2
00000f9d: SUB
00000f9e: SWAP1
00000f9f: REVERT
00000fa0: JUMPDEST
00000fa1: PUSH2 0x0fdc
00000fa4: DUP4
00000fa5: DUP3
00000fa6: DUP2
00000fa7: MLOAD
00000fa8: DUP2
00000fa9: LT
00000faa: PUSH2 0x0fb5
00000fad: JUMPI
00000fae: PUSH2 0x0fb5
00000fb1: PUSH2 0x3317
00000fb4: JUMP
00000fb5: JUMPDEST
00000fb6: PUSH1 0x20
00000fb8: MUL
00000fb9: PUSH1 0x20
00000fbb: ADD
00000fbc: ADD
00000fbd: MLOAD
00000fbe: DUP6
00000fbf: DUP4
00000fc0: DUP2
00000fc1: MLOAD
00000fc2: DUP2
00000fc3: LT
00000fc4: PUSH2 0x0fcf
00000fc7: JUMPI
00000fc8: PUSH2 0x0fcf
00000fcb: PUSH2 0x3317
00000fce: JUMP
00000fcf: JUMPDEST
00000fd0: PUSH1 0x20
00000fd2: MUL
00000fd3: PUSH1 0x20
00000fd5: ADD
00000fd6: ADD
00000fd7: MLOAD
00000fd8: PUSH2 0x238f
00000fdb: JUMP
00000fdc: JUMPDEST
00000fdd: POP
00000fde: PUSH1 0x01
00000fe0: ADD
00000fe1: PUSH2 0x0f26
00000fe4: JUMP
00000fe5: JUMPDEST
00000fe6: POP
00000fe7: PUSH32 0x5e399709a9ff1709f6f6be7268c8e5c3eeaa9da9cd9797e78f07ef287c3717fe
00001008: DUP15
00001009: DUP15
0000100a: PUSH1 0x40
0000100c: MLOAD
0000100d: PUSH2 0x1017
00001010: SWAP3
00001011: SWAP2
00001012: SWAP1
00001013: PUSH2 0x310a
00001016: JUMP
00001017: JUMPDEST
00001018: PUSH1 0x40
0000101a: MLOAD
0000101b: DUP1
0000101c: SWAP2
0000101d: SUB
0000101e: SWAP1
0000101f: LOG1
00001020: POP
00001021: POP
00001022: POP
00001023: POP
00001024: POP
00001025: POP
00001026: POP
00001027: DUP4
00001028: ISZERO
00001029: PUSH2 0x106c
0000102c: JUMPI
0000102d: DUP5
0000102e: SLOAD
0000102f: PUSH1 0xff
00001031: PUSH1 0x40
00001033: SHL
00001034: NOT
00001035: AND
00001036: DUP6
00001037: SSTORE
00001038: PUSH1 0x40
0000103a: MLOAD
0000103b: PUSH1 0x01
0000103d: DUP2
0000103e: MSTORE
0000103f: PUSH32 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2
00001060: SWAP1
00001061: PUSH1 0x20
00001063: ADD
00001064: PUSH1 0x40
00001066: MLOAD
00001067: DUP1
00001068: SWAP2
00001069: SUB
0000106a: SWAP1
0000106b: LOG1
0000106c: JUMPDEST
0000106d: POP
0000106e: POP
0000106f: POP
00001070: POP
00001071: POP
00001072: POP
00001073: POP
00001074: JUMP
00001075: JUMPDEST
00001076: PUSH0
00001077: DUP1
00001078: MLOAD
00001079: PUSH1 0x20
0000107b: PUSH2 0x36ce
0000107e: DUP4
0000107f: CODECOPY
00001080: DUP2
00001081: MLOAD
00001082: SWAP2
00001083: MSTORE
00001084: PUSH2 0x108c
00001087: DUP2
00001088: PUSH2 0x2385
0000108b: JUMP
0000108c: JUMPDEST
0000108d: PUSH1 0x01
0000108f: PUSH1 0x01
00001091: PUSH1 0xa0
00001093: SHL
00001094: SUB
00001095: DUP4
00001096: AND
00001097: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
000010ac: EQ
000010ad: DUP1
000010ae: PUSH2 0x10de
000010b1: JUMPI
000010b2: POP
000010b3: PUSH2 0x10dc
000010b6: PUSH32 0x35f08086aac3799af637e5e9fa5ff324170893731444bf3a9d1edc368bcbfaeb
000010d7: DUP5
000010d8: PUSH2 0x1554
000010db: JUMP
000010dc: JUMPDEST
000010dd: ISZERO
000010de: JUMPDEST
000010df: ISZERO
000010e0: PUSH2 0x1114
000010e3: JUMPI
000010e4: PUSH1 0x40
000010e6: MLOAD
000010e7: PUSH4 0xd5efc6bb
000010ec: PUSH1 0xe0
000010ee: SHL
000010ef: DUP2
000010f0: MSTORE
000010f1: PUSH1 0x20
000010f3: PUSH1 0x04
000010f5: DUP3
000010f6: ADD
000010f7: MSTORE
000010f8: PUSH1 0x05
000010fa: PUSH1 0x24
000010fc: DUP3
000010fd: ADD
000010fe: MSTORE
000010ff: PUSH5 0x185cdcd95d
00001105: PUSH1 0xda
00001107: SHL
00001108: PUSH1 0x44
0000110a: DUP3
0000110b: ADD
0000110c: MSTORE
0000110d: PUSH1 0x64
0000110f: ADD
00001110: PUSH2 0x08ec
00001113: JUMP
00001114: JUMPDEST
00001115: PUSH2 0x1148
00001118: PUSH1 0x01
0000111a: PUSH1 0x01
0000111c: PUSH1 0xa0
0000111e: SHL
0000111f: SUB
00001120: DUP5
00001121: AND
00001122: PUSH32 0x000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe0110
00001143: DUP5
00001144: PUSH2 0x24b6
00001147: JUMP
00001148: JUMPDEST
00001149: DUP3
0000114a: PUSH1 0x01
0000114c: PUSH1 0x01
0000114e: PUSH1 0xa0
00001150: SHL
00001151: SUB
00001152: AND
00001153: PUSH32 0x3ab165fa63d80ae70966ca9ed739045883dcca32c4573b17c48d8c8d63578835
00001174: DUP4
00001175: PUSH1 0x40
00001177: MLOAD
00001178: PUSH2 0x1183
0000117b: SWAP2
0000117c: DUP2
0000117d: MSTORE
0000117e: PUSH1 0x20
00001180: ADD
00001181: SWAP1
00001182: JUMP
00001183: JUMPDEST
00001184: PUSH1 0x40
00001186: MLOAD
00001187: DUP1
00001188: SWAP2
00001189: SUB
0000118a: SWAP1
0000118b: LOG2
0000118c: POP
0000118d: POP
0000118e: POP
0000118f: JUMP
00001190: JUMPDEST
00001191: PUSH0
00001192: PUSH2 0x0bc7
00001195: PUSH32 0x062030953ce644a2a7115259790ad01d3c2b5e8c98fc6b190da443a3f0a7c900
000011b6: DUP4
000011b7: PUSH2 0x2573
000011ba: JUMP
000011bb: JUMPDEST
000011bc: PUSH2 0x11c3
000011bf: PUSH2 0x15e5
000011c2: JUMP
000011c3: JUMPDEST
000011c4: PUSH1 0x01
000011c6: PUSH1 0x01
000011c8: PUSH1 0xa0
000011ca: SHL
000011cb: SUB
000011cc: AND
000011cd: CALLER
000011ce: PUSH1 0x01
000011d0: PUSH1 0x01
000011d2: PUSH1 0xa0
000011d4: SHL
000011d5: SUB
000011d6: AND
000011d7: EQ
000011d8: PUSH2 0x121d
000011db: JUMPI
000011dc: PUSH1 0x40
000011de: MLOAD
000011df: PUSH4 0xd5efc6bb
000011e4: PUSH1 0xe0
000011e6: SHL
000011e7: DUP2
000011e8: MSTORE
000011e9: PUSH1 0x20
000011eb: PUSH1 0x04
000011ed: DUP3
000011ee: ADD
000011ef: MSTORE
000011f0: PUSH1 0x16
000011f2: PUSH1 0x24
000011f4: DUP3
000011f5: ADD
000011f6: MSTORE
000011f7: PUSH22 0x1b5cd9cb9cd95b99195c88084f481cdd589d985d5b1d
0000120e: PUSH1 0x52
00001210: SHL
00001211: PUSH1 0x44
00001213: DUP3
00001214: ADD
00001215: MSTORE
00001216: PUSH1 0x64
00001218: ADD
00001219: PUSH2 0x08ec
0000121c: JUMP
0000121d: JUMPDEST
0000121e: PUSH2 0x1228
00001221: DUP3
00001222: CALLER
00001223: DUP4
00001224: PUSH2 0x258a
00001227: JUMP
00001228: JUMPDEST
00001229: DUP2
0000122a: PUSH1 0x01
0000122c: PUSH1 0x01
0000122e: PUSH1 0xa0
00001230: SHL
00001231: SUB
00001232: AND
00001233: PUSH32 0x4c56d82314c7ba16ae8b6c8f189249e688d64c23ce4ad32dce3533e7e14b550a
00001254: DUP3
00001255: PUSH1 0x40
00001257: MLOAD
00001258: PUSH2 0x1263
0000125b: SWAP2
0000125c: DUP2
0000125d: MSTORE
0000125e: PUSH1 0x20
00001260: ADD
00001261: SWAP1
00001262: JUMP
00001263: JUMPDEST
00001264: PUSH1 0x40
00001266: MLOAD
00001267: DUP1
00001268: SWAP2
00001269: SUB
0000126a: SWAP1
0000126b: LOG2
0000126c: POP
0000126d: POP
0000126e: JUMP
0000126f: JUMPDEST
00001270: PUSH0
00001271: PUSH2 0x1279
00001274: DUP2
00001275: PUSH2 0x2385
00001278: JUMP
00001279: JUMPDEST
0000127a: PUSH1 0x01
0000127c: PUSH1 0x01
0000127e: PUSH1 0xa0
00001280: SHL
00001281: SUB
00001282: DUP3
00001283: AND
00001284: PUSH2 0x12a0
00001287: JUMPI
00001288: PUSH1 0x40
0000128a: MLOAD
0000128b: PUSH4 0x7c946ed7
00001290: PUSH1 0xe0
00001292: SHL
00001293: DUP2
00001294: MSTORE
00001295: PUSH1 0x04
00001297: ADD
00001298: PUSH1 0x40
0000129a: MLOAD
0000129b: DUP1
0000129c: SWAP2
0000129d: SUB
0000129e: SWAP1
0000129f: REVERT
000012a0: JUMPDEST
000012a1: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
000012c2: PUSH1 0x01
000012c4: ADD
000012c5: DUP1
000012c6: SLOAD
000012c7: PUSH1 0x01
000012c9: PUSH1 0x01
000012cb: PUSH1 0xa0
000012cd: SHL
000012ce: SUB
000012cf: NOT
000012d0: AND
000012d1: PUSH1 0x01
000012d3: PUSH1 0x01
000012d5: PUSH1 0xa0
000012d7: SHL
000012d8: SUB
000012d9: DUP5
000012da: AND
000012db: SWAP1
000012dc: DUP2
000012dd: OR
000012de: SWAP1
000012df: SWAP2
000012e0: SSTORE
000012e1: PUSH1 0x40
000012e3: MLOAD
000012e4: PUSH32 0x3f32684a32a11dabdbb8c0177de80aa3ae36a004d75210335b49e544e48cd0aa
00001305: SWAP1
00001306: PUSH0
00001307: SWAP1
00001308: LOG2
00001309: POP
0000130a: POP
0000130b: JUMP
0000130c: JUMPDEST
0000130d: PUSH2 0x1314
00001310: PUSH2 0x15e5
00001313: JUMP
00001314: JUMPDEST
00001315: PUSH1 0x01
00001317: PUSH1 0x01
00001319: PUSH1 0xa0
0000131b: SHL
0000131c: SUB
0000131d: AND
0000131e: CALLER
0000131f: PUSH1 0x01
00001321: PUSH1 0x01
00001323: PUSH1 0xa0
00001325: SHL
00001326: SUB
00001327: AND
00001328: EQ
00001329: PUSH2 0x136e
0000132c: JUMPI
0000132d: PUSH1 0x40
0000132f: MLOAD
00001330: PUSH4 0xd5efc6bb
00001335: PUSH1 0xe0
00001337: SHL
00001338: DUP2
00001339: MSTORE
0000133a: PUSH1 0x20
0000133c: PUSH1 0x04
0000133e: DUP3
0000133f: ADD
00001340: MSTORE
00001341: PUSH1 0x16
00001343: PUSH1 0x24
00001345: DUP3
00001346: ADD
00001347: MSTORE
00001348: PUSH22 0x1b5cd9cb9cd95b99195c88084f481cdd589d985d5b1d
0000135f: PUSH1 0x52
00001361: SHL
00001362: PUSH1 0x44
00001364: DUP3
00001365: ADD
00001366: MSTORE
00001367: PUSH1 0x64
00001369: ADD
0000136a: PUSH2 0x08ec
0000136d: JUMP
0000136e: JUMPDEST
0000136f: PUSH2 0x1379
00001372: DUP3
00001373: CALLER
00001374: DUP4
00001375: PUSH2 0x25e4
00001378: JUMP
00001379: JUMPDEST
0000137a: DUP2
0000137b: PUSH1 0x01
0000137d: PUSH1 0x01
0000137f: PUSH1 0xa0
00001381: SHL
00001382: SUB
00001383: AND
00001384: PUSH32 0xed89c4acc03daec7926ae32a91e983603182ad723fe3103a929a39475cc05581
000013a5: DUP3
000013a6: PUSH1 0x40
000013a8: MLOAD
000013a9: PUSH2 0x1263
000013ac: SWAP2
000013ad: DUP2
000013ae: MSTORE
000013af: PUSH1 0x20
000013b1: ADD
000013b2: SWAP1
000013b3: JUMP
000013b4: JUMPDEST
000013b5: PUSH0
000013b6: DUP3
000013b7: DUP2
000013b8: MSTORE
000013b9: PUSH0
000013ba: DUP1
000013bb: MLOAD
000013bc: PUSH1 0x20
000013be: PUSH2 0x36ae
000013c1: DUP4
000013c2: CODECOPY
000013c3: DUP2
000013c4: MLOAD
000013c5: SWAP2
000013c6: MSTORE
000013c7: PUSH1 0x20
000013c9: DUP2
000013ca: SWAP1
000013cb: MSTORE
000013cc: PUSH1 0x40
000013ce: DUP3
000013cf: KECCAK256
000013d0: PUSH2 0x13d9
000013d3: SWAP1
000013d4: DUP5
000013d5: PUSH2 0x2627
000013d8: JUMP
000013d9: JUMPDEST
000013da: SWAP5
000013db: SWAP4
000013dc: POP
000013dd: POP
000013de: POP
000013df: POP
000013e0: JUMP
000013e1: JUMPDEST
000013e2: PUSH0
000013e3: DUP1
000013e4: MLOAD
000013e5: PUSH1 0x20
000013e7: PUSH2 0x36ce
000013ea: DUP4
000013eb: CODECOPY
000013ec: DUP2
000013ed: MLOAD
000013ee: SWAP2
000013ef: MSTORE
000013f0: PUSH2 0x13f8
000013f3: DUP2
000013f4: PUSH2 0x2385
000013f7: JUMP
000013f8: JUMPDEST
000013f9: PUSH2 0x1401
000013fc: DUP6
000013fd: PUSH2 0x0888
00001400: JUMP
00001401: JUMPDEST
00001402: PUSH2 0x140d
00001405: DUP6
00001406: DUP6
00001407: DUP6
00001408: DUP6
00001409: PUSH2 0x1972
0000140c: JUMP
0000140d: JUMPDEST
0000140e: PUSH1 0x40
00001410: MLOAD
00001411: PUSH4 0xec6cb13f
00001416: PUSH1 0xe0
00001418: SHL
00001419: DUP2
0000141a: MSTORE
0000141b: PUSH1 0x01
0000141d: PUSH1 0x01
0000141f: PUSH1 0xa0
00001421: SHL
00001422: SUB
00001423: PUSH32 0x0000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41
00001444: AND
00001445: SWAP1
00001446: PUSH4 0xec6cb13f
0000144b: SWAP1
0000144c: PUSH2 0x145e
0000144f: SWAP1
00001450: DUP7
00001451: SWAP1
00001452: DUP7
00001453: SWAP1
00001454: PUSH1 0x01
00001456: SWAP1
00001457: PUSH1 0x04
00001459: ADD
0000145a: PUSH2 0x332b
0000145d: JUMP
0000145e: JUMPDEST
0000145f: PUSH0
00001460: PUSH1 0x40
00001462: MLOAD
00001463: DUP1
00001464: DUP4
00001465: SUB
00001466: DUP2
00001467: PUSH0
00001468: DUP8
00001469: DUP1
0000146a: EXTCODESIZE
0000146b: ISZERO
0000146c: DUP1
0000146d: ISZERO
0000146e: PUSH2 0x1475
00001471: JUMPI
00001472: PUSH0
00001473: DUP1
00001474: REVERT
00001475: JUMPDEST
00001476: POP
00001477: GAS
00001478: CALL
00001479: ISZERO
0000147a: DUP1
0000147b: ISZERO
0000147c: PUSH2 0x1487
0000147f: JUMPI
00001480: RETURNDATASIZE
00001481: PUSH0
00001482: DUP1
00001483: RETURNDATACOPY
00001484: RETURNDATASIZE
00001485: PUSH0
00001486: REVERT
00001487: JUMPDEST
00001488: POP
00001489: POP
0000148a: POP
0000148b: POP
0000148c: PUSH32 0xbadc4749810f6b5532313b0920dd8812deedbb04f42adf83f472c202bfdf776b
000014ad: DUP6
000014ae: DUP5
000014af: DUP5
000014b0: PUSH1 0x40
000014b2: MLOAD
000014b3: PUSH2 0x14be
000014b6: SWAP4
000014b7: SWAP3
000014b8: SWAP2
000014b9: SWAP1
000014ba: PUSH2 0x339c
000014bd: JUMP
000014be: JUMPDEST
000014bf: PUSH1 0x40
000014c1: MLOAD
000014c2: DUP1
000014c3: SWAP2
000014c4: SUB
000014c5: SWAP1
000014c6: LOG1
000014c7: POP
000014c8: POP
000014c9: POP
000014ca: POP
000014cb: POP
000014cc: JUMP
000014cd: JUMPDEST
000014ce: PUSH32 0x32a83f2101a3db03d031fa7d978ba44116bbbd832fcef7908374354ae8de2b38
000014ef: PUSH2 0x14f7
000014f2: DUP2
000014f3: PUSH2 0x2385
000014f6: JUMP
000014f7: JUMPDEST
000014f8: PUSH2 0x1500
000014fb: DUP3
000014fc: PUSH2 0x0cbc
000014ff: JUMP
00001500: JUMPDEST
00001501: DUP2
00001502: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
00001523: PUSH1 0x02
00001525: ADD
00001526: SSTORE
00001527: PUSH1 0x40
00001529: MLOAD
0000152a: DUP3
0000152b: SWAP1
0000152c: PUSH32 0x2997a873aca04517aa548a1e9510fc7ea367f3ed402435343d3d99ee2ec01d80
0000154d: SWAP1
0000154e: PUSH0
0000154f: SWAP1
00001550: LOG2
00001551: POP
00001552: POP
00001553: JUMP
00001554: JUMPDEST
00001555: PUSH0
00001556: SWAP2
00001557: DUP3
00001558: MSTORE
00001559: PUSH0
0000155a: DUP1
0000155b: MLOAD
0000155c: PUSH1 0x20
0000155e: PUSH2 0x36ee
00001561: DUP4
00001562: CODECOPY
00001563: DUP2
00001564: MLOAD
00001565: SWAP2
00001566: MSTORE
00001567: PUSH1 0x20
00001569: SWAP1
0000156a: DUP2
0000156b: MSTORE
0000156c: PUSH1 0x40
0000156e: DUP1
0000156f: DUP5
00001570: KECCAK256
00001571: PUSH1 0x01
00001573: PUSH1 0x01
00001575: PUSH1 0xa0
00001577: SHL
00001578: SUB
00001579: SWAP4
0000157a: SWAP1
0000157b: SWAP4
0000157c: AND
0000157d: DUP5
0000157e: MSTORE
0000157f: SWAP2
00001580: SWAP1
00001581: MSTORE
00001582: SWAP1
00001583: KECCAK256
00001584: SLOAD
00001585: PUSH1 0xff
00001587: AND
00001588: SWAP1
00001589: JUMP
0000158a: JUMPDEST
0000158b: PUSH0
0000158c: PUSH2 0x0bc7
0000158f: PUSH32 0x062030953ce644a2a7115259790ad01d3c2b5e8c98fc6b190da443a3f0a7c900
000015b0: DUP4
000015b1: PUSH2 0x2627
000015b4: JUMP
000015b5: JUMPDEST
000015b6: PUSH0
000015b7: DUP2
000015b8: DUP2
000015b9: MSTORE
000015ba: PUSH0
000015bb: DUP1
000015bc: MLOAD
000015bd: PUSH1 0x20
000015bf: PUSH2 0x36ae
000015c2: DUP4
000015c3: CODECOPY
000015c4: DUP2
000015c5: MLOAD
000015c6: SWAP2
000015c7: MSTORE
000015c8: PUSH1 0x20
000015ca: DUP2
000015cb: SWAP1
000015cc: MSTORE
000015cd: PUSH1 0x40
000015cf: SWAP1
000015d0: SWAP2
000015d1: KECCAK256
000015d2: PUSH1 0x60
000015d4: SWAP2
000015d5: SWAP1
000015d6: PUSH2 0x15de
000015d9: SWAP1
000015da: PUSH2 0x2632
000015dd: JUMP
000015de: JUMPDEST
000015df: SWAP4
000015e0: SWAP3
000015e1: POP
000015e2: POP
000015e3: POP
000015e4: JUMP
000015e5: JUMPDEST
000015e6: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
00001607: SLOAD
00001608: PUSH1 0x01
0000160a: PUSH1 0x01
0000160c: PUSH1 0xa0
0000160e: SHL
0000160f: SUB
00001610: AND
00001611: SWAP1
00001612: JUMP
00001613: JUMPDEST
00001614: PUSH32 0x32a83f2101a3db03d031fa7d978ba44116bbbd832fcef7908374354ae8de2b38
00001635: PUSH2 0x163d
00001638: DUP2
00001639: PUSH2 0x2385
0000163c: JUMP
0000163d: JUMPDEST
0000163e: PUSH2 0x1646
00001641: DUP3
00001642: PUSH2 0x0cbc
00001645: JUMP
00001646: JUMPDEST
00001647: PUSH1 0x01
00001649: PUSH1 0x01
0000164b: PUSH1 0xa0
0000164d: SHL
0000164e: SUB
0000164f: DUP5
00001650: DUP2
00001651: AND
00001652: PUSH0
00001653: DUP2
00001654: DUP2
00001655: MSTORE
00001656: PUSH1 0x03
00001658: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
00001679: ADD
0000167a: PUSH1 0x20
0000167c: SWAP1
0000167d: DUP2
0000167e: MSTORE
0000167f: PUSH1 0x40
00001681: DUP1
00001682: DUP4
00001683: KECCAK256
00001684: SWAP5
00001685: DUP9
00001686: AND
00001687: DUP1
00001688: DUP5
00001689: MSTORE
0000168a: SWAP5
0000168b: SWAP1
0000168c: SWAP2
0000168d: MSTORE
0000168e: DUP1
0000168f: DUP3
00001690: KECCAK256
00001691: DUP7
00001692: SWAP1
00001693: SSTORE
00001694: MLOAD
00001695: DUP6
00001696: SWAP4
00001697: SWAP3
00001698: SWAP2
00001699: PUSH32 0x5ea20a02bb6cfa47321a28b04de1d37a2ff3b52c5e5bac2c041b749ab1066946
000016ba: SWAP2
000016bb: LOG4
000016bc: POP
000016bd: POP
000016be: POP
000016bf: POP
000016c0: JUMP
000016c1: JUMPDEST
000016c2: PUSH0
000016c3: DUP2
000016c4: DUP2
000016c5: MSTORE
000016c6: PUSH0
000016c7: DUP1
000016c8: MLOAD
000016c9: PUSH1 0x20
000016cb: PUSH2 0x36ae
000016ce: DUP4
000016cf: CODECOPY
000016d0: DUP2
000016d1: MLOAD
000016d2: SWAP2
000016d3: MSTORE
000016d4: PUSH1 0x20
000016d6: DUP2
000016d7: SWAP1
000016d8: MSTORE
000016d9: PUSH1 0x40
000016db: DUP3
000016dc: KECCAK256
000016dd: PUSH2 0x15de
000016e0: SWAP1
000016e1: PUSH2 0x2485
000016e4: JUMP
000016e5: JUMPDEST
000016e6: PUSH1 0x60
000016e8: PUSH2 0x16ef
000016eb: PUSH2 0x263e
000016ee: JUMP
000016ef: JUMPDEST
000016f0: PUSH0
000016f1: DUP1
000016f2: MLOAD
000016f3: PUSH1 0x20
000016f5: PUSH2 0x36ce
000016f8: DUP4
000016f9: CODECOPY
000016fa: DUP2
000016fb: MLOAD
000016fc: SWAP2
000016fd: MSTORE
000016fe: PUSH2 0x1706
00001701: DUP2
00001702: PUSH2 0x2385
00001705: JUMP
00001706: JUMPDEST
00001707: PUSH2 0x170f
0000170a: DUP7
0000170b: PUSH2 0x0888
0000170e: JUMP
0000170f: JUMPDEST
00001710: PUSH2 0x1739
00001713: PUSH32 0x59a256c4d42df67b80d5d3fdaf91897a0d929e43a43a5f8e1a88cbd1476e5d90
00001734: DUP7
00001735: PUSH2 0x1554
00001738: JUMP
00001739: JUMPDEST
0000173a: PUSH2 0x176f
0000173d: JUMPI
0000173e: PUSH1 0x40
00001740: MLOAD
00001741: PUSH4 0xd5efc6bb
00001746: PUSH1 0xe0
00001748: SHL
00001749: DUP2
0000174a: MSTORE
0000174b: PUSH1 0x20
0000174d: PUSH1 0x04
0000174f: DUP3
00001750: ADD
00001751: MSTORE
00001752: PUSH1 0x06
00001754: PUSH1 0x24
00001756: DUP3
00001757: ADD
00001758: MSTORE
00001759: PUSH6 0x3937baba32b9
00001760: PUSH1 0xd1
00001762: SHL
00001763: PUSH1 0x44
00001765: DUP3
00001766: ADD
00001767: MSTORE
00001768: PUSH1 0x64
0000176a: ADD
0000176b: PUSH2 0x08ec
0000176e: JUMP
0000176f: JUMPDEST
00001770: PUSH0
00001771: PUSH2 0x1783
00001774: PUSH2 0x0976
00001777: PUSH1 0x40
00001779: DUP10
0000177a: ADD
0000177b: PUSH1 0x20
0000177d: DUP11
0000177e: ADD
0000177f: PUSH2 0x2f08
00001782: JUMP
00001783: JUMPDEST
00001784: SWAP1
00001785: POP
00001786: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
0000179b: PUSH2 0x17a7
0000179e: PUSH1 0x20
000017a0: DUP10
000017a1: ADD
000017a2: DUP10
000017a3: PUSH2 0x2f08
000017a6: JUMP
000017a7: JUMPDEST
000017a8: PUSH1 0x01
000017aa: PUSH1 0x01
000017ac: PUSH1 0xa0
000017ae: SHL
000017af: SUB
000017b0: AND
000017b1: EQ
000017b2: PUSH2 0x1833
000017b5: JUMPI
000017b6: PUSH2 0x17db
000017b9: DUP7
000017ba: PUSH1 0x40
000017bc: DUP10
000017bd: ADD
000017be: CALLDATALOAD
000017bf: PUSH2 0x17cb
000017c2: PUSH1 0x20
000017c4: DUP12
000017c5: ADD
000017c6: DUP12
000017c7: PUSH2 0x2f08
000017ca: JUMP
000017cb: JUMPDEST
000017cc: PUSH1 0x01
000017ce: PUSH1 0x01
000017d0: PUSH1 0xa0
000017d2: SHL
000017d3: SUB
000017d4: AND
000017d5: SWAP2
000017d6: SWAP1
000017d7: PUSH2 0x24b6
000017da: JUMP
000017db: JUMPDEST
000017dc: PUSH2 0x181a
000017df: DUP7
000017e0: DUP7
000017e1: DUP7
000017e2: DUP1
000017e3: DUP1
000017e4: PUSH1 0x1f
000017e6: ADD
000017e7: PUSH1 0x20
000017e9: DUP1
000017ea: SWAP2
000017eb: DIV
000017ec: MUL
000017ed: PUSH1 0x20
000017ef: ADD
000017f0: PUSH1 0x40
000017f2: MLOAD
000017f3: SWAP1
000017f4: DUP2
000017f5: ADD
000017f6: PUSH1 0x40
000017f8: MSTORE
000017f9: DUP1
000017fa: SWAP4
000017fb: SWAP3
000017fc: SWAP2
000017fd: SWAP1
000017fe: DUP2
000017ff: DUP2
00001800: MSTORE
00001801: PUSH1 0x20
00001803: ADD
00001804: DUP4
00001805: DUP4
00001806: DUP1
00001807: DUP3
00001808: DUP5
00001809: CALLDATACOPY
0000180a: PUSH0
0000180b: SWAP3
0000180c: ADD
0000180d: SWAP2
0000180e: SWAP1
0000180f: SWAP2
00001810: MSTORE
00001811: POP
00001812: PUSH2 0x2688
00001815: SWAP3
00001816: POP
00001817: POP
00001818: POP
00001819: JUMP
0000181a: JUMPDEST
0000181b: SWAP3
0000181c: POP
0000181d: PUSH2 0x182e
00001820: DUP7
00001821: PUSH0
00001822: PUSH2 0x17cb
00001825: PUSH1 0x20
00001827: DUP12
00001828: ADD
00001829: DUP12
0000182a: PUSH2 0x2f08
0000182d: JUMP
0000182e: JUMPDEST
0000182f: PUSH2 0x1879
00001832: JUMP
00001833: JUMPDEST
00001834: PUSH2 0x1876
00001837: DUP7
00001838: DUP7
00001839: DUP7
0000183a: DUP1
0000183b: DUP1
0000183c: PUSH1 0x1f
0000183e: ADD
0000183f: PUSH1 0x20
00001841: DUP1
00001842: SWAP2
00001843: DIV
00001844: MUL
00001845: PUSH1 0x20
00001847: ADD
00001848: PUSH1 0x40
0000184a: MLOAD
0000184b: SWAP1
0000184c: DUP2
0000184d: ADD
0000184e: PUSH1 0x40
00001850: MSTORE
00001851: DUP1
00001852: SWAP4
00001853: SWAP3
00001854: SWAP2
00001855: SWAP1
00001856: DUP2
00001857: DUP2
00001858: MSTORE
00001859: PUSH1 0x20
0000185b: ADD
0000185c: DUP4
0000185d: DUP4
0000185e: DUP1
0000185f: DUP3
00001860: DUP5
00001861: CALLDATACOPY
00001862: PUSH0
00001863: SWAP3
00001864: ADD
00001865: SWAP2
00001866: SWAP1
00001867: SWAP2
00001868: MSTORE
00001869: POP
0000186a: POP
0000186b: POP
0000186c: POP
0000186d: PUSH1 0x40
0000186f: DUP11
00001870: ADD
00001871: CALLDATALOAD
00001872: PUSH2 0x2691
00001875: JUMP
00001876: JUMPDEST
00001877: SWAP3
00001878: POP
00001879: JUMPDEST
0000187a: PUSH0
0000187b: DUP2
0000187c: PUSH2 0x188e
0000187f: PUSH2 0x0976
00001882: PUSH1 0x40
00001884: DUP12
00001885: ADD
00001886: PUSH1 0x20
00001888: DUP13
00001889: ADD
0000188a: PUSH2 0x2f08
0000188d: JUMP
0000188e: JUMPDEST
0000188f: PUSH2 0x1898
00001892: SWAP2
00001893: SWAP1
00001894: PUSH2 0x33d9
00001897: JUMP
00001898: JUMPDEST
00001899: SWAP1
0000189a: POP
0000189b: DUP8
0000189c: PUSH1 0x60
0000189e: ADD
0000189f: CALLDATALOAD
000018a0: DUP2
000018a1: LT
000018a2: ISZERO
000018a3: PUSH2 0x18ef
000018a6: JUMPI
000018a7: PUSH1 0x40
000018a9: MLOAD
000018aa: PUSH4 0xd5efc6bb
000018af: PUSH1 0xe0
000018b1: SHL
000018b2: DUP2
000018b3: MSTORE
000018b4: PUSH1 0x20
000018b6: PUSH1 0x04
000018b8: DUP3
000018b9: ADD
000018ba: MSTORE
000018bb: PUSH1 0x18
000018bd: PUSH1 0x24
000018bf: DUP3
000018c0: ADD
000018c1: MSTORE
000018c2: PUSH32 0x616d6f756e744f7574203c206d696e416d6f756e744f75740000000000000000
000018e3: PUSH1 0x44
000018e5: DUP3
000018e6: ADD
000018e7: MSTORE
000018e8: PUSH1 0x64
000018ea: ADD
000018eb: PUSH2 0x08ec
000018ee: JUMP
000018ef: JUMPDEST
000018f0: PUSH32 0xfeed6b2fb656525ae8e13aa421310ffe163eeb86c2f81141d799f300f6393858
00001911: DUP9
00001912: DUP9
00001913: DUP4
00001914: PUSH1 0x40
00001916: MLOAD
00001917: PUSH2 0x1922
0000191a: SWAP4
0000191b: SWAP3
0000191c: SWAP2
0000191d: SWAP1
0000191e: PUSH2 0x33ec
00001921: JUMP
00001922: JUMPDEST
00001923: PUSH1 0x40
00001925: MLOAD
00001926: DUP1
00001927: SWAP2
00001928: SUB
00001929: SWAP1
0000192a: LOG1
0000192b: POP
0000192c: POP
0000192d: POP
0000192e: PUSH2 0x13d9
00001931: PUSH1 0x01
00001933: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00
00001954: SSTORE
00001955: JUMP
00001956: JUMPDEST
00001957: PUSH2 0x195f
0000195a: DUP3
0000195b: PUSH2 0x0c9c
0000195e: JUMP
0000195f: JUMPDEST
00001960: PUSH2 0x1968
00001963: DUP2
00001964: PUSH2 0x2385
00001967: JUMP
00001968: JUMPDEST
00001969: PUSH2 0x0b9d
0000196c: DUP4
0000196d: DUP4
0000196e: PUSH2 0x2409
00001971: JUMP
00001972: JUMPDEST
00001973: PUSH2 0x197f
00001976: PUSH1 0x20
00001978: DUP5
00001979: ADD
0000197a: DUP5
0000197b: PUSH2 0x2f08
0000197e: JUMP
0000197f: JUMPDEST
00001980: PUSH1 0x01
00001982: PUSH1 0x01
00001984: PUSH1 0xa0
00001986: SHL
00001987: SUB
00001988: AND
00001989: PUSH2 0x1995
0000198c: PUSH1 0x20
0000198e: DUP7
0000198f: ADD
00001990: DUP7
00001991: PUSH2 0x2f08
00001994: JUMP
00001995: JUMPDEST
00001996: PUSH1 0x01
00001998: PUSH1 0x01
0000199a: PUSH1 0xa0
0000199c: SHL
0000199d: SUB
0000199e: AND
0000199f: EQ
000019a0: ISZERO
000019a1: DUP1
000019a2: PUSH2 0x19d3
000019a5: JUMPI
000019a6: POP
000019a7: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
000019bc: PUSH2 0x19c8
000019bf: PUSH1 0x20
000019c1: DUP7
000019c2: ADD
000019c3: DUP7
000019c4: PUSH2 0x2f08
000019c7: JUMP
000019c8: JUMPDEST
000019c9: PUSH1 0x01
000019cb: PUSH1 0x01
000019cd: PUSH1 0xa0
000019cf: SHL
000019d0: SUB
000019d1: AND
000019d2: EQ
000019d3: JUMPDEST
000019d4: ISZERO
000019d5: PUSH2 0x1a0d
000019d8: JUMPI
000019d9: PUSH1 0x40
000019db: MLOAD
000019dc: PUSH4 0xd5efc6bb
000019e1: PUSH1 0xe0
000019e3: SHL
000019e4: DUP2
000019e5: MSTORE
000019e6: PUSH1 0x20
000019e8: PUSH1 0x04
000019ea: DUP3
000019eb: ADD
000019ec: MSTORE
000019ed: PUSH1 0x09
000019ef: PUSH1 0x24
000019f1: DUP3
000019f2: ADD
000019f3: MSTORE
000019f4: PUSH9 0x39b2b6362a37b5b2b7
000019fe: PUSH1 0xb9
00001a00: SHL
00001a01: PUSH1 0x44
00001a03: DUP3
00001a04: ADD
00001a05: MSTORE
00001a06: PUSH1 0x64
00001a08: ADD
00001a09: PUSH2 0x08ec
00001a0c: JUMP
00001a0d: JUMPDEST
00001a0e: PUSH2 0x1a1d
00001a11: PUSH1 0x40
00001a13: DUP5
00001a14: ADD
00001a15: PUSH1 0x20
00001a17: DUP6
00001a18: ADD
00001a19: PUSH2 0x2f08
00001a1c: JUMP
00001a1d: JUMPDEST
00001a1e: PUSH1 0x01
00001a20: PUSH1 0x01
00001a22: PUSH1 0xa0
00001a24: SHL
00001a25: SUB
00001a26: AND
00001a27: PUSH2 0x1a36
00001a2a: PUSH1 0x40
00001a2c: DUP7
00001a2d: ADD
00001a2e: PUSH1 0x20
00001a30: DUP8
00001a31: ADD
00001a32: PUSH2 0x2f08
00001a35: JUMP
00001a36: JUMPDEST
00001a37: PUSH1 0x01
00001a39: PUSH1 0x01
00001a3b: PUSH1 0xa0
00001a3d: SHL
00001a3e: SUB
00001a3f: AND
00001a40: EQ
00001a41: ISZERO
00001a42: DUP1
00001a43: PUSH2 0x1a77
00001a46: JUMPI
00001a47: POP
00001a48: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
00001a5d: PUSH2 0x1a6c
00001a60: PUSH1 0x40
00001a62: DUP7
00001a63: ADD
00001a64: PUSH1 0x20
00001a66: DUP8
00001a67: ADD
00001a68: PUSH2 0x2f08
00001a6b: JUMP
00001a6c: JUMPDEST
00001a6d: PUSH1 0x01
00001a6f: PUSH1 0x01
00001a71: PUSH1 0xa0
00001a73: SHL
00001a74: SUB
00001a75: AND
00001a76: EQ
00001a77: JUMPDEST
00001a78: ISZERO
00001a79: PUSH2 0x1ab0
00001a7c: JUMPI
00001a7d: PUSH1 0x40
00001a7f: MLOAD
00001a80: PUSH4 0xd5efc6bb
00001a85: PUSH1 0xe0
00001a87: SHL
00001a88: DUP2
00001a89: MSTORE
00001a8a: PUSH1 0x20
00001a8c: PUSH1 0x04
00001a8e: DUP3
00001a8f: ADD
00001a90: MSTORE
00001a91: PUSH1 0x08
00001a93: PUSH1 0x24
00001a95: DUP3
00001a96: ADD
00001a97: MSTORE
00001a98: PUSH8 0x313abcaa37b5b2b7
00001aa1: PUSH1 0xc1
00001aa3: SHL
00001aa4: PUSH1 0x44
00001aa6: DUP3
00001aa7: ADD
00001aa8: MSTORE
00001aa9: PUSH1 0x64
00001aab: ADD
00001aac: PUSH2 0x08ec
00001aaf: JUMP
00001ab0: JUMPDEST
00001ab1: PUSH2 0x1ac0
00001ab4: PUSH1 0x60
00001ab6: DUP5
00001ab7: ADD
00001ab8: PUSH1 0x40
00001aba: DUP6
00001abb: ADD
00001abc: PUSH2 0x2f08
00001abf: JUMP
00001ac0: JUMPDEST
00001ac1: PUSH1 0x01
00001ac3: PUSH1 0x01
00001ac5: PUSH1 0xa0
00001ac7: SHL
00001ac8: SUB
00001ac9: AND
00001aca: ADDRESS
00001acb: PUSH1 0x01
00001acd: PUSH1 0x01
00001acf: PUSH1 0xa0
00001ad1: SHL
00001ad2: SUB
00001ad3: AND
00001ad4: EQ
00001ad5: PUSH2 0x1b0c
00001ad8: JUMPI
00001ad9: PUSH1 0x40
00001adb: MLOAD
00001adc: PUSH4 0xd5efc6bb
00001ae1: PUSH1 0xe0
00001ae3: SHL
00001ae4: DUP2
00001ae5: MSTORE
00001ae6: PUSH1 0x20
00001ae8: PUSH1 0x04
00001aea: DUP3
00001aeb: ADD
00001aec: MSTORE
00001aed: PUSH1 0x08
00001aef: PUSH1 0x24
00001af1: DUP3
00001af2: ADD
00001af3: MSTORE
00001af4: PUSH8 0x3932b1b2b4bb32b9
00001afd: PUSH1 0xc1
00001aff: SHL
00001b00: PUSH1 0x44
00001b02: DUP3
00001b03: ADD
00001b04: MSTORE
00001b05: PUSH1 0x64
00001b07: ADD
00001b08: PUSH2 0x08ec
00001b0b: JUMP
00001b0c: JUMPDEST
00001b0d: DUP3
00001b0e: PUSH1 0x60
00001b10: ADD
00001b11: CALLDATALOAD
00001b12: DUP5
00001b13: PUSH1 0x40
00001b15: ADD
00001b16: CALLDATALOAD
00001b17: EQ
00001b18: PUSH2 0x1b5d
00001b1b: JUMPI
00001b1c: PUSH1 0x40
00001b1e: MLOAD
00001b1f: PUSH4 0xd5efc6bb
00001b24: PUSH1 0xe0
00001b26: SHL
00001b27: DUP2
00001b28: MSTORE
00001b29: PUSH1 0x20
00001b2b: PUSH1 0x04
00001b2d: DUP3
00001b2e: ADD
00001b2f: MSTORE
00001b30: PUSH1 0x16
00001b32: PUSH1 0x24
00001b34: DUP3
00001b35: ADD
00001b36: MSTORE
00001b37: PUSH22 0x185b5bdd5b9d125b88084f481cd95b1b105b5bdd5b9d
00001b4e: PUSH1 0x52
00001b50: SHL
00001b51: PUSH1 0x44
00001b53: DUP3
00001b54: ADD
00001b55: MSTORE
00001b56: PUSH1 0x64
00001b58: ADD
00001b59: PUSH2 0x08ec
00001b5c: JUMP
00001b5d: JUMPDEST
00001b5e: DUP3
00001b5f: PUSH1 0x80
00001b61: ADD
00001b62: CALLDATALOAD
00001b63: DUP5
00001b64: PUSH1 0x60
00001b66: ADD
00001b67: CALLDATALOAD
00001b68: EQ
00001b69: PUSH2 0x1bb5
00001b6c: JUMPI
00001b6d: PUSH1 0x40
00001b6f: MLOAD
00001b70: PUSH4 0xd5efc6bb
00001b75: PUSH1 0xe0
00001b77: SHL
00001b78: DUP2
00001b79: MSTORE
00001b7a: PUSH1 0x20
00001b7c: PUSH1 0x04
00001b7e: DUP3
00001b7f: ADD
00001b80: MSTORE
00001b81: PUSH1 0x19
00001b83: PUSH1 0x24
00001b85: DUP3
00001b86: ADD
00001b87: MSTORE
00001b88: PUSH32 0x6d696e416d6f756e744f757420213d20627579416d6f756e7400000000000000
00001ba9: PUSH1 0x44
00001bab: DUP3
00001bac: ADD
00001bad: MSTORE
00001bae: PUSH1 0x64
00001bb0: ADD
00001bb1: PUSH2 0x08ec
00001bb4: JUMP
00001bb5: JUMPDEST
00001bb6: PUSH2 0x1bc5
00001bb9: PUSH1 0xc0
00001bbb: DUP5
00001bbc: ADD
00001bbd: PUSH1 0xa0
00001bbf: DUP6
00001bc0: ADD
00001bc1: PUSH2 0x3427
00001bc4: JUMP
00001bc5: JUMPDEST
00001bc6: PUSH4 0xffffffff
00001bcb: AND
00001bcc: DUP5
00001bcd: PUSH1 0x80
00001bcf: ADD
00001bd0: CALLDATALOAD
00001bd1: EQ
00001bd2: PUSH2 0x1c14
00001bd5: JUMPI
00001bd6: PUSH1 0x40
00001bd8: MLOAD
00001bd9: PUSH4 0xd5efc6bb
00001bde: PUSH1 0xe0
00001be0: SHL
00001be1: DUP2
00001be2: MSTORE
00001be3: PUSH1 0x20
00001be5: PUSH1 0x04
00001be7: DUP3
00001be8: ADD
00001be9: MSTORE
00001bea: PUSH1 0x13
00001bec: PUSH1 0x24
00001bee: DUP3
00001bef: ADD
00001bf0: MSTORE
00001bf1: PUSH19 0x646561646c696e6520213d2076616c6964546f
00001c05: PUSH1 0x68
00001c07: SHL
00001c08: PUSH1 0x44
00001c0a: DUP3
00001c0b: ADD
00001c0c: MSTORE
00001c0d: PUSH1 0x64
00001c0f: ADD
00001c10: PUSH2 0x08ec
00001c13: JUMP
00001c14: JUMPDEST
00001c15: PUSH32 0xf3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775
00001c36: DUP4
00001c37: PUSH2 0x0100
00001c3a: ADD
00001c3b: CALLDATALOAD
00001c3c: EQ
00001c3d: PUSH2 0x1c7d
00001c40: JUMPI
00001c41: PUSH1 0x40
00001c43: MLOAD
00001c44: PUSH4 0xd5efc6bb
00001c49: PUSH1 0xe0
00001c4b: SHL
00001c4c: DUP2
00001c4d: MSTORE
00001c4e: PUSH1 0x20
00001c50: PUSH1 0x04
00001c52: DUP3
00001c53: ADD
00001c54: MSTORE
00001c55: PUSH1 0x11
00001c57: PUSH1 0x24
00001c59: DUP3
00001c5a: ADD
00001c5b: MSTORE
00001c5c: PUSH17 0x1ada5b9908084f4812d2539117d4d15313
00001c6e: PUSH1 0x7a
00001c70: SHL
00001c71: PUSH1 0x44
00001c73: DUP3
00001c74: ADD
00001c75: MSTORE
00001c76: PUSH1 0x64
00001c78: ADD
00001c79: PUSH2 0x08ec
00001c7c: JUMP
00001c7d: JUMPDEST
00001c7e: PUSH32 0x5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9
00001c9f: DUP4
00001ca0: PUSH2 0x0140
00001ca3: ADD
00001ca4: CALLDATALOAD
00001ca5: EQ
00001ca6: PUSH2 0x1cfc
00001ca9: JUMPI
00001caa: PUSH1 0x40
00001cac: MLOAD
00001cad: PUSH4 0xd5efc6bb
00001cb2: PUSH1 0xe0
00001cb4: SHL
00001cb5: DUP2
00001cb6: MSTORE
00001cb7: PUSH1 0x20
00001cb9: PUSH1 0x04
00001cbb: DUP3
00001cbc: ADD
00001cbd: MSTORE
00001cbe: PUSH1 0x21
00001cc0: PUSH1 0x24
00001cc2: DUP3
00001cc3: ADD
00001cc4: MSTORE
00001cc5: PUSH32 0x73656c6c546f6b656e42616c616e636520213d2042414c414e43455f45524332
00001ce6: PUSH1 0x44
00001ce8: DUP3
00001ce9: ADD
00001cea: MSTORE
00001ceb: PUSH1 0x03
00001ced: PUSH1 0xfc
00001cef: SHL
00001cf0: PUSH1 0x64
00001cf2: DUP3
00001cf3: ADD
00001cf4: MSTORE
00001cf5: PUSH1 0x84
00001cf7: ADD
00001cf8: PUSH2 0x08ec
00001cfb: JUMP
00001cfc: JUMPDEST
00001cfd: PUSH32 0x5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9
00001d1e: DUP4
00001d1f: PUSH2 0x0160
00001d22: ADD
00001d23: CALLDATALOAD
00001d24: EQ
00001d25: PUSH2 0x1d71
00001d28: JUMPI
00001d29: PUSH1 0x40
00001d2b: MLOAD
00001d2c: PUSH4 0xd5efc6bb
00001d31: PUSH1 0xe0
00001d33: SHL
00001d34: DUP2
00001d35: MSTORE
00001d36: PUSH1 0x20
00001d38: PUSH1 0x04
00001d3a: DUP3
00001d3b: ADD
00001d3c: DUP2
00001d3d: SWAP1
00001d3e: MSTORE
00001d3f: PUSH1 0x24
00001d41: DUP3
00001d42: ADD
00001d43: MSTORE
00001d44: PUSH32 0x627579546f6b656e42616c616e636520213d2042414c414e43455f4552433230
00001d65: PUSH1 0x44
00001d67: DUP3
00001d68: ADD
00001d69: MSTORE
00001d6a: PUSH1 0x64
00001d6c: ADD
00001d6d: PUSH2 0x08ec
00001d70: JUMP
00001d71: JUMPDEST
00001d72: PUSH1 0x40
00001d74: DUP1
00001d75: MLOAD
00001d76: PUSH1 0x38
00001d78: DUP1
00001d79: DUP3
00001d7a: MSTORE
00001d7b: PUSH1 0x60
00001d7d: DUP3
00001d7e: ADD
00001d7f: SWAP1
00001d80: SWAP3
00001d81: MSTORE
00001d82: PUSH0
00001d83: SWAP2
00001d84: PUSH1 0x20
00001d86: DUP3
00001d87: ADD
00001d88: DUP2
00001d89: DUP1
00001d8a: CALLDATASIZE
00001d8b: DUP4
00001d8c: CALLDATACOPY
00001d8d: ADD
00001d8e: SWAP1
00001d8f: POP
00001d90: POP
00001d91: SWAP1
00001d92: POP
00001d93: PUSH2 0x1e8f
00001d96: DUP2
00001d97: PUSH2 0x1e79
00001d9a: PUSH2 0x1da8
00001d9d: CALLDATASIZE
00001d9e: DUP9
00001d9f: SWAP1
00001da0: SUB
00001da1: DUP9
00001da2: ADD
00001da3: DUP9
00001da4: PUSH2 0x344f
00001da7: JUMP
00001da8: JUMPDEST
00001da9: PUSH32 0x0000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41
00001dca: PUSH1 0x01
00001dcc: PUSH1 0x01
00001dce: PUSH1 0xa0
00001dd0: SHL
00001dd1: SUB
00001dd2: AND
00001dd3: PUSH4 0xf698da25
00001dd8: PUSH1 0x40
00001dda: MLOAD
00001ddb: DUP2
00001ddc: PUSH4 0xffffffff
00001de1: AND
00001de2: PUSH1 0xe0
00001de4: SHL
00001de5: DUP2
00001de6: MSTORE
00001de7: PUSH1 0x04
00001de9: ADD
00001dea: PUSH1 0x20
00001dec: PUSH1 0x40
00001dee: MLOAD
00001def: DUP1
00001df0: DUP4
00001df1: SUB
00001df2: DUP2
00001df3: DUP7
00001df4: GAS
00001df5: STATICCALL
00001df6: ISZERO
00001df7: DUP1
00001df8: ISZERO
00001df9: PUSH2 0x1e04
00001dfc: JUMPI
00001dfd: RETURNDATASIZE
00001dfe: PUSH0
00001dff: DUP1
00001e00: RETURNDATACOPY
00001e01: RETURNDATASIZE
00001e02: PUSH0
00001e03: REVERT
00001e04: JUMPDEST
00001e05: POP
00001e06: POP
00001e07: POP
00001e08: POP
00001e09: PUSH1 0x40
00001e0b: MLOAD
00001e0c: RETURNDATASIZE
00001e0d: PUSH1 0x1f
00001e0f: NOT
00001e10: PUSH1 0x1f
00001e12: DUP3
00001e13: ADD
00001e14: AND
00001e15: DUP3
00001e16: ADD
00001e17: DUP1
00001e18: PUSH1 0x40
00001e1a: MSTORE
00001e1b: POP
00001e1c: DUP2
00001e1d: ADD
00001e1e: SWAP1
00001e1f: PUSH2 0x1e28
00001e22: SWAP2
00001e23: SWAP1
00001e24: PUSH2 0x350b
00001e27: JUMP
00001e28: JUMPDEST
00001e29: PUSH1 0x1f
00001e2b: NOT
00001e2c: SWAP1
00001e2d: SWAP2
00001e2e: ADD
00001e2f: DUP1
00001e30: MLOAD
00001e31: PUSH32 0xd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e489
00001e52: DUP3
00001e53: MSTORE
00001e54: PUSH2 0x01a0
00001e57: DUP3
00001e58: KECCAK256
00001e59: SWAP2
00001e5a: MSTORE
00001e5b: PUSH1 0x40
00001e5d: MLOAD
00001e5e: PUSH2 0x1901
00001e61: PUSH1 0xf0
00001e63: SHL
00001e64: DUP2
00001e65: MSTORE
00001e66: PUSH1 0x02
00001e68: DUP2
00001e69: ADD
00001e6a: SWAP3
00001e6b: SWAP1
00001e6c: SWAP3
00001e6d: MSTORE
00001e6e: PUSH1 0x22
00001e70: DUP3
00001e71: ADD
00001e72: MSTORE
00001e73: PUSH1 0x42
00001e75: SWAP1
00001e76: KECCAK256
00001e77: SWAP1
00001e78: JUMP
00001e79: JUMPDEST
00001e7a: ADDRESS
00001e7b: PUSH2 0x1e8a
00001e7e: PUSH1 0xc0
00001e80: DUP10
00001e81: ADD
00001e82: PUSH1 0xa0
00001e84: DUP11
00001e85: ADD
00001e86: PUSH2 0x3427
00001e89: JUMP
00001e8a: JUMPDEST
00001e8b: PUSH2 0x2731
00001e8e: JUMP
00001e8f: JUMPDEST
00001e90: DUP1
00001e91: MLOAD
00001e92: PUSH1 0x20
00001e94: DUP3
00001e95: ADD
00001e96: KECCAK256
00001e97: PUSH1 0x40
00001e99: MLOAD
00001e9a: PUSH2 0x1ea6
00001e9d: SWAP1
00001e9e: DUP6
00001e9f: SWAP1
00001ea0: DUP6
00001ea1: SWAP1
00001ea2: PUSH2 0x3522
00001ea5: JUMP
00001ea6: JUMPDEST
00001ea7: PUSH1 0x40
00001ea9: MLOAD
00001eaa: DUP1
00001eab: SWAP2
00001eac: SUB
00001ead: SWAP1
00001eae: KECCAK256
00001eaf: EQ
00001eb0: PUSH2 0x1efc
00001eb3: JUMPI
00001eb4: PUSH1 0x40
00001eb6: MLOAD
00001eb7: PUSH4 0xd5efc6bb
00001ebc: PUSH1 0xe0
00001ebe: SHL
00001ebf: DUP2
00001ec0: MSTORE
00001ec1: PUSH1 0x20
00001ec3: PUSH1 0x04
00001ec5: DUP3
00001ec6: ADD
00001ec7: MSTORE
00001ec8: PUSH1 0x1e
00001eca: PUSH1 0x24
00001ecc: DUP3
00001ecd: ADD
00001ece: MSTORE
00001ecf: PUSH32 0x6f7264657255696420213d2063616c63756c617465644f726465725569640000
00001ef0: PUSH1 0x44
00001ef2: DUP3
00001ef3: ADD
00001ef4: MSTORE
00001ef5: PUSH1 0x64
00001ef7: ADD
00001ef8: PUSH2 0x08ec
00001efb: JUMP
00001efc: JUMPDEST
00001efd: POP
00001efe: POP
00001eff: POP
00001f00: POP
00001f01: POP
00001f02: JUMP
00001f03: JUMPDEST
00001f04: PUSH0
00001f05: PUSH1 0x01
00001f07: PUSH1 0x01
00001f09: PUSH1 0xa0
00001f0b: SHL
00001f0c: SUB
00001f0d: DUP5
00001f0e: AND
00001f0f: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
00001f24: EQ
00001f25: PUSH2 0x1f2e
00001f28: JUMPI
00001f29: DUP4
00001f2a: PUSH2 0x1f50
00001f2d: JUMP
00001f2e: JUMPDEST
00001f2f: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001f50: JUMPDEST
00001f51: SWAP4
00001f52: POP
00001f53: PUSH1 0x01
00001f55: PUSH1 0x01
00001f57: PUSH1 0xa0
00001f59: SHL
00001f5a: SUB
00001f5b: DUP4
00001f5c: AND
00001f5d: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
00001f72: EQ
00001f73: PUSH2 0x1f7c
00001f76: JUMPI
00001f77: DUP3
00001f78: PUSH2 0x1f9e
00001f7b: JUMP
00001f7c: JUMPDEST
00001f7d: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001f9e: JUMPDEST
00001f9f: SWAP3
00001fa0: POP
00001fa1: PUSH0
00001fa2: DUP5
00001fa3: PUSH1 0x01
00001fa5: PUSH1 0x01
00001fa7: PUSH1 0xa0
00001fa9: SHL
00001faa: SUB
00001fab: AND
00001fac: PUSH4 0x313ce567
00001fb1: PUSH1 0x40
00001fb3: MLOAD
00001fb4: DUP2
00001fb5: PUSH4 0xffffffff
00001fba: AND
00001fbb: PUSH1 0xe0
00001fbd: SHL
00001fbe: DUP2
00001fbf: MSTORE
00001fc0: PUSH1 0x04
00001fc2: ADD
00001fc3: PUSH1 0x20
00001fc5: PUSH1 0x40
00001fc7: MLOAD
00001fc8: DUP1
00001fc9: DUP4
00001fca: SUB
00001fcb: DUP2
00001fcc: DUP7
00001fcd: GAS
00001fce: STATICCALL
00001fcf: ISZERO
00001fd0: DUP1
00001fd1: ISZERO
00001fd2: PUSH2 0x1fdd
00001fd5: JUMPI
00001fd6: RETURNDATASIZE
00001fd7: PUSH0
00001fd8: DUP1
00001fd9: RETURNDATACOPY
00001fda: RETURNDATASIZE
00001fdb: PUSH0
00001fdc: REVERT
00001fdd: JUMPDEST
00001fde: POP
00001fdf: POP
00001fe0: POP
00001fe1: POP
00001fe2: PUSH1 0x40
00001fe4: MLOAD
00001fe5: RETURNDATASIZE
00001fe6: PUSH1 0x1f
00001fe8: NOT
00001fe9: PUSH1 0x1f
00001feb: DUP3
00001fec: ADD
00001fed: AND
00001fee: DUP3
00001fef: ADD
00001ff0: DUP1
00001ff1: PUSH1 0x40
00001ff3: MSTORE
00001ff4: POP
00001ff5: DUP2
00001ff6: ADD
00001ff7: SWAP1
00001ff8: PUSH2 0x2001
00001ffb: SWAP2
00001ffc: SWAP1
00001ffd: PUSH2 0x3531
00002000: JUMP
00002001: JUMPDEST
00002002: SWAP1
00002003: POP
00002004: PUSH0
00002005: DUP5
00002006: PUSH1 0x01
00002008: PUSH1 0x01
0000200a: PUSH1 0xa0
0000200c: SHL
0000200d: SUB
0000200e: AND
0000200f: PUSH4 0x313ce567
00002014: PUSH1 0x40
00002016: MLOAD
00002017: DUP2
00002018: PUSH4 0xffffffff
0000201d: AND
0000201e: PUSH1 0xe0
00002020: SHL
00002021: DUP2
00002022: MSTORE
00002023: PUSH1 0x04
00002025: ADD
00002026: PUSH1 0x20
00002028: PUSH1 0x40
0000202a: MLOAD
0000202b: DUP1
0000202c: DUP4
0000202d: SUB
0000202e: DUP2
0000202f: DUP7
00002030: GAS
00002031: STATICCALL
00002032: ISZERO
00002033: DUP1
00002034: ISZERO
00002035: PUSH2 0x2040
00002038: JUMPI
00002039: RETURNDATASIZE
0000203a: PUSH0
0000203b: DUP1
0000203c: RETURNDATACOPY
0000203d: RETURNDATASIZE
0000203e: PUSH0
0000203f: REVERT
00002040: JUMPDEST
00002041: POP
00002042: POP
00002043: POP
00002044: POP
00002045: PUSH1 0x40
00002047: MLOAD
00002048: RETURNDATASIZE
00002049: PUSH1 0x1f
0000204b: NOT
0000204c: PUSH1 0x1f
0000204e: DUP3
0000204f: ADD
00002050: AND
00002051: DUP3
00002052: ADD
00002053: DUP1
00002054: PUSH1 0x40
00002056: MSTORE
00002057: POP
00002058: DUP2
00002059: ADD
0000205a: SWAP1
0000205b: PUSH2 0x2064
0000205e: SWAP2
0000205f: SWAP1
00002060: PUSH2 0x3531
00002063: JUMP
00002064: JUMPDEST
00002065: SWAP1
00002066: POP
00002067: PUSH0
00002068: PUSH2 0x209b
0000206b: PUSH1 0x01
0000206d: PUSH32 0x275a5493182a3abf69f6f3cc73ffd59f2fced19807d36bac2db251b070f37a00
0000208e: ADD
0000208f: SLOAD
00002090: PUSH1 0x01
00002092: PUSH1 0x01
00002094: PUSH1 0xa0
00002096: SHL
00002097: SUB
00002098: AND
00002099: SWAP1
0000209a: JUMP
0000209b: JUMPDEST
0000209c: PUSH1 0x40
0000209e: MLOAD
0000209f: PUSH4 0xb3596f07
000020a4: PUSH1 0xe0
000020a6: SHL
000020a7: DUP2
000020a8: MSTORE
000020a9: PUSH1 0x01
000020ab: PUSH1 0x01
000020ad: PUSH1 0xa0
000020af: SHL
000020b0: SUB
000020b1: DUP10
000020b2: DUP2
000020b3: AND
000020b4: PUSH1 0x04
000020b6: DUP4
000020b7: ADD
000020b8: MSTORE
000020b9: SWAP2
000020ba: SWAP3
000020bb: POP
000020bc: PUSH0
000020bd: SWAP2
000020be: DUP4
000020bf: AND
000020c0: SWAP1
000020c1: PUSH4 0xb3596f07
000020c6: SWAP1
000020c7: PUSH1 0x24
000020c9: ADD
000020ca: PUSH1 0x20
000020cc: PUSH1 0x40
000020ce: MLOAD
000020cf: DUP1
000020d0: DUP4
000020d1: SUB
000020d2: DUP2
000020d3: DUP7
000020d4: GAS
000020d5: STATICCALL
000020d6: ISZERO
000020d7: DUP1
000020d8: ISZERO
000020d9: PUSH2 0x20e4
000020dc: JUMPI
000020dd: RETURNDATASIZE
000020de: PUSH0
000020df: DUP1
000020e0: RETURNDATACOPY
000020e1: RETURNDATASIZE
000020e2: PUSH0
000020e3: REVERT
000020e4: JUMPDEST
000020e5: POP
000020e6: POP
000020e7: POP
000020e8: POP
000020e9: PUSH1 0x40
000020eb: MLOAD
000020ec: RETURNDATASIZE
000020ed: PUSH1 0x1f
000020ef: NOT
000020f0: PUSH1 0x1f
000020f2: DUP3
000020f3: ADD
000020f4: AND
000020f5: DUP3
000020f6: ADD
000020f7: DUP1
000020f8: PUSH1 0x40
000020fa: MSTORE
000020fb: POP
000020fc: DUP2
000020fd: ADD
000020fe: SWAP1
000020ff: PUSH2 0x2108
00002102: SWAP2
00002103: SWAP1
00002104: PUSH2 0x350b
00002107: JUMP
00002108: JUMPDEST
00002109: PUSH1 0x40
0000210b: MLOAD
0000210c: PUSH4 0xb3596f07
00002111: PUSH1 0xe0
00002113: SHL
00002114: DUP2
00002115: MSTORE
00002116: PUSH1 0x01
00002118: PUSH1 0x01
0000211a: PUSH1 0xa0
0000211c: SHL
0000211d: SUB
0000211e: DUP10
0000211f: DUP2
00002120: AND
00002121: PUSH1 0x04
00002123: DUP4
00002124: ADD
00002125: MSTORE
00002126: SWAP2
00002127: SWAP3
00002128: POP
00002129: PUSH0
0000212a: SWAP2
0000212b: DUP5
0000212c: AND
0000212d: SWAP1
0000212e: PUSH4 0xb3596f07
00002133: SWAP1
00002134: PUSH1 0x24
00002136: ADD
00002137: PUSH1 0x20
00002139: PUSH1 0x40
0000213b: MLOAD
0000213c: DUP1
0000213d: DUP4
0000213e: SUB
0000213f: DUP2
00002140: DUP7
00002141: GAS
00002142: STATICCALL
00002143: ISZERO
00002144: DUP1
00002145: ISZERO
00002146: PUSH2 0x2151
00002149: JUMPI
0000214a: RETURNDATASIZE
0000214b: PUSH0
0000214c: DUP1
0000214d: RETURNDATACOPY
0000214e: RETURNDATASIZE
0000214f: PUSH0
00002150: REVERT
00002151: JUMPDEST
00002152: POP
00002153: POP
00002154: POP
00002155: POP
00002156: PUSH1 0x40
00002158: MLOAD
00002159: RETURNDATASIZE
0000215a: PUSH1 0x1f
0000215c: NOT
0000215d: PUSH1 0x1f
0000215f: DUP3
00002160: ADD
00002161: AND
00002162: DUP3
00002163: ADD
00002164: DUP1
00002165: PUSH1 0x40
00002167: MSTORE
00002168: POP
00002169: DUP2
0000216a: ADD
0000216b: SWAP1
0000216c: PUSH2 0x2175
0000216f: SWAP2
00002170: SWAP1
00002171: PUSH2 0x350b
00002174: JUMP
00002175: JUMPDEST
00002176: SWAP1
00002177: POP
00002178: DUP4
00002179: PUSH1 0xff
0000217b: AND
0000217c: DUP6
0000217d: PUSH1 0xff
0000217f: AND
00002180: SUB
00002181: PUSH2 0x219b
00002184: JUMPI
00002185: PUSH2 0x218f
00002188: DUP8
00002189: DUP4
0000218a: DUP4
0000218b: PUSH2 0x22a1
0000218e: JUMP
0000218f: JUMPDEST
00002190: SWAP6
00002191: POP
00002192: POP
00002193: POP
00002194: POP
00002195: POP
00002196: POP
00002197: PUSH2 0x15de
0000219a: JUMP
0000219b: JUMPDEST
0000219c: DUP4
0000219d: PUSH1 0xff
0000219f: AND
000021a0: DUP6
000021a1: PUSH1 0xff
000021a3: AND
000021a4: LT
000021a5: ISZERO
000021a6: PUSH2 0x21d2
000021a9: JUMPI
000021aa: PUSH2 0x218f
000021ad: DUP8
000021ae: PUSH2 0x21b7
000021b1: DUP8
000021b2: DUP8
000021b3: PUSH2 0x3551
000021b6: JUMP
000021b7: JUMPDEST
000021b8: PUSH2 0x21c2
000021bb: SWAP1
000021bc: PUSH1 0x0a
000021be: PUSH2 0x364a
000021c1: JUMP
000021c2: JUMPDEST
000021c3: PUSH2 0x21cc
000021c6: SWAP1
000021c7: DUP6
000021c8: PUSH2 0x3658
000021cb: JUMP
000021cc: JUMPDEST
000021cd: DUP4
000021ce: PUSH2 0x22a1
000021d1: JUMP
000021d2: JUMPDEST
000021d3: PUSH2 0x218f
000021d6: DUP8
000021d7: DUP4
000021d8: PUSH2 0x21e1
000021db: DUP8
000021dc: DUP10
000021dd: PUSH2 0x3551
000021e0: JUMP
000021e1: JUMPDEST
000021e2: PUSH2 0x21ec
000021e5: SWAP1
000021e6: PUSH1 0x0a
000021e8: PUSH2 0x364a
000021eb: JUMP
000021ec: JUMPDEST
000021ed: PUSH2 0x21f6
000021f0: SWAP1
000021f1: DUP6
000021f2: PUSH2 0x3658
000021f5: JUMP
000021f6: JUMPDEST
000021f7: PUSH2 0x22a1
000021fa: JUMP
000021fb: JUMPDEST
000021fc: PUSH0
000021fd: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed
00002212: NOT
00002213: PUSH1 0x01
00002215: PUSH1 0x01
00002217: PUSH1 0xa0
00002219: SHL
0000221a: SUB
0000221b: DUP5
0000221c: AND
0000221d: ADD
0000221e: PUSH2 0x2232
00002221: JUMPI
00002222: POP
00002223: PUSH1 0x01
00002225: PUSH1 0x01
00002227: PUSH1 0xa0
00002229: SHL
0000222a: SUB
0000222b: DUP2
0000222c: AND
0000222d: BALANCE
0000222e: PUSH2 0x0bc7
00002231: JUMP
00002232: JUMPDEST
00002233: PUSH1 0x40
00002235: MLOAD
00002236: PUSH4 0x70a08231
0000223b: PUSH1 0xe0
0000223d: SHL
0000223e: DUP2
0000223f: MSTORE
00002240: PUSH1 0x01
00002242: PUSH1 0x01
00002244: PUSH1 0xa0
00002246: SHL
00002247: SUB
00002248: DUP4
00002249: DUP2
0000224a: AND
0000224b: PUSH1 0x04
0000224d: DUP4
0000224e: ADD
0000224f: MSTORE
00002250: DUP5
00002251: AND
00002252: SWAP1
00002253: PUSH4 0x70a08231
00002258: SWAP1
00002259: PUSH1 0x24
0000225b: ADD
0000225c: PUSH1 0x20
0000225e: PUSH1 0x40
00002260: MLOAD
00002261: DUP1
00002262: DUP4
00002263: SUB
00002264: DUP2
00002265: DUP7
00002266: GAS
00002267: STATICCALL
00002268: ISZERO
00002269: DUP1
0000226a: ISZERO
0000226b: PUSH2 0x2276
0000226e: JUMPI
0000226f: RETURNDATASIZE
00002270: PUSH0
00002271: DUP1
00002272: RETURNDATACOPY
00002273: RETURNDATASIZE
00002274: PUSH0
00002275: REVERT
00002276: JUMPDEST
00002277: POP
00002278: POP
00002279: POP
0000227a: POP
0000227b: PUSH1 0x40
0000227d: MLOAD
0000227e: RETURNDATASIZE
0000227f: PUSH1 0x1f
00002281: NOT
00002282: PUSH1 0x1f
00002284: DUP3
00002285: ADD
00002286: AND
00002287: DUP3
00002288: ADD
00002289: DUP1
0000228a: PUSH1 0x40
0000228c: MSTORE
0000228d: POP
0000228e: DUP2
0000228f: ADD
00002290: SWAP1
00002291: PUSH2 0x229a
00002294: SWAP2
00002295: SWAP1
00002296: PUSH2 0x350b
00002299: JUMP
0000229a: JUMPDEST
0000229b: SWAP1
0000229c: POP
0000229d: PUSH2 0x0bc7
000022a0: JUMP
000022a1: JUMPDEST
000022a2: PUSH0
000022a3: DUP1
000022a4: PUSH0
000022a5: PUSH2 0x22ae
000022a8: DUP7
000022a9: DUP7
000022aa: PUSH2 0x2794
000022ad: JUMP
000022ae: JUMPDEST
000022af: SWAP2
000022b0: POP
000022b1: SWAP2
000022b2: POP
000022b3: DUP2
000022b4: PUSH0
000022b5: SUB
000022b6: PUSH2 0x22d2
000022b9: JUMPI
000022ba: DUP4
000022bb: DUP2
000022bc: DUP2
000022bd: PUSH2 0x22c8
000022c0: JUMPI
000022c1: PUSH2 0x22c8
000022c4: PUSH2 0x366f
000022c7: JUMP
000022c8: JUMPDEST
000022c9: DIV
000022ca: SWAP3
000022cb: POP
000022cc: POP
000022cd: POP
000022ce: PUSH2 0x15de
000022d1: JUMP
000022d2: JUMPDEST
000022d3: DUP2
000022d4: DUP5
000022d5: GT
000022d6: PUSH2 0x22e9
000022d9: JUMPI
000022da: PUSH2 0x22e9
000022dd: PUSH1 0x03
000022df: DUP6
000022e0: ISZERO
000022e1: MUL
000022e2: PUSH1 0x11
000022e4: XOR
000022e5: PUSH2 0x27b0
000022e8: JUMP
000022e9: JUMPDEST
000022ea: PUSH0
000022eb: DUP5
000022ec: DUP7
000022ed: DUP9
000022ee: MULMOD
000022ef: PUSH0
000022f0: DUP7
000022f1: DUP2
000022f2: SUB
000022f3: DUP8
000022f4: AND
000022f5: SWAP7
000022f6: DUP8
000022f7: SWAP1
000022f8: DIV
000022f9: SWAP7
000022fa: PUSH1 0x02
000022fc: PUSH1 0x03
000022fe: DUP10
000022ff: MUL
00002300: DUP2
00002301: XOR
00002302: DUP1
00002303: DUP11
00002304: MUL
00002305: DUP3
00002306: SUB
00002307: MUL
00002308: DUP1
00002309: DUP11
0000230a: MUL
0000230b: DUP3
0000230c: SUB
0000230d: MUL
0000230e: DUP1
0000230f: DUP11
00002310: MUL
00002311: DUP3
00002312: SUB
00002313: MUL
00002314: DUP1
00002315: DUP11
00002316: MUL
00002317: DUP3
00002318: SUB
00002319: MUL
0000231a: DUP1
0000231b: DUP11
0000231c: MUL
0000231d: DUP3
0000231e: SUB
0000231f: MUL
00002320: DUP1
00002321: DUP11
00002322: MUL
00002323: SWAP1
00002324: SWAP2
00002325: SUB
00002326: MUL
00002327: SWAP2
00002328: DUP2
00002329: SWAP1
0000232a: SUB
0000232b: DUP2
0000232c: SWAP1
0000232d: DIV
0000232e: PUSH1 0x01
00002330: ADD
00002331: DUP6
00002332: DUP5
00002333: GT
00002334: SWAP1
00002335: SWAP7
00002336: SUB
00002337: SWAP6
00002338: SWAP1
00002339: SWAP6
0000233a: MUL
0000233b: SWAP2
0000233c: SWAP1
0000233d: SWAP4
0000233e: SUB
0000233f: SWAP4
00002340: SWAP1
00002341: SWAP4
00002342: DIV
00002343: SWAP3
00002344: SWAP1
00002345: SWAP3
00002346: OR
00002347: MUL
00002348: SWAP2
00002349: POP
0000234a: POP
0000234b: SWAP4
0000234c: SWAP3
0000234d: POP
0000234e: POP
0000234f: POP
00002350: JUMP
00002351: JUMPDEST
00002352: PUSH0
00002353: PUSH1 0x01
00002355: PUSH1 0x01
00002357: PUSH1 0xe0
00002359: SHL
0000235a: SUB
0000235b: NOT
0000235c: DUP3
0000235d: AND
0000235e: PUSH4 0x7965db0b
00002363: PUSH1 0xe0
00002365: SHL
00002366: EQ
00002367: DUP1
00002368: PUSH2 0x0bc7
0000236b: JUMPI
0000236c: POP
0000236d: PUSH4 0x01ffc9a7
00002372: PUSH1 0xe0
00002374: SHL
00002375: PUSH1 0x01
00002377: PUSH1 0x01
00002379: PUSH1 0xe0
0000237b: SHL
0000237c: SUB
0000237d: NOT
0000237e: DUP4
0000237f: AND
00002380: EQ
00002381: PUSH2 0x0bc7
00002384: JUMP
00002385: JUMPDEST
00002386: PUSH2 0x0d1f
00002389: DUP2
0000238a: CALLER
0000238b: PUSH2 0x27c1
0000238e: JUMP
0000238f: JUMPDEST
00002390: PUSH0
00002391: PUSH2 0x239a
00002394: DUP4
00002395: DUP4
00002396: PUSH2 0x27fe
00002399: JUMP
0000239a: JUMPDEST
0000239b: ISZERO
0000239c: PUSH2 0x2401
0000239f: JUMPI
000023a0: PUSH2 0x23c9
000023a3: PUSH32 0x062030953ce644a2a7115259790ad01d3c2b5e8c98fc6b190da443a3f0a7c900
000023c4: DUP5
000023c5: PUSH2 0x2840
000023c8: JUMP
000023c9: JUMPDEST
000023ca: ISZERO
000023cb: PUSH2 0x23f9
000023ce: JUMPI
000023cf: PUSH1 0x40
000023d1: MLOAD
000023d2: DUP4
000023d3: SWAP1
000023d4: PUSH32 0xea0f1c470fa813c725756c036120b6688028969f5afbc607918fcd1ff9229435
000023f5: SWAP1
000023f6: PUSH0
000023f7: SWAP1
000023f8: LOG2
000023f9: JUMPDEST
000023fa: POP
000023fb: PUSH1 0x01
000023fd: PUSH2 0x0bc7
00002400: JUMP
00002401: JUMPDEST
00002402: POP
00002403: PUSH0
00002404: SWAP3
00002405: SWAP2
00002406: POP
00002407: POP
00002408: JUMP
00002409: JUMPDEST
0000240a: PUSH0
0000240b: PUSH2 0x2414
0000240e: DUP4
0000240f: DUP4
00002410: PUSH2 0x284b
00002413: JUMP
00002414: JUMPDEST
00002415: ISZERO
00002416: PUSH2 0x2401
00002419: JUMPI
0000241a: PUSH2 0x2422
0000241d: DUP4
0000241e: PUSH2 0x16c1
00002421: JUMP
00002422: JUMPDEST
00002423: PUSH0
00002424: SUB
00002425: PUSH2 0x23f9
00002428: JUMPI
00002429: PUSH2 0x2452
0000242c: PUSH32 0x062030953ce644a2a7115259790ad01d3c2b5e8c98fc6b190da443a3f0a7c900
0000244d: DUP5
0000244e: PUSH2 0x2884
00002451: JUMP
00002452: JUMPDEST
00002453: POP
00002454: PUSH1 0x40
00002456: MLOAD
00002457: DUP4
00002458: SWAP1
00002459: PUSH32 0x4c9a714f78b79aa08074addab7cbdb196cccdf6d67efbf0b99914db8a6b08e73
0000247a: SWAP1
0000247b: PUSH0
0000247c: SWAP1
0000247d: LOG2
0000247e: POP
0000247f: PUSH1 0x01
00002481: PUSH2 0x0bc7
00002484: JUMP
00002485: JUMPDEST
00002486: PUSH0
00002487: PUSH2 0x0bc7
0000248a: DUP3
0000248b: SLOAD
0000248c: SWAP1
0000248d: JUMP
0000248e: JUMPDEST
0000248f: PUSH0
00002490: DUP1
00002491: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00
000024b2: PUSH2 0x0bc7
000024b5: JUMP
000024b6: JUMPDEST
000024b7: PUSH1 0x40
000024b9: DUP1
000024ba: MLOAD
000024bb: PUSH1 0x01
000024bd: PUSH1 0x01
000024bf: PUSH1 0xa0
000024c1: SHL
000024c2: SUB
000024c3: DUP5
000024c4: AND
000024c5: PUSH1 0x24
000024c7: DUP3
000024c8: ADD
000024c9: MSTORE
000024ca: PUSH1 0x44
000024cc: DUP1
000024cd: DUP3
000024ce: ADD
000024cf: DUP5
000024d0: SWAP1
000024d1: MSTORE
000024d2: DUP3
000024d3: MLOAD
000024d4: DUP1
000024d5: DUP4
000024d6: SUB
000024d7: SWAP1
000024d8: SWAP2
000024d9: ADD
000024da: DUP2
000024db: MSTORE
000024dc: PUSH1 0x64
000024de: SWAP1
000024df: SWAP2
000024e0: ADD
000024e1: SWAP1
000024e2: SWAP2
000024e3: MSTORE
000024e4: PUSH1 0x20
000024e6: DUP2
000024e7: ADD
000024e8: DUP1
000024e9: MLOAD
000024ea: PUSH1 0x01
000024ec: PUSH1 0x01
000024ee: PUSH1 0xe0
000024f0: SHL
000024f1: SUB
000024f2: AND
000024f3: PUSH4 0x095ea7b3
000024f8: PUSH1 0xe0
000024fa: SHL
000024fb: OR
000024fc: SWAP1
000024fd: MSTORE
000024fe: PUSH2 0x2507
00002501: DUP5
00002502: DUP3
00002503: PUSH2 0x288f
00002506: JUMP
00002507: JUMPDEST
00002508: PUSH2 0x0b9d
0000250b: JUMPI
0000250c: PUSH1 0x40
0000250e: MLOAD
0000250f: PUSH1 0x01
00002511: PUSH1 0x01
00002513: PUSH1 0xa0
00002515: SHL
00002516: SUB
00002517: DUP5
00002518: DUP2
00002519: AND
0000251a: PUSH1 0x24
0000251c: DUP4
0000251d: ADD
0000251e: MSTORE
0000251f: PUSH0
00002520: PUSH1 0x44
00002522: DUP4
00002523: ADD
00002524: MSTORE
00002525: PUSH2 0x2569
00002528: SWAP2
00002529: DUP7
0000252a: SWAP2
0000252b: DUP3
0000252c: AND
0000252d: SWAP1
0000252e: PUSH4 0x095ea7b3
00002533: SWAP1
00002534: PUSH1 0x64
00002536: ADD
00002537: JUMPDEST
00002538: PUSH1 0x40
0000253a: MLOAD
0000253b: PUSH1 0x20
0000253d: DUP2
0000253e: DUP4
0000253f: SUB
00002540: SUB
00002541: DUP2
00002542: MSTORE
00002543: SWAP1
00002544: PUSH1 0x40
00002546: MSTORE
00002547: SWAP2
00002548: POP
00002549: PUSH1 0xe0
0000254b: SHL
0000254c: PUSH1 0x20
0000254e: DUP3
0000254f: ADD
00002550: DUP1
00002551: MLOAD
00002552: PUSH1 0x01
00002554: PUSH1 0x01
00002556: PUSH1 0xe0
00002558: SHL
00002559: SUB
0000255a: DUP4
0000255b: DUP2
0000255c: DUP4
0000255d: AND
0000255e: OR
0000255f: DUP4
00002560: MSTORE
00002561: POP
00002562: POP
00002563: POP
00002564: POP
00002565: PUSH2 0x28d4
00002568: JUMP
00002569: JUMPDEST
0000256a: PUSH2 0x0b9d
0000256d: DUP5
0000256e: DUP3
0000256f: PUSH2 0x28d4
00002572: JUMP
00002573: JUMPDEST
00002574: PUSH0
00002575: DUP2
00002576: DUP2
00002577: MSTORE
00002578: PUSH1 0x01
0000257a: DUP4
0000257b: ADD
0000257c: PUSH1 0x20
0000257e: MSTORE
0000257f: PUSH1 0x40
00002581: DUP2
00002582: KECCAK256
00002583: SLOAD
00002584: ISZERO
00002585: ISZERO
00002586: PUSH2 0x15de
00002589: JUMP
0000258a: JUMPDEST
0000258b: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed
000025a0: NOT
000025a1: PUSH1 0x01
000025a3: PUSH1 0x01
000025a5: PUSH1 0xa0
000025a7: SHL
000025a8: SUB
000025a9: DUP5
000025aa: AND
000025ab: ADD
000025ac: PUSH2 0x25cf
000025af: JUMPI
000025b0: DUP1
000025b1: CALLVALUE
000025b2: EQ
000025b3: PUSH2 0x0d71
000025b6: JUMPI
000025b7: PUSH1 0x40
000025b9: MLOAD
000025ba: PUSH4 0x2a9ffab7
000025bf: PUSH1 0xe2
000025c1: SHL
000025c2: DUP2
000025c3: MSTORE
000025c4: PUSH1 0x04
000025c6: ADD
000025c7: PUSH1 0x40
000025c9: MLOAD
000025ca: DUP1
000025cb: SWAP2
000025cc: SUB
000025cd: SWAP1
000025ce: REVERT
000025cf: JUMPDEST
000025d0: PUSH2 0x0d71
000025d3: PUSH1 0x01
000025d5: PUSH1 0x01
000025d7: PUSH1 0xa0
000025d9: SHL
000025da: SUB
000025db: DUP5
000025dc: AND
000025dd: DUP4
000025de: ADDRESS
000025df: DUP5
000025e0: PUSH2 0x2940
000025e3: JUMP
000025e4: JUMPDEST
000025e5: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed
000025fa: NOT
000025fb: PUSH1 0x01
000025fd: PUSH1 0x01
000025ff: PUSH1 0xa0
00002601: SHL
00002602: SUB
00002603: DUP5
00002604: AND
00002605: ADD
00002606: PUSH2 0x2613
00002609: JUMPI
0000260a: PUSH2 0x0d71
0000260d: DUP3
0000260e: DUP3
0000260f: PUSH2 0x2979
00002612: JUMP
00002613: JUMPDEST
00002614: PUSH2 0x0d71
00002617: PUSH1 0x01
00002619: PUSH1 0x01
0000261b: PUSH1 0xa0
0000261d: SHL
0000261e: SUB
0000261f: DUP5
00002620: AND
00002621: DUP4
00002622: DUP4
00002623: PUSH2 0x2a05
00002626: JUMP
00002627: JUMPDEST
00002628: PUSH0
00002629: PUSH2 0x15de
0000262c: DUP4
0000262d: DUP4
0000262e: PUSH2 0x2a36
00002631: JUMP
00002632: JUMPDEST
00002633: PUSH1 0x60
00002635: PUSH0
00002636: PUSH2 0x15de
00002639: DUP4
0000263a: PUSH2 0x2a5c
0000263d: JUMP
0000263e: JUMPDEST
0000263f: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00
00002660: DUP1
00002661: SLOAD
00002662: PUSH1 0x01
00002664: NOT
00002665: ADD
00002666: PUSH2 0x2682
00002669: JUMPI
0000266a: PUSH1 0x40
0000266c: MLOAD
0000266d: PUSH4 0x3ee5aeb5
00002672: PUSH1 0xe0
00002674: SHL
00002675: DUP2
00002676: MSTORE
00002677: PUSH1 0x04
00002679: ADD
0000267a: PUSH1 0x40
0000267c: MLOAD
0000267d: DUP1
0000267e: SWAP2
0000267f: SUB
00002680: SWAP1
00002681: REVERT
00002682: JUMPDEST
00002683: PUSH1 0x02
00002685: SWAP1
00002686: SSTORE
00002687: JUMP
00002688: JUMPDEST
00002689: PUSH1 0x60
0000268b: PUSH2 0x15de
0000268e: DUP4
0000268f: DUP4
00002690: PUSH0
00002691: JUMPDEST
00002692: PUSH1 0x60
00002694: DUP2
00002695: SELFBALANCE
00002696: LT
00002697: ISZERO
00002698: PUSH2 0x26bd
0000269b: JUMPI
0000269c: PUSH1 0x40
0000269e: MLOAD
0000269f: PUSH4 0xcf479181
000026a4: PUSH1 0xe0
000026a6: SHL
000026a7: DUP2
000026a8: MSTORE
000026a9: SELFBALANCE
000026aa: PUSH1 0x04
000026ac: DUP3
000026ad: ADD
000026ae: MSTORE
000026af: PUSH1 0x24
000026b1: DUP2
000026b2: ADD
000026b3: DUP4
000026b4: SWAP1
000026b5: MSTORE
000026b6: PUSH1 0x44
000026b8: ADD
000026b9: PUSH2 0x08ec
000026bc: JUMP
000026bd: JUMPDEST
000026be: PUSH0
000026bf: DUP1
000026c0: DUP6
000026c1: PUSH1 0x01
000026c3: PUSH1 0x01
000026c5: PUSH1 0xa0
000026c7: SHL
000026c8: SUB
000026c9: AND
000026ca: DUP5
000026cb: DUP7
000026cc: PUSH1 0x40
000026ce: MLOAD
000026cf: PUSH2 0x26d8
000026d2: SWAP2
000026d3: SWAP1
000026d4: PUSH2 0x3683
000026d7: JUMP
000026d8: JUMPDEST
000026d9: PUSH0
000026da: PUSH1 0x40
000026dc: MLOAD
000026dd: DUP1
000026de: DUP4
000026df: SUB
000026e0: DUP2
000026e1: DUP6
000026e2: DUP8
000026e3: GAS
000026e4: CALL
000026e5: SWAP3
000026e6: POP
000026e7: POP
000026e8: POP
000026e9: RETURNDATASIZE
000026ea: DUP1
000026eb: PUSH0
000026ec: DUP2
000026ed: EQ
000026ee: PUSH2 0x2712
000026f1: JUMPI
000026f2: PUSH1 0x40
000026f4: MLOAD
000026f5: SWAP2
000026f6: POP
000026f7: PUSH1 0x1f
000026f9: NOT
000026fa: PUSH1 0x3f
000026fc: RETURNDATASIZE
000026fd: ADD
000026fe: AND
000026ff: DUP3
00002700: ADD
00002701: PUSH1 0x40
00002703: MSTORE
00002704: RETURNDATASIZE
00002705: DUP3
00002706: MSTORE
00002707: RETURNDATASIZE
00002708: PUSH0
00002709: PUSH1 0x20
0000270b: DUP5
0000270c: ADD
0000270d: RETURNDATACOPY
0000270e: PUSH2 0x2717
00002711: JUMP
00002712: JUMPDEST
00002713: PUSH1 0x60
00002715: SWAP2
00002716: POP
00002717: JUMPDEST
00002718: POP
00002719: SWAP2
0000271a: POP
0000271b: SWAP2
0000271c: POP
0000271d: PUSH2 0x2727
00002720: DUP7
00002721: DUP4
00002722: DUP4
00002723: PUSH2 0x2ab5
00002726: JUMP
00002727: JUMPDEST
00002728: SWAP7
00002729: SWAP6
0000272a: POP
0000272b: POP
0000272c: POP
0000272d: POP
0000272e: POP
0000272f: POP
00002730: JUMP
00002731: JUMPDEST
00002732: PUSH1 0x38
00002734: DUP5
00002735: MLOAD
00002736: EQ
00002737: PUSH2 0x2782
0000273a: JUMPI
0000273b: PUSH1 0x40
0000273d: MLOAD
0000273e: PUSH3 0x461bcd
00002742: PUSH1 0xe5
00002744: SHL
00002745: DUP2
00002746: MSTORE
00002747: PUSH1 0x20
00002749: PUSH1 0x04
0000274b: DUP3
0000274c: ADD
0000274d: MSTORE
0000274e: PUSH1 0x19
00002750: PUSH1 0x24
00002752: DUP3
00002753: ADD
00002754: MSTORE
00002755: PUSH32 0x475076323a2075696420627566666572206f766572666c6f7700000000000000
00002776: PUSH1 0x44
00002778: DUP3
00002779: ADD
0000277a: MSTORE
0000277b: PUSH1 0x64
0000277d: ADD
0000277e: PUSH2 0x08ec
00002781: JUMP
00002782: JUMPDEST
00002783: PUSH1 0x38
00002785: DUP5
00002786: ADD
00002787: MSTORE
00002788: PUSH1 0x34
0000278a: DUP4
0000278b: ADD
0000278c: MSTORE
0000278d: PUSH1 0x20
0000278f: SWAP1
00002790: SWAP2
00002791: ADD
00002792: MSTORE
00002793: JUMP
00002794: JUMPDEST
00002795: PUSH0
00002796: DUP1
00002797: PUSH0
00002798: NOT
00002799: DUP4
0000279a: DUP6
0000279b: MULMOD
0000279c: SWAP4
0000279d: SWAP1
0000279e: SWAP3
0000279f: MUL
000027a0: DUP1
000027a1: DUP5
000027a2: LT
000027a3: SWAP4
000027a4: DUP2
000027a5: SWAP1
000027a6: SUB
000027a7: SWAP4
000027a8: SWAP1
000027a9: SWAP4
000027aa: SUB
000027ab: SWAP4
000027ac: SWAP2
000027ad: POP
000027ae: POP
000027af: JUMP
000027b0: JUMPDEST
000027b1: PUSH4 0x4e487b71
000027b6: PUSH0
000027b7: MSTORE
000027b8: DUP1
000027b9: PUSH1 0x20
000027bb: MSTORE
000027bc: PUSH1 0x24
000027be: PUSH1 0x1c
000027c0: REVERT
000027c1: JUMPDEST
000027c2: PUSH2 0x27cb
000027c5: DUP3
000027c6: DUP3
000027c7: PUSH2 0x1554
000027ca: JUMP
000027cb: JUMPDEST
000027cc: PUSH2 0x27fa
000027cf: JUMPI
000027d0: PUSH1 0x40
000027d2: MLOAD
000027d3: PUSH4 0xe2517d3f
000027d8: PUSH1 0xe0
000027da: SHL
000027db: DUP2
000027dc: MSTORE
000027dd: PUSH1 0x01
000027df: PUSH1 0x01
000027e1: PUSH1 0xa0
000027e3: SHL
000027e4: SUB
000027e5: DUP3
000027e6: AND
000027e7: PUSH1 0x04
000027e9: DUP3
000027ea: ADD
000027eb: MSTORE
000027ec: PUSH1 0x24
000027ee: DUP2
000027ef: ADD
000027f0: DUP4
000027f1: SWAP1
000027f2: MSTORE
000027f3: PUSH1 0x44
000027f5: ADD
000027f6: PUSH2 0x08ec
000027f9: JUMP
000027fa: JUMPDEST
000027fb: POP
000027fc: POP
000027fd: JUMP
000027fe: JUMPDEST
000027ff: PUSH0
00002800: PUSH0
00002801: DUP1
00002802: MLOAD
00002803: PUSH1 0x20
00002805: PUSH2 0x36ae
00002808: DUP4
00002809: CODECOPY
0000280a: DUP2
0000280b: MLOAD
0000280c: SWAP2
0000280d: MSTORE
0000280e: DUP2
0000280f: PUSH2 0x2818
00002812: DUP6
00002813: DUP6
00002814: PUSH2 0x2b11
00002817: JUMP
00002818: JUMPDEST
00002819: SWAP1
0000281a: POP
0000281b: DUP1
0000281c: ISZERO
0000281d: PUSH2 0x13d9
00002820: JUMPI
00002821: PUSH0
00002822: DUP6
00002823: DUP2
00002824: MSTORE
00002825: PUSH1 0x20
00002827: DUP4
00002828: SWAP1
00002829: MSTORE
0000282a: PUSH1 0x40
0000282c: SWAP1
0000282d: KECCAK256
0000282e: PUSH2 0x2837
00002831: SWAP1
00002832: DUP6
00002833: PUSH2 0x2bb2
00002836: JUMP
00002837: JUMPDEST
00002838: POP
00002839: SWAP5
0000283a: SWAP4
0000283b: POP
0000283c: POP
0000283d: POP
0000283e: POP
0000283f: JUMP
00002840: JUMPDEST
00002841: PUSH0
00002842: PUSH2 0x15de
00002845: DUP4
00002846: DUP4
00002847: PUSH2 0x2bc2
0000284a: JUMP
0000284b: JUMPDEST
0000284c: PUSH0
0000284d: PUSH0
0000284e: DUP1
0000284f: MLOAD
00002850: PUSH1 0x20
00002852: PUSH2 0x36ae
00002855: DUP4
00002856: CODECOPY
00002857: DUP2
00002858: MLOAD
00002859: SWAP2
0000285a: MSTORE
0000285b: DUP2
0000285c: PUSH2 0x2865
0000285f: DUP6
00002860: DUP6
00002861: PUSH2 0x2c0e
00002864: JUMP
00002865: JUMPDEST
00002866: SWAP1
00002867: POP
00002868: DUP1
00002869: ISZERO
0000286a: PUSH2 0x13d9
0000286d: JUMPI
0000286e: PUSH0
0000286f: DUP6
00002870: DUP2
00002871: MSTORE
00002872: PUSH1 0x20
00002874: DUP4
00002875: SWAP1
00002876: MSTORE
00002877: PUSH1 0x40
00002879: SWAP1
0000287a: KECCAK256
0000287b: PUSH2 0x2837
0000287e: SWAP1
0000287f: DUP6
00002880: PUSH2 0x2c87
00002883: JUMP
00002884: JUMPDEST
00002885: PUSH0
00002886: PUSH2 0x15de
00002889: DUP4
0000288a: DUP4
0000288b: PUSH2 0x2c97
0000288e: JUMP
0000288f: JUMPDEST
00002890: PUSH0
00002891: DUP1
00002892: PUSH0
00002893: DUP1
00002894: PUSH1 0x20
00002896: PUSH0
00002897: DUP7
00002898: MLOAD
00002899: PUSH1 0x20
0000289b: DUP9
0000289c: ADD
0000289d: PUSH0
0000289e: DUP11
0000289f: GAS
000028a0: CALL
000028a1: SWAP3
000028a2: POP
000028a3: RETURNDATASIZE
000028a4: SWAP2
000028a5: POP
000028a6: PUSH0
000028a7: MLOAD
000028a8: SWAP1
000028a9: POP
000028aa: DUP3
000028ab: DUP1
000028ac: ISZERO
000028ad: PUSH2 0x2727
000028b0: JUMPI
000028b1: POP
000028b2: DUP2
000028b3: ISZERO
000028b4: PUSH2 0x28c0
000028b7: JUMPI
000028b8: DUP1
000028b9: PUSH1 0x01
000028bb: EQ
000028bc: PUSH2 0x2727
000028bf: JUMP
000028c0: JUMPDEST
000028c1: POP
000028c2: POP
000028c3: POP
000028c4: POP
000028c5: POP
000028c6: PUSH1 0x01
000028c8: PUSH1 0x01
000028ca: PUSH1 0xa0
000028cc: SHL
000028cd: SUB
000028ce: AND
000028cf: EXTCODESIZE
000028d0: ISZERO
000028d1: ISZERO
000028d2: SWAP1
000028d3: JUMP
000028d4: JUMPDEST
000028d5: PUSH0
000028d6: DUP1
000028d7: PUSH1 0x20
000028d9: PUSH0
000028da: DUP5
000028db: MLOAD
000028dc: PUSH1 0x20
000028de: DUP7
000028df: ADD
000028e0: PUSH0
000028e1: DUP9
000028e2: GAS
000028e3: CALL
000028e4: DUP1
000028e5: PUSH2 0x28f3
000028e8: JUMPI
000028e9: PUSH1 0x40
000028eb: MLOAD
000028ec: RETURNDATASIZE
000028ed: PUSH0
000028ee: DUP3
000028ef: RETURNDATACOPY
000028f0: RETURNDATASIZE
000028f1: DUP2
000028f2: REVERT
000028f3: JUMPDEST
000028f4: POP
000028f5: POP
000028f6: PUSH0
000028f7: MLOAD
000028f8: RETURNDATASIZE
000028f9: SWAP2
000028fa: POP
000028fb: DUP2
000028fc: ISZERO
000028fd: PUSH2 0x290a
00002900: JUMPI
00002901: DUP1
00002902: PUSH1 0x01
00002904: EQ
00002905: ISZERO
00002906: PUSH2 0x2917
00002909: JUMP
0000290a: JUMPDEST
0000290b: PUSH1 0x01
0000290d: PUSH1 0x01
0000290f: PUSH1 0xa0
00002911: SHL
00002912: SUB
00002913: DUP5
00002914: AND
00002915: EXTCODESIZE
00002916: ISZERO
00002917: JUMPDEST
00002918: ISZERO
00002919: PUSH2 0x0b9d
0000291c: JUMPI
0000291d: PUSH1 0x40
0000291f: MLOAD
00002920: PUSH4 0x5274afe7
00002925: PUSH1 0xe0
00002927: SHL
00002928: DUP2
00002929: MSTORE
0000292a: PUSH1 0x01
0000292c: PUSH1 0x01
0000292e: PUSH1 0xa0
00002930: SHL
00002931: SUB
00002932: DUP6
00002933: AND
00002934: PUSH1 0x04
00002936: DUP3
00002937: ADD
00002938: MSTORE
00002939: PUSH1 0x24
0000293b: ADD
0000293c: PUSH2 0x08ec
0000293f: JUMP
00002940: JUMPDEST
00002941: PUSH1 0x40
00002943: MLOAD
00002944: PUSH1 0x01
00002946: PUSH1 0x01
00002948: PUSH1 0xa0
0000294a: SHL
0000294b: SUB
0000294c: DUP5
0000294d: DUP2
0000294e: AND
0000294f: PUSH1 0x24
00002951: DUP4
00002952: ADD
00002953: MSTORE
00002954: DUP4
00002955: DUP2
00002956: AND
00002957: PUSH1 0x44
00002959: DUP4
0000295a: ADD
0000295b: MSTORE
0000295c: PUSH1 0x64
0000295e: DUP3
0000295f: ADD
00002960: DUP4
00002961: SWAP1
00002962: MSTORE
00002963: PUSH2 0x0b9d
00002966: SWAP2
00002967: DUP7
00002968: SWAP2
00002969: DUP3
0000296a: AND
0000296b: SWAP1
0000296c: PUSH4 0x23b872dd
00002971: SWAP1
00002972: PUSH1 0x84
00002974: ADD
00002975: PUSH2 0x2537
00002978: JUMP
00002979: JUMPDEST
0000297a: DUP1
0000297b: SELFBALANCE
0000297c: LT
0000297d: ISZERO
0000297e: PUSH2 0x29a3
00002981: JUMPI
00002982: PUSH1 0x40
00002984: MLOAD
00002985: PUSH4 0xcf479181
0000298a: PUSH1 0xe0
0000298c: SHL
0000298d: DUP2
0000298e: MSTORE
0000298f: SELFBALANCE
00002990: PUSH1 0x04
00002992: DUP3
00002993: ADD
00002994: MSTORE
00002995: PUSH1 0x24
00002997: DUP2
00002998: ADD
00002999: DUP3
0000299a: SWAP1
0000299b: MSTORE
0000299c: PUSH1 0x44
0000299e: ADD
0000299f: PUSH2 0x08ec
000029a2: JUMP
000029a3: JUMPDEST
000029a4: PUSH0
000029a5: DUP1
000029a6: DUP4
000029a7: PUSH1 0x01
000029a9: PUSH1 0x01
000029ab: PUSH1 0xa0
000029ad: SHL
000029ae: SUB
000029af: AND
000029b0: DUP4
000029b1: PUSH1 0x40
000029b3: MLOAD
000029b4: PUSH0
000029b5: PUSH1 0x40
000029b7: MLOAD
000029b8: DUP1
000029b9: DUP4
000029ba: SUB
000029bb: DUP2
000029bc: DUP6
000029bd: DUP8
000029be: GAS
000029bf: CALL
000029c0: SWAP3
000029c1: POP
000029c2: POP
000029c3: POP
000029c4: RETURNDATASIZE
000029c5: DUP1
000029c6: PUSH0
000029c7: DUP2
000029c8: EQ
000029c9: PUSH2 0x29ed
000029cc: JUMPI
000029cd: PUSH1 0x40
000029cf: MLOAD
000029d0: SWAP2
000029d1: POP
000029d2: PUSH1 0x1f
000029d4: NOT
000029d5: PUSH1 0x3f
000029d7: RETURNDATASIZE
000029d8: ADD
000029d9: AND
000029da: DUP3
000029db: ADD
000029dc: PUSH1 0x40
000029de: MSTORE
000029df: RETURNDATASIZE
000029e0: DUP3
000029e1: MSTORE
000029e2: RETURNDATASIZE
000029e3: PUSH0
000029e4: PUSH1 0x20
000029e6: DUP5
000029e7: ADD
000029e8: RETURNDATACOPY
000029e9: PUSH2 0x29f2
000029ec: JUMP
000029ed: JUMPDEST
000029ee: PUSH1 0x60
000029f0: SWAP2
000029f1: POP
000029f2: JUMPDEST
000029f3: POP
000029f4: SWAP2
000029f5: POP
000029f6: SWAP2
000029f7: POP
000029f8: DUP2
000029f9: PUSH2 0x0b9d
000029fc: JUMPI
000029fd: PUSH2 0x0b9d
00002a00: DUP2
00002a01: PUSH2 0x2d71
00002a04: JUMP
00002a05: JUMPDEST
00002a06: PUSH1 0x40
00002a08: MLOAD
00002a09: PUSH1 0x01
00002a0b: PUSH1 0x01
00002a0d: PUSH1 0xa0
00002a0f: SHL
00002a10: SUB
00002a11: DUP4
00002a12: DUP2
00002a13: AND
00002a14: PUSH1 0x24
00002a16: DUP4
00002a17: ADD
00002a18: MSTORE
00002a19: PUSH1 0x44
00002a1b: DUP3
00002a1c: ADD
00002a1d: DUP4
00002a1e: SWAP1
00002a1f: MSTORE
00002a20: PUSH2 0x0d71
00002a23: SWAP2
00002a24: DUP6
00002a25: SWAP2
00002a26: DUP3
00002a27: AND
00002a28: SWAP1
00002a29: PUSH4 0xa9059cbb
00002a2e: SWAP1
00002a2f: PUSH1 0x64
00002a31: ADD
00002a32: PUSH2 0x2537
00002a35: JUMP
00002a36: JUMPDEST
00002a37: PUSH0
00002a38: DUP3
00002a39: PUSH0
00002a3a: ADD
00002a3b: DUP3
00002a3c: DUP2
00002a3d: SLOAD
00002a3e: DUP2
00002a3f: LT
00002a40: PUSH2 0x2a4b
00002a43: JUMPI
00002a44: PUSH2 0x2a4b
00002a47: PUSH2 0x3317
00002a4a: JUMP
00002a4b: JUMPDEST
00002a4c: SWAP1
00002a4d: PUSH0
00002a4e: MSTORE
00002a4f: PUSH1 0x20
00002a51: PUSH0
00002a52: KECCAK256
00002a53: ADD
00002a54: SLOAD
00002a55: SWAP1
00002a56: POP
00002a57: SWAP3
00002a58: SWAP2
00002a59: POP
00002a5a: POP
00002a5b: JUMP
00002a5c: JUMPDEST
00002a5d: PUSH1 0x60
00002a5f: DUP2
00002a60: PUSH0
00002a61: ADD
00002a62: DUP1
00002a63: SLOAD
00002a64: DUP1
00002a65: PUSH1 0x20
00002a67: MUL
00002a68: PUSH1 0x20
00002a6a: ADD
00002a6b: PUSH1 0x40
00002a6d: MLOAD
00002a6e: SWAP1
00002a6f: DUP2
00002a70: ADD
00002a71: PUSH1 0x40
00002a73: MSTORE
00002a74: DUP1
00002a75: SWAP3
00002a76: SWAP2
00002a77: SWAP1
00002a78: DUP2
00002a79: DUP2
00002a7a: MSTORE
00002a7b: PUSH1 0x20
00002a7d: ADD
00002a7e: DUP3
00002a7f: DUP1
00002a80: SLOAD
00002a81: DUP1
00002a82: ISZERO
00002a83: PUSH2 0x2aa9
00002a86: JUMPI
00002a87: PUSH1 0x20
00002a89: MUL
00002a8a: DUP3
00002a8b: ADD
00002a8c: SWAP2
00002a8d: SWAP1
00002a8e: PUSH0
00002a8f: MSTORE
00002a90: PUSH1 0x20
00002a92: PUSH0
00002a93: KECCAK256
00002a94: SWAP1
00002a95: JUMPDEST
00002a96: DUP2
00002a97: SLOAD
00002a98: DUP2
00002a99: MSTORE
00002a9a: PUSH1 0x20
00002a9c: ADD
00002a9d: SWAP1
00002a9e: PUSH1 0x01
00002aa0: ADD
00002aa1: SWAP1
00002aa2: DUP1
00002aa3: DUP4
00002aa4: GT
00002aa5: PUSH2 0x2a95
00002aa8: JUMPI
00002aa9: JUMPDEST
00002aaa: POP
00002aab: POP
00002aac: POP
00002aad: POP
00002aae: POP
00002aaf: SWAP1
00002ab0: POP
00002ab1: SWAP2
00002ab2: SWAP1
00002ab3: POP
00002ab4: JUMP
00002ab5: JUMPDEST
00002ab6: PUSH1 0x60
00002ab8: DUP3
00002ab9: PUSH2 0x2aca
00002abc: JUMPI
00002abd: PUSH2 0x2ac5
00002ac0: DUP3
00002ac1: PUSH2 0x2d71
00002ac4: JUMP
00002ac5: JUMPDEST
00002ac6: PUSH2 0x15de
00002ac9: JUMP
00002aca: JUMPDEST
00002acb: DUP2
00002acc: MLOAD
00002acd: ISZERO
00002ace: DUP1
00002acf: ISZERO
00002ad0: PUSH2 0x2ae1
00002ad3: JUMPI
00002ad4: POP
00002ad5: PUSH1 0x01
00002ad7: PUSH1 0x01
00002ad9: PUSH1 0xa0
00002adb: SHL
00002adc: SUB
00002add: DUP5
00002ade: AND
00002adf: EXTCODESIZE
00002ae0: ISZERO
00002ae1: JUMPDEST
00002ae2: ISZERO
00002ae3: PUSH2 0x2b0a
00002ae6: JUMPI
00002ae7: PUSH1 0x40
00002ae9: MLOAD
00002aea: PUSH4 0x9996b315
00002aef: PUSH1 0xe0
00002af1: SHL
00002af2: DUP2
00002af3: MSTORE
00002af4: PUSH1 0x01
00002af6: PUSH1 0x01
00002af8: PUSH1 0xa0
00002afa: SHL
00002afb: SUB
00002afc: DUP6
00002afd: AND
00002afe: PUSH1 0x04
00002b00: DUP3
00002b01: ADD
00002b02: MSTORE
00002b03: PUSH1 0x24
00002b05: ADD
00002b06: PUSH2 0x08ec
00002b09: JUMP
00002b0a: JUMPDEST
00002b0b: POP
00002b0c: DUP1
00002b0d: PUSH2 0x15de
00002b10: JUMP
00002b11: JUMPDEST
00002b12: PUSH0
00002b13: PUSH0
00002b14: DUP1
00002b15: MLOAD
00002b16: PUSH1 0x20
00002b18: PUSH2 0x36ee
00002b1b: DUP4
00002b1c: CODECOPY
00002b1d: DUP2
00002b1e: MLOAD
00002b1f: SWAP2
00002b20: MSTORE
00002b21: PUSH2 0x2b2a
00002b24: DUP5
00002b25: DUP5
00002b26: PUSH2 0x1554
00002b29: JUMP
00002b2a: JUMPDEST
00002b2b: PUSH2 0x2ba9
00002b2e: JUMPI
00002b2f: PUSH0
00002b30: DUP5
00002b31: DUP2
00002b32: MSTORE
00002b33: PUSH1 0x20
00002b35: DUP3
00002b36: DUP2
00002b37: MSTORE
00002b38: PUSH1 0x40
00002b3a: DUP1
00002b3b: DUP4
00002b3c: KECCAK256
00002b3d: PUSH1 0x01
00002b3f: PUSH1 0x01
00002b41: PUSH1 0xa0
00002b43: SHL
00002b44: SUB
00002b45: DUP8
00002b46: AND
00002b47: DUP5
00002b48: MSTORE
00002b49: SWAP1
00002b4a: SWAP2
00002b4b: MSTORE
00002b4c: SWAP1
00002b4d: KECCAK256
00002b4e: DUP1
00002b4f: SLOAD
00002b50: PUSH1 0xff
00002b52: NOT
00002b53: AND
00002b54: PUSH1 0x01
00002b56: OR
00002b57: SWAP1
00002b58: SSTORE
00002b59: PUSH2 0x2b5f
00002b5c: CALLER
00002b5d: SWAP1
00002b5e: JUMP
00002b5f: JUMPDEST
00002b60: PUSH1 0x01
00002b62: PUSH1 0x01
00002b64: PUSH1 0xa0
00002b66: SHL
00002b67: SUB
00002b68: AND
00002b69: DUP4
00002b6a: PUSH1 0x01
00002b6c: PUSH1 0x01
00002b6e: PUSH1 0xa0
00002b70: SHL
00002b71: SUB
00002b72: AND
00002b73: DUP6
00002b74: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d
00002b95: PUSH1 0x40
00002b97: MLOAD
00002b98: PUSH1 0x40
00002b9a: MLOAD
00002b9b: DUP1
00002b9c: SWAP2
00002b9d: SUB
00002b9e: SWAP1
00002b9f: LOG4
00002ba0: PUSH1 0x01
00002ba2: SWAP2
00002ba3: POP
00002ba4: POP
00002ba5: PUSH2 0x0bc7
00002ba8: JUMP
00002ba9: JUMPDEST
00002baa: PUSH0
00002bab: SWAP2
00002bac: POP
00002bad: POP
00002bae: PUSH2 0x0bc7
00002bb1: JUMP
00002bb2: JUMPDEST
00002bb3: PUSH0
00002bb4: PUSH2 0x15de
00002bb7: DUP4
00002bb8: PUSH1 0x01
00002bba: PUSH1 0x01
00002bbc: PUSH1 0xa0
00002bbe: SHL
00002bbf: SUB
00002bc0: DUP5
00002bc1: AND
00002bc2: JUMPDEST
00002bc3: PUSH0
00002bc4: DUP2
00002bc5: DUP2
00002bc6: MSTORE
00002bc7: PUSH1 0x01
00002bc9: DUP4
00002bca: ADD
00002bcb: PUSH1 0x20
00002bcd: MSTORE
00002bce: PUSH1 0x40
00002bd0: DUP2
00002bd1: KECCAK256
00002bd2: SLOAD
00002bd3: PUSH2 0x2c07
00002bd6: JUMPI
00002bd7: POP
00002bd8: DUP2
00002bd9: SLOAD
00002bda: PUSH1 0x01
00002bdc: DUP2
00002bdd: DUP2
00002bde: ADD
00002bdf: DUP5
00002be0: SSTORE
00002be1: PUSH0
00002be2: DUP5
00002be3: DUP2
00002be4: MSTORE
00002be5: PUSH1 0x20
00002be7: DUP1
00002be8: DUP3
00002be9: KECCAK256
00002bea: SWAP1
00002beb: SWAP4
00002bec: ADD
00002bed: DUP5
00002bee: SWAP1
00002bef: SSTORE
00002bf0: DUP5
00002bf1: SLOAD
00002bf2: DUP5
00002bf3: DUP3
00002bf4: MSTORE
00002bf5: DUP3
00002bf6: DUP7
00002bf7: ADD
00002bf8: SWAP1
00002bf9: SWAP4
00002bfa: MSTORE
00002bfb: PUSH1 0x40
00002bfd: SWAP1
00002bfe: KECCAK256
00002bff: SWAP2
00002c00: SWAP1
00002c01: SWAP2
00002c02: SSTORE
00002c03: PUSH2 0x0bc7
00002c06: JUMP
00002c07: JUMPDEST
00002c08: POP
00002c09: PUSH0
00002c0a: PUSH2 0x0bc7
00002c0d: JUMP
00002c0e: JUMPDEST
00002c0f: PUSH0
00002c10: PUSH0
00002c11: DUP1
00002c12: MLOAD
00002c13: PUSH1 0x20
00002c15: PUSH2 0x36ee
00002c18: DUP4
00002c19: CODECOPY
00002c1a: DUP2
00002c1b: MLOAD
00002c1c: SWAP2
00002c1d: MSTORE
00002c1e: PUSH2 0x2c27
00002c21: DUP5
00002c22: DUP5
00002c23: PUSH2 0x1554
00002c26: JUMP
00002c27: JUMPDEST
00002c28: ISZERO
00002c29: PUSH2 0x2ba9
00002c2c: JUMPI
00002c2d: PUSH0
00002c2e: DUP5
00002c2f: DUP2
00002c30: MSTORE
00002c31: PUSH1 0x20
00002c33: DUP3
00002c34: DUP2
00002c35: MSTORE
00002c36: PUSH1 0x40
00002c38: DUP1
00002c39: DUP4
00002c3a: KECCAK256
00002c3b: PUSH1 0x01
00002c3d: PUSH1 0x01
00002c3f: PUSH1 0xa0
00002c41: SHL
00002c42: SUB
00002c43: DUP8
00002c44: AND
00002c45: DUP1
00002c46: DUP6
00002c47: MSTORE
00002c48: SWAP3
00002c49: MSTORE
00002c4a: DUP1
00002c4b: DUP4
00002c4c: KECCAK256
00002c4d: DUP1
00002c4e: SLOAD
00002c4f: PUSH1 0xff
00002c51: NOT
00002c52: AND
00002c53: SWAP1
00002c54: SSTORE
00002c55: MLOAD
00002c56: CALLER
00002c57: SWAP3
00002c58: DUP8
00002c59: SWAP2
00002c5a: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b
00002c7b: SWAP2
00002c7c: SWAP1
00002c7d: LOG4
00002c7e: PUSH1 0x01
00002c80: SWAP2
00002c81: POP
00002c82: POP
00002c83: PUSH2 0x0bc7
00002c86: JUMP
00002c87: JUMPDEST
00002c88: PUSH0
00002c89: PUSH2 0x15de
00002c8c: DUP4
00002c8d: PUSH1 0x01
00002c8f: PUSH1 0x01
00002c91: PUSH1 0xa0
00002c93: SHL
00002c94: SUB
00002c95: DUP5
00002c96: AND
00002c97: JUMPDEST
00002c98: PUSH0
00002c99: DUP2
00002c9a: DUP2
00002c9b: MSTORE
00002c9c: PUSH1 0x01
00002c9e: DUP4
00002c9f: ADD
00002ca0: PUSH1 0x20
00002ca2: MSTORE
00002ca3: PUSH1 0x40
00002ca5: DUP2
00002ca6: KECCAK256
00002ca7: SLOAD
00002ca8: DUP1
00002ca9: ISZERO
00002caa: PUSH2 0x2ba9
00002cad: JUMPI
00002cae: PUSH0
00002caf: PUSH2 0x2cb9
00002cb2: PUSH1 0x01
00002cb4: DUP4
00002cb5: PUSH2 0x33d9
00002cb8: JUMP
00002cb9: JUMPDEST
00002cba: DUP6
00002cbb: SLOAD
00002cbc: SWAP1
00002cbd: SWAP2
00002cbe: POP
00002cbf: PUSH0
00002cc0: SWAP1
00002cc1: PUSH2 0x2ccc
00002cc4: SWAP1
00002cc5: PUSH1 0x01
00002cc7: SWAP1
00002cc8: PUSH2 0x33d9
00002ccb: JUMP
00002ccc: JUMPDEST
00002ccd: SWAP1
00002cce: POP
00002ccf: DUP1
00002cd0: DUP3
00002cd1: EQ
00002cd2: PUSH2 0x2d2b
00002cd5: JUMPI
00002cd6: PUSH0
00002cd7: DUP7
00002cd8: PUSH0
00002cd9: ADD
00002cda: DUP3
00002cdb: DUP2
00002cdc: SLOAD
00002cdd: DUP2
00002cde: LT
00002cdf: PUSH2 0x2cea
00002ce2: JUMPI
00002ce3: PUSH2 0x2cea
00002ce6: PUSH2 0x3317
00002ce9: JUMP
00002cea: JUMPDEST
00002ceb: SWAP1
00002cec: PUSH0
00002ced: MSTORE
00002cee: PUSH1 0x20
00002cf0: PUSH0
00002cf1: KECCAK256
00002cf2: ADD
00002cf3: SLOAD
00002cf4: SWAP1
00002cf5: POP
00002cf6: DUP1
00002cf7: DUP8
00002cf8: PUSH0
00002cf9: ADD
00002cfa: DUP5
00002cfb: DUP2
00002cfc: SLOAD
00002cfd: DUP2
00002cfe: LT
00002cff: PUSH2 0x2d0a
00002d02: JUMPI
00002d03: PUSH2 0x2d0a
00002d06: PUSH2 0x3317
00002d09: JUMP
00002d0a: JUMPDEST
00002d0b: PUSH0
00002d0c: SWAP2
00002d0d: DUP3
00002d0e: MSTORE
00002d0f: PUSH1 0x20
00002d11: DUP1
00002d12: DUP4
00002d13: KECCAK256
00002d14: SWAP1
00002d15: SWAP2
00002d16: ADD
00002d17: SWAP3
00002d18: SWAP1
00002d19: SWAP3
00002d1a: SSTORE
00002d1b: SWAP2
00002d1c: DUP3
00002d1d: MSTORE
00002d1e: PUSH1 0x01
00002d20: DUP9
00002d21: ADD
00002d22: SWAP1
00002d23: MSTORE
00002d24: PUSH1 0x40
00002d26: SWAP1
00002d27: KECCAK256
00002d28: DUP4
00002d29: SWAP1
00002d2a: SSTORE
00002d2b: JUMPDEST
00002d2c: DUP6
00002d2d: SLOAD
00002d2e: DUP7
00002d2f: SWAP1
00002d30: DUP1
00002d31: PUSH2 0x2d3c
00002d34: JUMPI
00002d35: PUSH2 0x2d3c
00002d38: PUSH2 0x3699
00002d3b: JUMP
00002d3c: JUMPDEST
00002d3d: PUSH1 0x01
00002d3f: SWAP1
00002d40: SUB
00002d41: DUP2
00002d42: DUP2
00002d43: SWAP1
00002d44: PUSH0
00002d45: MSTORE
00002d46: PUSH1 0x20
00002d48: PUSH0
00002d49: KECCAK256
00002d4a: ADD
00002d4b: PUSH0
00002d4c: SWAP1
00002d4d: SSTORE
00002d4e: SWAP1
00002d4f: SSTORE
00002d50: DUP6
00002d51: PUSH1 0x01
00002d53: ADD
00002d54: PUSH0
00002d55: DUP7
00002d56: DUP2
00002d57: MSTORE
00002d58: PUSH1 0x20
00002d5a: ADD
00002d5b: SWAP1
00002d5c: DUP2
00002d5d: MSTORE
00002d5e: PUSH1 0x20
00002d60: ADD
00002d61: PUSH0
00002d62: KECCAK256
00002d63: PUSH0
00002d64: SWAP1
00002d65: SSTORE
00002d66: PUSH1 0x01
00002d68: SWAP4
00002d69: POP
00002d6a: POP
00002d6b: POP
00002d6c: POP
00002d6d: PUSH2 0x0bc7
00002d70: JUMP
00002d71: JUMPDEST
00002d72: DUP1
00002d73: MLOAD
00002d74: ISZERO
00002d75: PUSH2 0x2d81
00002d78: JUMPI
00002d79: DUP1
00002d7a: MLOAD
00002d7b: DUP1
00002d7c: DUP3
00002d7d: PUSH1 0x20
00002d7f: ADD
00002d80: REVERT
00002d81: JUMPDEST
00002d82: PUSH1 0x40
00002d84: MLOAD
00002d85: PUSH4 0xd6bda275
00002d8a: PUSH1 0xe0
00002d8c: SHL
00002d8d: DUP2
00002d8e: MSTORE
00002d8f: PUSH1 0x04
00002d91: ADD
00002d92: PUSH1 0x40
00002d94: MLOAD
00002d95: DUP1
00002d96: SWAP2
00002d97: SUB
00002d98: SWAP1
00002d99: REVERT
00002d9a: JUMPDEST
00002d9b: PUSH0
00002d9c: PUSH1 0xa0
00002d9e: DUP3
00002d9f: DUP5
00002da0: SUB
00002da1: SLT
00002da2: ISZERO
00002da3: PUSH2 0x2daa
00002da6: JUMPI
00002da7: PUSH0
00002da8: DUP1
00002da9: REVERT
00002daa: JUMPDEST
00002dab: POP
00002dac: SWAP2
00002dad: SWAP1
00002dae: POP
00002daf: JUMP
00002db0: JUMPDEST
00002db1: PUSH0
00002db2: PUSH1 0xa0
00002db4: DUP3
00002db5: DUP5
00002db6: SUB
00002db7: SLT
00002db8: ISZERO
00002db9: PUSH2 0x2dc0
00002dbc: JUMPI
00002dbd: PUSH0
00002dbe: DUP1
00002dbf: REVERT
00002dc0: JUMPDEST
00002dc1: PUSH2 0x15de
00002dc4: DUP4
00002dc5: DUP4
00002dc6: PUSH2 0x2d9a
00002dc9: JUMP
00002dca: JUMPDEST
00002dcb: PUSH0
00002dcc: PUSH1 0x20
00002dce: DUP3
00002dcf: DUP5
00002dd0: SUB
00002dd1: SLT
00002dd2: ISZERO
00002dd3: PUSH2 0x2dda
00002dd6: JUMPI
00002dd7: PUSH0
00002dd8: DUP1
00002dd9: REVERT
00002dda: JUMPDEST
00002ddb: DUP2
00002ddc: CALLDATALOAD
00002ddd: PUSH1 0x01
00002ddf: PUSH1 0x01
00002de1: PUSH1 0xe0
00002de3: SHL
00002de4: SUB
00002de5: NOT
00002de6: DUP2
00002de7: AND
00002de8: DUP2
00002de9: EQ
00002dea: PUSH2 0x15de
00002ded: JUMPI
00002dee: PUSH0
00002def: DUP1
00002df0: REVERT
00002df1: JUMPDEST
00002df2: PUSH0
00002df3: DUP1
00002df4: DUP4
00002df5: PUSH1 0x1f
00002df7: DUP5
00002df8: ADD
00002df9: SLT
00002dfa: PUSH2 0x2e01
00002dfd: JUMPI
00002dfe: PUSH0
00002dff: DUP1
00002e00: REVERT
00002e01: JUMPDEST
00002e02: POP
00002e03: DUP2
00002e04: CALLDATALOAD
00002e05: PUSH8 0xffffffffffffffff
00002e0e: DUP2
00002e0f: GT
00002e10: ISZERO
00002e11: PUSH2 0x2e18
00002e14: JUMPI
00002e15: PUSH0
00002e16: DUP1
00002e17: REVERT
00002e18: JUMPDEST
00002e19: PUSH1 0x20
00002e1b: DUP4
00002e1c: ADD
00002e1d: SWAP2
00002e1e: POP
00002e1f: DUP4
00002e20: PUSH1 0x20
00002e22: DUP3
00002e23: DUP6
00002e24: ADD
00002e25: ADD
00002e26: GT
00002e27: ISZERO
00002e28: PUSH2 0x2e2f
00002e2b: JUMPI
00002e2c: PUSH0
00002e2d: DUP1
00002e2e: REVERT
00002e2f: JUMPDEST
00002e30: SWAP3
00002e31: POP
00002e32: SWAP3
00002e33: SWAP1
00002e34: POP
00002e35: JUMP
00002e36: JUMPDEST
00002e37: PUSH0
00002e38: DUP1
00002e39: PUSH1 0x20
00002e3b: DUP4
00002e3c: DUP6
00002e3d: SUB
00002e3e: SLT
00002e3f: ISZERO
00002e40: PUSH2 0x2e47
00002e43: JUMPI
00002e44: PUSH0
00002e45: DUP1
00002e46: REVERT
00002e47: JUMPDEST
00002e48: DUP3
00002e49: CALLDATALOAD
00002e4a: PUSH8 0xffffffffffffffff
00002e53: DUP2
00002e54: GT
00002e55: ISZERO
00002e56: PUSH2 0x2e5d
00002e59: JUMPI
00002e5a: PUSH0
00002e5b: DUP1
00002e5c: REVERT
00002e5d: JUMPDEST
00002e5e: PUSH2 0x2e69
00002e61: DUP6
00002e62: DUP3
00002e63: DUP7
00002e64: ADD
00002e65: PUSH2 0x2df1
00002e68: JUMP
00002e69: JUMPDEST
00002e6a: SWAP1
00002e6b: SWAP7
00002e6c: SWAP1
00002e6d: SWAP6
00002e6e: POP
00002e6f: SWAP4
00002e70: POP
00002e71: POP
00002e72: POP
00002e73: POP
00002e74: JUMP
00002e75: JUMPDEST
00002e76: PUSH0
00002e77: PUSH1 0x20
00002e79: DUP3
00002e7a: DUP5
00002e7b: SUB
00002e7c: SLT
00002e7d: ISZERO
00002e7e: PUSH2 0x2e85
00002e81: JUMPI
00002e82: PUSH0
00002e83: DUP1
00002e84: REVERT
00002e85: JUMPDEST
00002e86: POP
00002e87: CALLDATALOAD
00002e88: SWAP2
00002e89: SWAP1
00002e8a: POP
00002e8b: JUMP
00002e8c: JUMPDEST
00002e8d: PUSH1 0x01
00002e8f: PUSH1 0x01
00002e91: PUSH1 0xa0
00002e93: SHL
00002e94: SUB
00002e95: DUP2
00002e96: AND
00002e97: DUP2
00002e98: EQ
00002e99: PUSH2 0x0d1f
00002e9c: JUMPI
00002e9d: PUSH0
00002e9e: DUP1
00002e9f: REVERT
00002ea0: JUMPDEST
00002ea1: DUP1
00002ea2: CALLDATALOAD
00002ea3: PUSH2 0x2eab
00002ea6: DUP2
00002ea7: PUSH2 0x2e8c
00002eaa: JUMP
00002eab: JUMPDEST
00002eac: SWAP2
00002ead: SWAP1
00002eae: POP
00002eaf: JUMP
00002eb0: JUMPDEST
00002eb1: PUSH0
00002eb2: DUP1
00002eb3: PUSH1 0x40
00002eb5: DUP4
00002eb6: DUP6
00002eb7: SUB
00002eb8: SLT
00002eb9: ISZERO
00002eba: PUSH2 0x2ec1
00002ebd: JUMPI
00002ebe: PUSH0
00002ebf: DUP1
00002ec0: REVERT
00002ec1: JUMPDEST
00002ec2: DUP3
00002ec3: CALLDATALOAD
00002ec4: SWAP2
00002ec5: POP
00002ec6: PUSH1 0x20
00002ec8: DUP4
00002ec9: ADD
00002eca: CALLDATALOAD
00002ecb: PUSH2 0x2ed3
00002ece: DUP2
00002ecf: PUSH2 0x2e8c
00002ed2: JUMP
00002ed3: JUMPDEST
00002ed4: DUP1
00002ed5: SWAP2
00002ed6: POP
00002ed7: POP
00002ed8: SWAP3
00002ed9: POP
00002eda: SWAP3
00002edb: SWAP1
00002edc: POP
00002edd: JUMP
00002ede: JUMPDEST
00002edf: PUSH0
00002ee0: DUP1
00002ee1: PUSH1 0x40
00002ee3: DUP4
00002ee4: DUP6
00002ee5: SUB
00002ee6: SLT
00002ee7: ISZERO
00002ee8: PUSH2 0x2eef
00002eeb: JUMPI
00002eec: PUSH0
00002eed: DUP1
00002eee: REVERT
00002eef: JUMPDEST
00002ef0: DUP3
00002ef1: CALLDATALOAD
00002ef2: PUSH2 0x2efa
00002ef5: DUP2
00002ef6: PUSH2 0x2e8c
00002ef9: JUMP
00002efa: JUMPDEST
00002efb: SWAP5
00002efc: PUSH1 0x20
00002efe: SWAP4
00002eff: SWAP1
00002f00: SWAP4
00002f01: ADD
00002f02: CALLDATALOAD
00002f03: SWAP4
00002f04: POP
00002f05: POP
00002f06: POP
00002f07: JUMP
00002f08: JUMPDEST
00002f09: PUSH0
00002f0a: PUSH1 0x20
00002f0c: DUP3
00002f0d: DUP5
00002f0e: SUB
00002f0f: SLT
00002f10: ISZERO
00002f11: PUSH2 0x2f18
00002f14: JUMPI
00002f15: PUSH0
00002f16: DUP1
00002f17: REVERT
00002f18: JUMPDEST
00002f19: DUP2
00002f1a: CALLDATALOAD
00002f1b: PUSH2 0x15de
00002f1e: DUP2
00002f1f: PUSH2 0x2e8c
00002f22: JUMP
00002f23: JUMPDEST
00002f24: PUSH0
00002f25: DUP1
00002f26: PUSH1 0x40
00002f28: DUP4
00002f29: DUP6
00002f2a: SUB
00002f2b: SLT
00002f2c: ISZERO
00002f2d: PUSH2 0x2f34
00002f30: JUMPI
00002f31: PUSH0
00002f32: DUP1
00002f33: REVERT
00002f34: JUMPDEST
00002f35: POP
00002f36: POP
00002f37: DUP1
00002f38: CALLDATALOAD
00002f39: SWAP3
00002f3a: PUSH1 0x20
00002f3c: SWAP1
00002f3d: SWAP2
00002f3e: ADD
00002f3f: CALLDATALOAD
00002f40: SWAP2
00002f41: POP
00002f42: JUMP
00002f43: JUMPDEST
00002f44: PUSH0
00002f45: DUP1
00002f46: PUSH0
00002f47: DUP1
00002f48: DUP5
00002f49: DUP7
00002f4a: SUB
00002f4b: PUSH2 0x0240
00002f4e: DUP2
00002f4f: SLT
00002f50: ISZERO
00002f51: PUSH2 0x2f58
00002f54: JUMPI
00002f55: PUSH0
00002f56: DUP1
00002f57: REVERT
00002f58: JUMPDEST
00002f59: PUSH2 0x2f62
00002f5c: DUP8
00002f5d: DUP8
00002f5e: PUSH2 0x2d9a
00002f61: JUMP
00002f62: JUMPDEST
00002f63: SWAP5
00002f64: POP
00002f65: PUSH2 0x0180
00002f68: PUSH1 0x9f
00002f6a: NOT
00002f6b: DUP3
00002f6c: ADD
00002f6d: SLT
00002f6e: ISZERO
00002f6f: PUSH2 0x2f76
00002f72: JUMPI
00002f73: PUSH0
00002f74: DUP1
00002f75: REVERT
00002f76: JUMPDEST
00002f77: POP
00002f78: PUSH1 0xa0
00002f7a: DUP6
00002f7b: ADD
00002f7c: SWAP3
00002f7d: POP
00002f7e: PUSH2 0x0220
00002f81: DUP6
00002f82: ADD
00002f83: CALLDATALOAD
00002f84: PUSH8 0xffffffffffffffff
00002f8d: DUP2
00002f8e: GT
00002f8f: ISZERO
00002f90: PUSH2 0x2f97
00002f93: JUMPI
00002f94: PUSH0
00002f95: DUP1
00002f96: REVERT
00002f97: JUMPDEST
00002f98: PUSH2 0x2fa3
00002f9b: DUP8
00002f9c: DUP3
00002f9d: DUP9
00002f9e: ADD
00002f9f: PUSH2 0x2df1
00002fa2: JUMP
00002fa3: JUMPDEST
00002fa4: SWAP6
00002fa5: SWAP9
00002fa6: SWAP5
00002fa7: SWAP8
00002fa8: POP
00002fa9: SWAP6
00002faa: POP
00002fab: POP
00002fac: POP
00002fad: POP
00002fae: JUMP
00002faf: JUMPDEST
00002fb0: PUSH1 0x20
00002fb2: DUP1
00002fb3: DUP3
00002fb4: MSTORE
00002fb5: DUP3
00002fb6: MLOAD
00002fb7: DUP3
00002fb8: DUP3
00002fb9: ADD
00002fba: DUP2
00002fbb: SWAP1
00002fbc: MSTORE
00002fbd: PUSH0
00002fbe: SWAP2
00002fbf: SWAP1
00002fc0: DUP5
00002fc1: DUP3
00002fc2: ADD
00002fc3: SWAP1
00002fc4: PUSH1 0x40
00002fc6: DUP6
00002fc7: ADD
00002fc8: SWAP1
00002fc9: DUP5
00002fca: JUMPDEST
00002fcb: DUP2
00002fcc: DUP2
00002fcd: LT
00002fce: ISZERO
00002fcf: PUSH2 0x2fef
00002fd2: JUMPI
00002fd3: DUP4
00002fd4: MLOAD
00002fd5: PUSH1 0x01
00002fd7: PUSH1 0x01
00002fd9: PUSH1 0xa0
00002fdb: SHL
00002fdc: SUB
00002fdd: AND
00002fde: DUP4
00002fdf: MSTORE
00002fe0: SWAP3
00002fe1: DUP5
00002fe2: ADD
00002fe3: SWAP3
00002fe4: SWAP2
00002fe5: DUP5
00002fe6: ADD
00002fe7: SWAP2
00002fe8: PUSH1 0x01
00002fea: ADD
00002feb: PUSH2 0x2fca
00002fee: JUMP
00002fef: JUMPDEST
00002ff0: POP
00002ff1: SWAP1
00002ff2: SWAP7
00002ff3: SWAP6
00002ff4: POP
00002ff5: POP
00002ff6: POP
00002ff7: POP
00002ff8: POP
00002ff9: POP
00002ffa: JUMP
00002ffb: JUMPDEST
00002ffc: PUSH0
00002ffd: DUP1
00002ffe: PUSH0
00002fff: PUSH1 0x60
00003001: DUP5
00003002: DUP7
00003003: SUB
00003004: SLT
00003005: ISZERO
00003006: PUSH2 0x300d
00003009: JUMPI
0000300a: PUSH0
0000300b: DUP1
0000300c: REVERT
0000300d: JUMPDEST
0000300e: DUP4
0000300f: CALLDATALOAD
00003010: PUSH2 0x3018
00003013: DUP2
00003014: PUSH2 0x2e8c
00003017: JUMP
00003018: JUMPDEST
00003019: SWAP3
0000301a: POP
0000301b: PUSH1 0x20
0000301d: DUP5
0000301e: ADD
0000301f: CALLDATALOAD
00003020: PUSH2 0x3028
00003023: DUP2
00003024: PUSH2 0x2e8c
00003027: JUMP
00003028: JUMPDEST
00003029: SWAP3
0000302a: SWAP6
0000302b: SWAP3
0000302c: SWAP5
0000302d: POP
0000302e: POP
0000302f: POP
00003030: PUSH1 0x40
00003032: SWAP2
00003033: SWAP1
00003034: SWAP2
00003035: ADD
00003036: CALLDATALOAD
00003037: SWAP1
00003038: JUMP
00003039: JUMPDEST
0000303a: PUSH0
0000303b: DUP1
0000303c: PUSH0
0000303d: DUP1
0000303e: PUSH1 0xe0
00003040: DUP6
00003041: DUP8
00003042: SUB
00003043: SLT
00003044: ISZERO
00003045: PUSH2 0x304c
00003048: JUMPI
00003049: PUSH0
0000304a: DUP1
0000304b: REVERT
0000304c: JUMPDEST
0000304d: PUSH2 0x3056
00003050: DUP7
00003051: DUP7
00003052: PUSH2 0x2d9a
00003055: JUMP
00003056: JUMPDEST
00003057: SWAP4
00003058: POP
00003059: PUSH1 0xa0
0000305b: DUP6
0000305c: ADD
0000305d: CALLDATALOAD
0000305e: PUSH2 0x3066
00003061: DUP2
00003062: PUSH2 0x2e8c
00003065: JUMP
00003066: JUMPDEST
00003067: SWAP3
00003068: POP
00003069: PUSH1 0xc0
0000306b: DUP6
0000306c: ADD
0000306d: CALLDATALOAD
0000306e: PUSH8 0xffffffffffffffff
00003077: DUP2
00003078: GT
00003079: ISZERO
0000307a: PUSH2 0x2f97
0000307d: JUMPI
0000307e: PUSH0
0000307f: DUP1
00003080: REVERT
00003081: JUMPDEST
00003082: PUSH1 0x20
00003084: DUP2
00003085: MSTORE
00003086: PUSH0
00003087: DUP3
00003088: MLOAD
00003089: DUP1
0000308a: PUSH1 0x20
0000308c: DUP5
0000308d: ADD
0000308e: MSTORE
0000308f: DUP1
00003090: PUSH1 0x20
00003092: DUP6
00003093: ADD
00003094: PUSH1 0x40
00003096: DUP6
00003097: ADD
00003098: MCOPY
00003099: PUSH0
0000309a: PUSH1 0x40
0000309c: DUP3
0000309d: DUP6
0000309e: ADD
0000309f: ADD
000030a0: MSTORE
000030a1: PUSH1 0x40
000030a3: PUSH1 0x1f
000030a5: NOT
000030a6: PUSH1 0x1f
000030a8: DUP4
000030a9: ADD
000030aa: AND
000030ab: DUP5
000030ac: ADD
000030ad: ADD
000030ae: SWAP2
000030af: POP
000030b0: POP
000030b1: SWAP3
000030b2: SWAP2
000030b3: POP
000030b4: POP
000030b5: JUMP
000030b6: JUMPDEST
000030b7: PUSH0
000030b8: DUP1
000030b9: PUSH1 0x40
000030bb: DUP4
000030bc: DUP6
000030bd: SUB
000030be: SLT
000030bf: ISZERO
000030c0: PUSH2 0x30c7
000030c3: JUMPI
000030c4: PUSH0
000030c5: DUP1
000030c6: REVERT
000030c7: JUMPDEST
000030c8: DUP3
000030c9: CALLDATALOAD
000030ca: PUSH2 0x30d2
000030cd: DUP2
000030ce: PUSH2 0x2e8c
000030d1: JUMP
000030d2: JUMPDEST
000030d3: SWAP2
000030d4: POP
000030d5: PUSH1 0x20
000030d7: DUP4
000030d8: ADD
000030d9: CALLDATALOAD
000030da: PUSH2 0x2ed3
000030dd: DUP2
000030de: PUSH2 0x2e8c
000030e1: JUMP
000030e2: JUMPDEST
000030e3: DUP2
000030e4: DUP4
000030e5: MSTORE
000030e6: DUP2
000030e7: DUP2
000030e8: PUSH1 0x20
000030ea: DUP6
000030eb: ADD
000030ec: CALLDATACOPY
000030ed: POP
000030ee: PUSH0
000030ef: DUP3
000030f0: DUP3
000030f1: ADD
000030f2: PUSH1 0x20
000030f4: SWAP1
000030f5: DUP2
000030f6: ADD
000030f7: SWAP2
000030f8: SWAP1
000030f9: SWAP2
000030fa: MSTORE
000030fb: PUSH1 0x1f
000030fd: SWAP1
000030fe: SWAP2
000030ff: ADD
00003100: PUSH1 0x1f
00003102: NOT
00003103: AND
00003104: SWAP1
00003105: SWAP2
00003106: ADD
00003107: ADD
00003108: SWAP1
00003109: JUMP
0000310a: JUMPDEST
0000310b: PUSH1 0x20
0000310d: DUP2
0000310e: MSTORE
0000310f: PUSH0
00003110: PUSH2 0x13d9
00003113: PUSH1 0x20
00003115: DUP4
00003116: ADD
00003117: DUP5
00003118: DUP7
00003119: PUSH2 0x30e2
0000311c: JUMP
0000311d: JUMPDEST
0000311e: PUSH4 0x4e487b71
00003123: PUSH1 0xe0
00003125: SHL
00003126: PUSH0
00003127: MSTORE
00003128: PUSH1 0x41
0000312a: PUSH1 0x04
0000312c: MSTORE
0000312d: PUSH1 0x24
0000312f: PUSH0
00003130: REVERT
00003131: JUMPDEST
00003132: PUSH1 0x40
00003134: MLOAD
00003135: PUSH2 0x0180
00003138: DUP2
00003139: ADD
0000313a: PUSH8 0xffffffffffffffff
00003143: DUP2
00003144: GT
00003145: DUP3
00003146: DUP3
00003147: LT
00003148: OR
00003149: ISZERO
0000314a: PUSH2 0x3155
0000314d: JUMPI
0000314e: PUSH2 0x3155
00003151: PUSH2 0x311d
00003154: JUMP
00003155: JUMPDEST
00003156: PUSH1 0x40
00003158: MSTORE
00003159: SWAP1
0000315a: JUMP
0000315b: JUMPDEST
0000315c: PUSH1 0x40
0000315e: MLOAD
0000315f: PUSH1 0x1f
00003161: DUP3
00003162: ADD
00003163: PUSH1 0x1f
00003165: NOT
00003166: AND
00003167: DUP2
00003168: ADD
00003169: PUSH8 0xffffffffffffffff
00003172: DUP2
00003173: GT
00003174: DUP3
00003175: DUP3
00003176: LT
00003177: OR
00003178: ISZERO
00003179: PUSH2 0x3184
0000317c: JUMPI
0000317d: PUSH2 0x3184
00003180: PUSH2 0x311d
00003183: JUMP
00003184: JUMPDEST
00003185: PUSH1 0x40
00003187: MSTORE
00003188: SWAP2
00003189: SWAP1
0000318a: POP
0000318b: JUMP
0000318c: JUMPDEST
0000318d: PUSH0
0000318e: PUSH8 0xffffffffffffffff
00003197: DUP3
00003198: GT
00003199: ISZERO
0000319a: PUSH2 0x31a5
0000319d: JUMPI
0000319e: PUSH2 0x31a5
000031a1: PUSH2 0x311d
000031a4: JUMP
000031a5: JUMPDEST
000031a6: POP
000031a7: PUSH1 0x05
000031a9: SHL
000031aa: PUSH1 0x20
000031ac: ADD
000031ad: SWAP1
000031ae: JUMP
000031af: JUMPDEST
000031b0: PUSH0
000031b1: DUP3
000031b2: PUSH1 0x1f
000031b4: DUP4
000031b5: ADD
000031b6: SLT
000031b7: PUSH2 0x31be
000031ba: JUMPI
000031bb: PUSH0
000031bc: DUP1
000031bd: REVERT
000031be: JUMPDEST
000031bf: DUP2
000031c0: CALLDATALOAD
000031c1: PUSH1 0x20
000031c3: PUSH2 0x31d3
000031c6: PUSH2 0x31ce
000031c9: DUP4
000031ca: PUSH2 0x318c
000031cd: JUMP
000031ce: JUMPDEST
000031cf: PUSH2 0x315b
000031d2: JUMP
000031d3: JUMPDEST
000031d4: DUP1
000031d5: DUP4
000031d6: DUP3
000031d7: MSTORE
000031d8: PUSH1 0x20
000031da: DUP3
000031db: ADD
000031dc: SWAP2
000031dd: POP
000031de: PUSH1 0x20
000031e0: DUP5
000031e1: PUSH1 0x05
000031e3: SHL
000031e4: DUP8
000031e5: ADD
000031e6: ADD
000031e7: SWAP4
000031e8: POP
000031e9: DUP7
000031ea: DUP5
000031eb: GT
000031ec: ISZERO
000031ed: PUSH2 0x31f4
000031f0: JUMPI
000031f1: PUSH0
000031f2: DUP1
000031f3: REVERT
000031f4: JUMPDEST
000031f5: PUSH1 0x20
000031f7: DUP7
000031f8: ADD
000031f9: JUMPDEST
000031fa: DUP5
000031fb: DUP2
000031fc: LT
000031fd: ISZERO
000031fe: PUSH2 0x3210
00003201: JUMPI
00003202: DUP1
00003203: CALLDATALOAD
00003204: DUP4
00003205: MSTORE
00003206: SWAP2
00003207: DUP4
00003208: ADD
00003209: SWAP2
0000320a: DUP4
0000320b: ADD
0000320c: PUSH2 0x31f9
0000320f: JUMP
00003210: JUMPDEST
00003211: POP
00003212: SWAP7
00003213: SWAP6
00003214: POP
00003215: POP
00003216: POP
00003217: POP
00003218: POP
00003219: POP
0000321a: JUMP
0000321b: JUMPDEST
0000321c: PUSH0
0000321d: DUP1
0000321e: PUSH0
0000321f: DUP1
00003220: PUSH0
00003221: DUP1
00003222: PUSH1 0xc0
00003224: DUP8
00003225: DUP10
00003226: SUB
00003227: SLT
00003228: ISZERO
00003229: PUSH2 0x3230
0000322c: JUMPI
0000322d: PUSH0
0000322e: DUP1
0000322f: REVERT
00003230: JUMPDEST
00003231: DUP7
00003232: CALLDATALOAD
00003233: PUSH2 0x323b
00003236: DUP2
00003237: PUSH2 0x2e8c
0000323a: JUMP
0000323b: JUMPDEST
0000323c: SWAP6
0000323d: POP
0000323e: PUSH1 0x20
00003240: DUP8
00003241: DUP2
00003242: ADD
00003243: CALLDATALOAD
00003244: PUSH2 0x324c
00003247: DUP2
00003248: PUSH2 0x2e8c
0000324b: JUMP
0000324c: JUMPDEST
0000324d: SWAP6
0000324e: POP
0000324f: PUSH1 0x40
00003251: DUP9
00003252: ADD
00003253: CALLDATALOAD
00003254: PUSH2 0x325c
00003257: DUP2
00003258: PUSH2 0x2e8c
0000325b: JUMP
0000325c: JUMPDEST
0000325d: SWAP5
0000325e: POP
0000325f: PUSH1 0x60
00003261: DUP9
00003262: ADD
00003263: CALLDATALOAD
00003264: SWAP4
00003265: POP
00003266: PUSH1 0x80
00003268: DUP9
00003269: ADD
0000326a: CALLDATALOAD
0000326b: PUSH8 0xffffffffffffffff
00003274: DUP1
00003275: DUP3
00003276: GT
00003277: ISZERO
00003278: PUSH2 0x327f
0000327b: JUMPI
0000327c: PUSH0
0000327d: DUP1
0000327e: REVERT
0000327f: JUMPDEST
00003280: DUP2
00003281: DUP11
00003282: ADD
00003283: SWAP2
00003284: POP
00003285: DUP11
00003286: PUSH1 0x1f
00003288: DUP4
00003289: ADD
0000328a: SLT
0000328b: PUSH2 0x3292
0000328e: JUMPI
0000328f: PUSH0
00003290: DUP1
00003291: REVERT
00003292: JUMPDEST
00003293: DUP2
00003294: CALLDATALOAD
00003295: PUSH2 0x32a0
00003298: PUSH2 0x31ce
0000329b: DUP3
0000329c: PUSH2 0x318c
0000329f: JUMP
000032a0: JUMPDEST
000032a1: DUP2
000032a2: DUP2
000032a3: MSTORE
000032a4: PUSH1 0x05
000032a6: SWAP2
000032a7: SWAP1
000032a8: SWAP2
000032a9: SHL
000032aa: DUP4
000032ab: ADD
000032ac: DUP5
000032ad: ADD
000032ae: SWAP1
000032af: DUP5
000032b0: DUP2
000032b1: ADD
000032b2: SWAP1
000032b3: DUP14
000032b4: DUP4
000032b5: GT
000032b6: ISZERO
000032b7: PUSH2 0x32be
000032ba: JUMPI
000032bb: PUSH0
000032bc: DUP1
000032bd: REVERT
000032be: JUMPDEST
000032bf: SWAP4
000032c0: DUP6
000032c1: ADD
000032c2: SWAP4
000032c3: JUMPDEST
000032c4: DUP3
000032c5: DUP6
000032c6: LT
000032c7: ISZERO
000032c8: PUSH2 0x32e5
000032cb: JUMPI
000032cc: DUP5
000032cd: CALLDATALOAD
000032ce: PUSH2 0x32d6
000032d1: DUP2
000032d2: PUSH2 0x2e8c
000032d5: JUMP
000032d6: JUMPDEST
000032d7: DUP3
000032d8: MSTORE
000032d9: SWAP4
000032da: DUP6
000032db: ADD
000032dc: SWAP4
000032dd: SWAP1
000032de: DUP6
000032df: ADD
000032e0: SWAP1
000032e1: PUSH2 0x32c3
000032e4: JUMP
000032e5: JUMPDEST
000032e6: SWAP7
000032e7: POP
000032e8: POP
000032e9: POP
000032ea: PUSH1 0xa0
000032ec: DUP11
000032ed: ADD
000032ee: CALLDATALOAD
000032ef: SWAP3
000032f0: POP
000032f1: DUP1
000032f2: DUP4
000032f3: GT
000032f4: ISZERO
000032f5: PUSH2 0x32fc
000032f8: JUMPI
000032f9: PUSH0
000032fa: DUP1
000032fb: REVERT
000032fc: JUMPDEST
000032fd: POP
000032fe: POP
000032ff: PUSH2 0x330a
00003302: DUP10
00003303: DUP3
00003304: DUP11
00003305: ADD
00003306: PUSH2 0x31af
00003309: JUMP
0000330a: JUMPDEST
0000330b: SWAP2
0000330c: POP
0000330d: POP
0000330e: SWAP3
0000330f: SWAP6
00003310: POP
00003311: SWAP3
00003312: SWAP6
00003313: POP
00003314: SWAP3
00003315: SWAP6
00003316: JUMP
00003317: JUMPDEST
00003318: PUSH4 0x4e487b71
0000331d: PUSH1 0xe0
0000331f: SHL
00003320: PUSH0
00003321: MSTORE
00003322: PUSH1 0x32
00003324: PUSH1 0x04
00003326: MSTORE
00003327: PUSH1 0x24
00003329: PUSH0
0000332a: REVERT
0000332b: JUMPDEST
0000332c: PUSH1 0x40
0000332e: DUP2
0000332f: MSTORE
00003330: PUSH0
00003331: PUSH2 0x333e
00003334: PUSH1 0x40
00003336: DUP4
00003337: ADD
00003338: DUP6
00003339: DUP8
0000333a: PUSH2 0x30e2
0000333d: JUMP
0000333e: JUMPDEST
0000333f: SWAP1
00003340: POP
00003341: DUP3
00003342: ISZERO
00003343: ISZERO
00003344: PUSH1 0x20
00003346: DUP4
00003347: ADD
00003348: MSTORE
00003349: SWAP5
0000334a: SWAP4
0000334b: POP
0000334c: POP
0000334d: POP
0000334e: POP
0000334f: JUMP
00003350: JUMPDEST
00003351: DUP1
00003352: CALLDATALOAD
00003353: PUSH2 0x335b
00003356: DUP2
00003357: PUSH2 0x2e8c
0000335a: JUMP
0000335b: JUMPDEST
0000335c: PUSH1 0x01
0000335e: PUSH1 0x01
00003360: PUSH1 0xa0
00003362: SHL
00003363: SUB
00003364: SWAP1
00003365: DUP2
00003366: AND
00003367: DUP4
00003368: MSTORE
00003369: PUSH1 0x20
0000336b: DUP3
0000336c: ADD
0000336d: CALLDATALOAD
0000336e: SWAP1
0000336f: PUSH2 0x3377
00003372: DUP3
00003373: PUSH2 0x2e8c
00003376: JUMP
00003377: JUMPDEST
00003378: AND
00003379: PUSH1 0x20
0000337b: DUP4
0000337c: ADD
0000337d: MSTORE
0000337e: PUSH1 0x40
00003380: DUP2
00003381: DUP2
00003382: ADD
00003383: CALLDATALOAD
00003384: SWAP1
00003385: DUP4
00003386: ADD
00003387: MSTORE
00003388: PUSH1 0x60
0000338a: DUP1
0000338b: DUP3
0000338c: ADD
0000338d: CALLDATALOAD
0000338e: SWAP1
0000338f: DUP4
00003390: ADD
00003391: MSTORE
00003392: PUSH1 0x80
00003394: SWAP1
00003395: DUP2
00003396: ADD
00003397: CALLDATALOAD
00003398: SWAP2
00003399: ADD
0000339a: MSTORE
0000339b: JUMP
0000339c: JUMPDEST
0000339d: PUSH2 0x33a6
000033a0: DUP2
000033a1: DUP6
000033a2: PUSH2 0x3350
000033a5: JUMP
000033a6: JUMPDEST
000033a7: PUSH1 0xc0
000033a9: PUSH1 0xa0
000033ab: DUP3
000033ac: ADD
000033ad: MSTORE
000033ae: PUSH0
000033af: PUSH2 0x33bc
000033b2: PUSH1 0xc0
000033b4: DUP4
000033b5: ADD
000033b6: DUP5
000033b7: DUP7
000033b8: PUSH2 0x30e2
000033bb: JUMP
000033bc: JUMPDEST
000033bd: SWAP6
000033be: SWAP5
000033bf: POP
000033c0: POP
000033c1: POP
000033c2: POP
000033c3: POP
000033c4: JUMP
000033c5: JUMPDEST
000033c6: PUSH4 0x4e487b71
000033cb: PUSH1 0xe0
000033cd: SHL
000033ce: PUSH0
000033cf: MSTORE
000033d0: PUSH1 0x11
000033d2: PUSH1 0x04
000033d4: MSTORE
000033d5: PUSH1 0x24
000033d7: PUSH0
000033d8: REVERT
000033d9: JUMPDEST
000033da: DUP2
000033db: DUP2
000033dc: SUB
000033dd: DUP2
000033de: DUP2
000033df: GT
000033e0: ISZERO
000033e1: PUSH2 0x0bc7
000033e4: JUMPI
000033e5: PUSH2 0x0bc7
000033e8: PUSH2 0x33c5
000033eb: JUMP
000033ec: JUMPDEST
000033ed: PUSH1 0xe0
000033ef: DUP2
000033f0: ADD
000033f1: PUSH2 0x33fa
000033f4: DUP3
000033f5: DUP7
000033f6: PUSH2 0x3350
000033f9: JUMP
000033fa: JUMPDEST
000033fb: PUSH1 0x01
000033fd: PUSH1 0x01
000033ff: PUSH1 0xa0
00003401: SHL
00003402: SUB
00003403: SWAP4
00003404: SWAP1
00003405: SWAP4
00003406: AND
00003407: PUSH1 0xa0
00003409: DUP3
0000340a: ADD
0000340b: MSTORE
0000340c: PUSH1 0xc0
0000340e: ADD
0000340f: MSTORE
00003410: SWAP2
00003411: SWAP1
00003412: POP
00003413: JUMP
00003414: JUMPDEST
00003415: DUP1
00003416: CALLDATALOAD
00003417: PUSH4 0xffffffff
0000341c: DUP2
0000341d: AND
0000341e: DUP2
0000341f: EQ
00003420: PUSH2 0x2eab
00003423: JUMPI
00003424: PUSH0
00003425: DUP1
00003426: REVERT
00003427: JUMPDEST
00003428: PUSH0
00003429: PUSH1 0x20
0000342b: DUP3
0000342c: DUP5
0000342d: SUB
0000342e: SLT
0000342f: ISZERO
00003430: PUSH2 0x3437
00003433: JUMPI
00003434: PUSH0
00003435: DUP1
00003436: REVERT
00003437: JUMPDEST
00003438: PUSH2 0x15de
0000343b: DUP3
0000343c: PUSH2 0x3414
0000343f: JUMP
00003440: JUMPDEST
00003441: DUP1
00003442: CALLDATALOAD
00003443: DUP1
00003444: ISZERO
00003445: ISZERO
00003446: DUP2
00003447: EQ
00003448: PUSH2 0x2eab
0000344b: JUMPI
0000344c: PUSH0
0000344d: DUP1
0000344e: REVERT
0000344f: JUMPDEST
00003450: PUSH0
00003451: PUSH2 0x0180
00003454: DUP3
00003455: DUP5
00003456: SUB
00003457: SLT
00003458: ISZERO
00003459: PUSH2 0x3460
0000345c: JUMPI
0000345d: PUSH0
0000345e: DUP1
0000345f: REVERT
00003460: JUMPDEST
00003461: PUSH2 0x3468
00003464: PUSH2 0x3131
00003467: JUMP
00003468: JUMPDEST
00003469: PUSH2 0x3471
0000346c: DUP4
0000346d: PUSH2 0x2ea0
00003470: JUMP
00003471: JUMPDEST
00003472: DUP2
00003473: MSTORE
00003474: PUSH2 0x347f
00003477: PUSH1 0x20
00003479: DUP5
0000347a: ADD
0000347b: PUSH2 0x2ea0
0000347e: JUMP
0000347f: JUMPDEST
00003480: PUSH1 0x20
00003482: DUP3
00003483: ADD
00003484: MSTORE
00003485: PUSH2 0x3490
00003488: PUSH1 0x40
0000348a: DUP5
0000348b: ADD
0000348c: PUSH2 0x2ea0
0000348f: JUMP
00003490: JUMPDEST
00003491: PUSH1 0x40
00003493: DUP3
00003494: ADD
00003495: MSTORE
00003496: PUSH1 0x60
00003498: DUP4
00003499: ADD
0000349a: CALLDATALOAD
0000349b: PUSH1 0x60
0000349d: DUP3
0000349e: ADD
0000349f: MSTORE
000034a0: PUSH1 0x80
000034a2: DUP4
000034a3: ADD
000034a4: CALLDATALOAD
000034a5: PUSH1 0x80
000034a7: DUP3
000034a8: ADD
000034a9: MSTORE
000034aa: PUSH2 0x34b5
000034ad: PUSH1 0xa0
000034af: DUP5
000034b0: ADD
000034b1: PUSH2 0x3414
000034b4: JUMP
000034b5: JUMPDEST
000034b6: PUSH1 0xa0
000034b8: DUP3
000034b9: ADD
000034ba: MSTORE
000034bb: PUSH1 0xc0
000034bd: DUP4
000034be: ADD
000034bf: CALLDATALOAD
000034c0: PUSH1 0xc0
000034c2: DUP3
000034c3: ADD
000034c4: MSTORE
000034c5: PUSH1 0xe0
000034c7: DUP4
000034c8: ADD
000034c9: CALLDATALOAD
000034ca: PUSH1 0xe0
000034cc: DUP3
000034cd: ADD
000034ce: MSTORE
000034cf: PUSH2 0x0100
000034d2: DUP1
000034d3: DUP5
000034d4: ADD
000034d5: CALLDATALOAD
000034d6: DUP2
000034d7: DUP4
000034d8: ADD
000034d9: MSTORE
000034da: POP
000034db: PUSH2 0x0120
000034de: PUSH2 0x34e8
000034e1: DUP2
000034e2: DUP6
000034e3: ADD
000034e4: PUSH2 0x3440
000034e7: JUMP
000034e8: JUMPDEST
000034e9: SWAP1
000034ea: DUP3
000034eb: ADD
000034ec: MSTORE
000034ed: PUSH2 0x0140
000034f0: DUP4
000034f1: DUP2
000034f2: ADD
000034f3: CALLDATALOAD
000034f4: SWAP1
000034f5: DUP3
000034f6: ADD
000034f7: MSTORE
000034f8: PUSH2 0x0160
000034fb: SWAP3
000034fc: DUP4
000034fd: ADD
000034fe: CALLDATALOAD
000034ff: SWAP3
00003500: DUP2
00003501: ADD
00003502: SWAP3
00003503: SWAP1
00003504: SWAP3
00003505: MSTORE
00003506: POP
00003507: SWAP2
00003508: SWAP1
00003509: POP
0000350a: JUMP
0000350b: JUMPDEST
0000350c: PUSH0
0000350d: PUSH1 0x20
0000350f: DUP3
00003510: DUP5
00003511: SUB
00003512: SLT
00003513: ISZERO
00003514: PUSH2 0x351b
00003517: JUMPI
00003518: PUSH0
00003519: DUP1
0000351a: REVERT
0000351b: JUMPDEST
0000351c: POP
0000351d: MLOAD
0000351e: SWAP2
0000351f: SWAP1
00003520: POP
00003521: JUMP
00003522: JUMPDEST
00003523: DUP2
00003524: DUP4
00003525: DUP3
00003526: CALLDATACOPY
00003527: PUSH0
00003528: SWAP2
00003529: ADD
0000352a: SWAP1
0000352b: DUP2
0000352c: MSTORE
0000352d: SWAP2
0000352e: SWAP1
0000352f: POP
00003530: JUMP
00003531: JUMPDEST
00003532: PUSH0
00003533: PUSH1 0x20
00003535: DUP3
00003536: DUP5
00003537: SUB
00003538: SLT
00003539: ISZERO
0000353a: PUSH2 0x3541
0000353d: JUMPI
0000353e: PUSH0
0000353f: DUP1
00003540: REVERT
00003541: JUMPDEST
00003542: DUP2
00003543: MLOAD
00003544: PUSH1 0xff
00003546: DUP2
00003547: AND
00003548: DUP2
00003549: EQ
0000354a: PUSH2 0x15de
0000354d: JUMPI
0000354e: PUSH0
0000354f: DUP1
00003550: REVERT
00003551: JUMPDEST
00003552: PUSH1 0xff
00003554: DUP3
00003555: DUP2
00003556: AND
00003557: DUP3
00003558: DUP3
00003559: AND
0000355a: SUB
0000355b: SWAP1
0000355c: DUP2
0000355d: GT
0000355e: ISZERO
0000355f: PUSH2 0x0bc7
00003562: JUMPI
00003563: PUSH2 0x0bc7
00003566: PUSH2 0x33c5
00003569: JUMP
0000356a: JUMPDEST
0000356b: PUSH1 0x01
0000356d: DUP2
0000356e: DUP2
0000356f: JUMPDEST
00003570: DUP1
00003571: DUP6
00003572: GT
00003573: ISZERO
00003574: PUSH2 0x35a4
00003577: JUMPI
00003578: DUP2
00003579: PUSH0
0000357a: NOT
0000357b: DIV
0000357c: DUP3
0000357d: GT
0000357e: ISZERO
0000357f: PUSH2 0x358a
00003582: JUMPI
00003583: PUSH2 0x358a
00003586: PUSH2 0x33c5
00003589: JUMP
0000358a: JUMPDEST
0000358b: DUP1
0000358c: DUP6
0000358d: AND
0000358e: ISZERO
0000358f: PUSH2 0x3597
00003592: JUMPI
00003593: SWAP2
00003594: DUP2
00003595: MUL
00003596: SWAP2
00003597: JUMPDEST
00003598: SWAP4
00003599: DUP5
0000359a: SHR
0000359b: SWAP4
0000359c: SWAP1
0000359d: DUP1
0000359e: MUL
0000359f: SWAP1
000035a0: PUSH2 0x356f
000035a3: JUMP
000035a4: JUMPDEST
000035a5: POP
000035a6: SWAP3
000035a7: POP
000035a8: SWAP3
000035a9: SWAP1
000035aa: POP
000035ab: JUMP
000035ac: JUMPDEST
000035ad: PUSH0
000035ae: DUP3
000035af: PUSH2 0x35ba
000035b2: JUMPI
000035b3: POP
000035b4: PUSH1 0x01
000035b6: PUSH2 0x0bc7
000035b9: JUMP
000035ba: JUMPDEST
000035bb: DUP2
000035bc: PUSH2 0x35c6
000035bf: JUMPI
000035c0: POP
000035c1: PUSH0
000035c2: PUSH2 0x0bc7
000035c5: JUMP
000035c6: JUMPDEST
000035c7: DUP2
000035c8: PUSH1 0x01
000035ca: DUP2
000035cb: EQ
000035cc: PUSH2 0x35dc
000035cf: JUMPI
000035d0: PUSH1 0x02
000035d2: DUP2
000035d3: EQ
000035d4: PUSH2 0x35e6
000035d7: JUMPI
000035d8: PUSH2 0x3602
000035db: JUMP
000035dc: JUMPDEST
000035dd: PUSH1 0x01
000035df: SWAP2
000035e0: POP
000035e1: POP
000035e2: PUSH2 0x0bc7
000035e5: JUMP
000035e6: JUMPDEST
000035e7: PUSH1 0xff
000035e9: DUP5
000035ea: GT
000035eb: ISZERO
000035ec: PUSH2 0x35f7
000035ef: JUMPI
000035f0: PUSH2 0x35f7
000035f3: PUSH2 0x33c5
000035f6: JUMP
000035f7: JUMPDEST
000035f8: POP
000035f9: POP
000035fa: PUSH1 0x01
000035fc: DUP3
000035fd: SHL
000035fe: PUSH2 0x0bc7
00003601: JUMP
00003602: JUMPDEST
00003603: POP
00003604: PUSH1 0x20
00003606: DUP4
00003607: LT
00003608: PUSH2 0x0133
0000360b: DUP4
0000360c: LT
0000360d: AND
0000360e: PUSH1 0x4e
00003610: DUP5
00003611: LT
00003612: PUSH1 0x0b
00003614: DUP5
00003615: LT
00003616: AND
00003617: OR
00003618: ISZERO
00003619: PUSH2 0x3625
0000361c: JUMPI
0000361d: POP
0000361e: DUP2
0000361f: DUP2
00003620: EXP
00003621: PUSH2 0x0bc7
00003624: JUMP
00003625: JUMPDEST
00003626: PUSH2 0x362f
00003629: DUP4
0000362a: DUP4
0000362b: PUSH2 0x356a
0000362e: JUMP
0000362f: JUMPDEST
00003630: DUP1
00003631: PUSH0
00003632: NOT
00003633: DIV
00003634: DUP3
00003635: GT
00003636: ISZERO
00003637: PUSH2 0x3642
0000363a: JUMPI
0000363b: PUSH2 0x3642
0000363e: PUSH2 0x33c5
00003641: JUMP
00003642: JUMPDEST
00003643: MUL
00003644: SWAP4
00003645: SWAP3
00003646: POP
00003647: POP
00003648: POP
00003649: JUMP
0000364a: JUMPDEST
0000364b: PUSH0
0000364c: PUSH2 0x15de
0000364f: PUSH1 0xff
00003651: DUP5
00003652: AND
00003653: DUP4
00003654: PUSH2 0x35ac
00003657: JUMP
00003658: JUMPDEST
00003659: DUP1
0000365a: DUP3
0000365b: MUL
0000365c: DUP2
0000365d: ISZERO
0000365e: DUP3
0000365f: DUP3
00003660: DIV
00003661: DUP5
00003662: EQ
00003663: OR
00003664: PUSH2 0x0bc7
00003667: JUMPI
00003668: PUSH2 0x0bc7
0000366b: PUSH2 0x33c5
0000366e: JUMP
0000366f: JUMPDEST
00003670: PUSH4 0x4e487b71
00003675: PUSH1 0xe0
00003677: SHL
00003678: PUSH0
00003679: MSTORE
0000367a: PUSH1 0x12
0000367c: PUSH1 0x04
0000367e: MSTORE
0000367f: PUSH1 0x24
00003681: PUSH0
00003682: REVERT
00003683: JUMPDEST
00003684: PUSH0
00003685: DUP3
00003686: MLOAD
00003687: DUP1
00003688: PUSH1 0x20
0000368a: DUP6
0000368b: ADD
0000368c: DUP5
0000368d: MCOPY
0000368e: PUSH0
0000368f: SWAP3
00003690: ADD
00003691: SWAP2
00003692: DUP3
00003693: MSTORE
00003694: POP
00003695: SWAP2
00003696: SWAP1
00003697: POP
00003698: JUMP
00003699: JUMPDEST
0000369a: PUSH4 0x4e487b71
0000369f: PUSH1 0xe0
000036a1: SHL
000036a2: PUSH0
000036a3: MSTORE
000036a4: PUSH1 0x31
000036a6: PUSH1 0x04
000036a8: MSTORE
000036a9: PUSH1 0x24
000036ab: PUSH0
000036ac: REVERT
000036ad: INVALID
000036ae: UNKNOWN(0xC1)
000036af: UNKNOWN(0xF6)
000036b0: INVALID
000036b1: UNKNOWN(0x24)
000036b2: PUSH3 0x1ce81e
000036b6: UNKNOWN(0xC5)
000036b7: DUP3
000036b8: PUSH29 0xaf0253cadb74709b061630e6b55e82371705932000aef53ff2a64da421
000036d6: JUMP
000036d7: MCOPY
000036d8: STATICCALL
000036d9: GASLIMIT
000036da: UNKNOWN(0xC5)
000036db: EXP
000036dc: SWAP7
000036dd: CREATE
000036de: PUSH17 0xd7bb66ffc4ca806c77c72a0e763f6602dd
000036f0: PUSH28 0xc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268
0000370d: STOP
0000370e: LOG2
0000370f: PUSH5 0x6970667358
00003715: UNKNOWN(0x22)
00003716: SLT
00003717: KECCAK256
00003718: JUMP
00003719: CALLCODE
0000371a: UNKNOWN(0xD8)
0000371b: UNKNOWN(0x4D)
0000371c: LOG2
0000371d: PUSH24 0xfdd43ca7c4c1f812ed5f873cb9d2de82e04d730cb8fd6cc0
00003736: UNKNOWN(0xFB)
00003737: PUSH12

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x46413b6eeb90d80b705b7ab50ea778965eecda7dac896bac3a4453d5c2e42ce5
call_targets: 0x00000000d681e85e5783588f87a9573cb97eda01
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x46413b6eeb90d80b705b7ab50ea778965eecda7dac896bac3a4453d5c2e42ce5",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x00000000d681e85e5783588f87a9573cb97eda01"
    ],
    "matched_probe": null,
    "target_varies": false,
    "classification": "constant_target"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xdac9318f",
            "selector": "0xdac9318f",
            "calldata_variants": [
                "0xdac9318f",
                "0xdac9318f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4891825",
            "selector": "0xe4891825",
            "calldata_variants": [
                "0xe4891825",
                "0xe48918250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe8d96a2e",
            "selector": "0xe8d96a2e",
            "calldata_variants": [
                "0xe8d96a2e",
                "0xe8d96a2e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed03e78c",
            "selector": "0xed03e78c",
            "calldata_variants": [
                "0xed03e78c",
                "0xed03e78c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2309ab6",
            "selector": "0xf2309ab6",
            "calldata_variants": [
                "0xf2309ab6",
                "0xf2309ab60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xff0e6489",
            "selector": "0xff0e6489",
            "calldata_variants": [
                "0xff0e6489",
                "0xff0e64890000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc5b26eaa",
            "selector": "0xc5b26eaa",
            "calldata_variants": [
                "0xc5b26eaa",
                "0xc5b26eaa0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xca15c873",
            "selector": "0xca15c873",
            "calldata_variants": [
                "0xca15c873",
                "0xca15c8730000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3147,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5240,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 9956,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 7,
    "guards_detected": [],
    "untrusted_call_count": 7
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x46413b6eeb90d80b705b7ab50ea778965eecda7dac896bac3a4453d5c2e42ce5
call_targets: 0x00000000d681e85e5783588f87a9573cb97eda01
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x46413b6eeb90d80b705b7ab50ea778965eecda7dac896bac3a4453d5c2e42ce5",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x00000000d681e85e5783588f87a9573cb97eda01"
    ],
    "matched_probe": null,
    "target_varies": false,
    "classification": "constant_target"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xdac9318f",
            "selector": "0xdac9318f",
            "calldata_variants": [
                "0xdac9318f",
                "0xdac9318f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4891825",
            "selector": "0xe4891825",
            "calldata_variants": [
                "0xe4891825",
                "0xe48918250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe8d96a2e",
            "selector": "0xe8d96a2e",
            "calldata_variants": [
                "0xe8d96a2e",
                "0xe8d96a2e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed03e78c",
            "selector": "0xed03e78c",
            "calldata_variants": [
                "0xed03e78c",
                "0xed03e78c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2309ab6",
            "selector": "0xf2309ab6",
            "calldata_variants": [
                "0xf2309ab6",
                "0xf2309ab60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xff0e6489",
            "selector": "0xff0e6489",
            "calldata_variants": [
                "0xff0e6489",
                "0xff0e64890000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc5b26eaa",
            "selector": "0xc5b26eaa",
            "calldata_variants": [
                "0xc5b26eaa",
                "0xc5b26eaa0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xca15c873",
            "selector": "0xca15c873",
            "calldata_variants": [
                "0xca15c873",
                "0xca15c8730000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3147,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5240,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 9956,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 6,
    "guards_detected": []
}
high other codex Unchecked CowSwap feeAmount lets a limit order drain extra sellToken beyond params.amountIn 85 no
view
evidence_json
{
    "evidence": "In src/utils/SwapModule.sol, checkCowswapOrder validates sellToken, buyToken, receiver, sellAmount, buyAmount, validTo, kind, and token balance modes, but never checks order.feeAmount or order.partiallyFillable. createLimitOrder then presigns that unchecked order. CowSwap settlement adds the fee to the amount pulled from the owner: for sell orders it sets executedFeeAmount = order.feeAmount (or a proportional fraction for partial fills) and then executes executedSellAmount = executedSellAmount + executedFeeAmount.",
    "locations": [
        "src/utils/SwapModule.sol:137",
        "src/utils/SwapModule.sol:286",
        "src/utils/SwapModule.sol:277"
    ],
    "recommendation": "Validate the full GPv2Order.Data payload, not just sellAmount/buyAmount. At minimum require order.feeAmount == 0 unless fees are explicitly modeled in Params. If fees must be supported, include them in params and enforce balance/price checks on total spend (sellAmount + feeAmount). Also consider rejecting partiallyFillable orders unless their fee behavior is explicitly accounted for.",
    "exploit_scenario": "An address with CALLER_ROLE first sets a large allowance for cowswapVaultRelayer via setCowswapApproval, then calls createLimitOrder with params.amountIn = X and params.minAmountOut matching an apparently valid order, but sets order.feeAmount to a large value. checkCowswapOrder only checks sellAmount/buyAmount/receiver/validTo and accepts the order. When the presigned order is settled, CowSwap charges executedSellAmount + executedFeeAmount from the module, so the contract can lose much more than X of sellToken while only enforcing the buyAmount floor for X. Any extra approved balance becomes spendable as fee."
}
high other slither GPv2Transfer.transferFromAccounts(IVault,GPv2Transfer.Data[],address) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#91-136) uses arbitrary from in transferFrom: transf... 85 no
view
evidence_json
{
    "impact": "High",
    "detector": "arbitrary-send-erc20",
    "elements": [
        {
            "name": "transferFromAccounts",
            "type": "function",
            "source_mapping": {
                "lines": [
                    91,
                    92,
                    93,
                    94,
                    95,
                    96,
                    97,
                    98,
                    99,
                    100,
                    101,
                    102,
                    103,
                    104,
                    105,
                    106,
                    107,
                    108,
                    109,
                    110,
                    111,
                    112,
                    113,
                    114,
                    115,
                    116,
                    117,
                    118,
                    119,
                    120,
                    121,
                    122,
                    123,
                    124,
                    125,
                    126,
                    127,
                    128,
                    129,
                    130,
                    131,
                    132,
                    133,
                    134,
                    135,
                    136
                ],
                "start": 3507,
                "length": 1809,
                "ending_column": 6,
                "is_dependency": true,
                "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                "starting_column": 5,
                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "GPv2Transfer",
                    "type": "contract",
                    "source_mapping": {
                        "lines": [
                            12,
                            13,
                            14,
                            15,
                            16,
                            17,
                            18,
                            19,
                            20,
                            21,
                            22,
                            23,
                            24,
                            25,
                            26,
                            27,
                            28,
                            29,
                            30,
                            31,
                            32,
                            33,
                            34,
                            35,
                            36,
                            37,
                            38,
                            39,
                            40,
                            41,
                            42,
                            43,
                            44,
                            45,
                            46,
                            47,
                            48,
                            49,
                            50,
                            51,
                            52,
                            53,
                            54,
                            55,
                            56,
                            57,
                            58,
                            59,
                            60,
                            61,
                            62,
                            63,
                            64,
                            65,
                            66,
                            67,
                            68,
                            69,
                            70,
                            71,
                            72,
                            73,
                            74,
                            75,
                            76,
                            77,
                            78,
                            79,
                            80,
                            81,
                            82,
                            83,
                            84,
                            85,
                            86,
                            87,
                            88,
                            89,
                            90,
                            91,
                            92,
                            93,
                            94,
                            95,
                            96,
                            97,
                            98,
                            99,
                            100,
                            101,
                            102,
                            103,
                            104,
                            105,
                            106,
                            107,
                            108,
                            109,
                            110,
                            111,
                            112,
                            113,
                            114,
                            115,
                            116,
                            117,
                            118,
                            119,
                            120,
                            121,
                            122,
                            123,
                            124,
                            125,
                            126,
                            127,
                            128,
                            129,
                            130,
                            131,
                            132,
                            133,
                            134,
                            135,
                            136,
                            137,
                            138,
                            139,
                            140,
                            141,
                            142,
                            143,
                            144,
                            145,
                            146,
                            147,
                            148,
                            149,
                            150,
                            151,
                            152,
                            153,
                            154,
                            155,
                            156,
                            157,
                            158,
                            159,
                            160,
                            161,
                            162,
                            163,
                            164,
                            165,
                            166,
                            167,
                            168,
                            169,
                            170,
                            171,
                            172,
                            173,
                            174,
                            175,
                            176,
                            177,
                            178,
                            179,
                            180,
                            181,
                            182,
                            183,
                            184,
                            185,
                            186,
                            187,
                            188,
                            189,
                            190,
                            191,
                            192,
                            193,
                            194,
                            195,
                            196,
                            197,
                            198,
                            199,
                            200,
                            201,
                            202,
                            203,
                            204
                        ],
                        "start": 296,
                        "length": 7744,
                        "ending_column": 2,
                        "is_dependency": true,
                        "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                        "starting_column": 1,
                        "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                        "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
                    }
                },
                "signature": "transferFromAccounts(IVault,GPv2Transfer.Data[],address)"
            }
        },
        {
            "name": "transfer.token.safeTransferFrom(transfer.account,recipient,transfer.amount)",
            "type": "node",
            "source_mapping": {
                "lines": [
                    113,
                    114,
                    115,
                    116,
                    117
                ],
                "start": 4402,
                "length": 155,
                "ending_column": 18,
                "is_dependency": true,
                "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                "starting_column": 17,
                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "transferFromAccounts",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            91,
                            92,
                            93,
                            94,
                            95,
                            96,
                            97,
                            98,
                            99,
                            100,
                            101,
                            102,
                            103,
                            104,
                            105,
                            106,
                            107,
                            108,
                            109,
                            110,
                            111,
                            112,
                            113,
                            114,
                            115,
                            116,
                            117,
                            118,
                            119,
                            120,
                            121,
                            122,
                            123,
                            124,
                            125,
                            126,
                            127,
                            128,
                            129,
                            130,
                            131,
                            132,
                            133,
                            134,
                            135,
                            136
                        ],
                        "start": 3507,
                        "length": 1809,
                        "ending_column": 6,
                        "is_dependency": true,
                        "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                        "starting_column": 5,
                        "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                        "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "GPv2Transfer",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    12,
                                    13,
                                    14,
                                    15,
                                    16,
                                    17,
                                    18,
                                    19,
                                    20,
                                    21,
                                    22,
                                    23,
                                    24,
                                    25,
                                    26,
                                    27,
                                    28,
                                    29,
                                    30,
                                    31,
                                    32,
                                    33,
                                    34,
                                    35,
                                    36,
                                    37,
                                    38,
                                    39,
                                    40,
                                    41,
                                    42,
                                    43,
                                    44,
                                    45,
                                    46,
                                    47,
                                    48,
                                    49,
                                    50,
                                    51,
                                    52,
                                    53,
                                    54,
                                    55,
                                    56,
                                    57,
                                    58,
                                    59,
                                    60,
                                    61,
                                    62,
                                    63,
                                    64,
                                    65,
                                    66,
                                    67,
                                    68,
                                    69,
                                    70,
                                    71,
                                    72,
                                    73,
                                    74,
                                    75,
                                    76,
                                    77,
                                    78,
                                    79,
                                    80,
                                    81,
                                    82,
                                    83,
                                    84,
                                    85,
                                    86,
                                    87,
                                    88,
                                    89,
                                    90,
                                    91,
                                    92,
                                    93,
                                    94,
                                    95,
                                    96,
                                    97,
                                    98,
                                    99,
                                    100,
                                    101,
                                    102,
                                    103,
                                    104,
                                    105,
                                    106,
                                    107,
                                    108,
                                    109,
                                    110,
                                    111,
                                    112,
                                    113,
                                    114,
                                    115,
                                    116,
                                    117,
                                    118,
                                    119,
                                    120,
                                    121,
                                    122,
                                    123,
                                    124,
                                    125,
                                    126,
                                    127,
                                    128,
                                    129,
                                    130,
                                    131,
                                    132,
                                    133,
                                    134,
                                    135,
                                    136,
                                    137,
                                    138,
                                    139,
                                    140,
                                    141,
                                    142,
                                    143,
                                    144,
                                    145,
                                    146,
                                    147,
                                    148,
                                    149,
                                    150,
                                    151,
                                    152,
                                    153,
                                    154,
                                    155,
                                    156,
                                    157,
                                    158,
                                    159,
                                    160,
                                    161,
                                    162,
                                    163,
                                    164,
                                    165,
                                    166,
                                    167,
                                    168,
                                    169,
                                    170,
                                    171,
                                    172,
                                    173,
                                    174,
                                    175,
                                    176,
                                    177,
                                    178,
                                    179,
                                    180,
                                    181,
                                    182,
                                    183,
                                    184,
                                    185,
                                    186,
                                    187,
                                    188,
                                    189,
                                    190,
                                    191,
                                    192,
                                    193,
                                    194,
                                    195,
                                    196,
                                    197,
                                    198,
                                    199,
                                    200,
                                    201,
                                    202,
                                    203,
                                    204
                                ],
                                "start": 296,
                                "length": 7744,
                                "ending_column": 2,
                                "is_dependency": true,
                                "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                                "starting_column": 1,
                                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                                "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
                            }
                        },
                        "signature": "transferFromAccounts(IVault,GPv2Transfer.Data[],address)"
                    }
                }
            }
        }
    ],
    "locations": [
        {
            "file": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
            "name": "transferFromAccounts",
            "type": "function",
            "lines": [
                91,
                92,
                93,
                94,
                95,
                96,
                97,
                98,
                99,
                100,
                101,
                102,
                103,
                104,
                105,
                106,
                107,
                108,
                109,
                110,
                111,
                112,
                113,
                114,
                115,
                116,
                117,
                118,
                119,
                120,
                121,
                122,
                123,
                124,
                125,
                126,
                127,
                128,
                129,
                130,
                131,
                132,
                133,
                134,
                135,
                136
            ]
        },
        {
            "file": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
            "name": "transfer.token.safeTransferFrom(transfer.account,recipient,transfer.amount)",
            "type": "node",
            "lines": [
                113,
                114,
                115,
                116,
                117
            ]
        }
    ],
    "description": "GPv2Transfer.transferFromAccounts(IVault,GPv2Transfer.Data[],address) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#91-136) uses arbitrary from in transferFrom: transfer.token.safeTransferFrom(transfer.account,recipient,transfer.amount) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#113-117)"
}
high other slither GPv2Transfer.fastTransferFromAccount(IVault,GPv2Transfer.Data,address) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#46-77) uses arbitrary from in transferFrom: transf... 85 no
view
evidence_json
{
    "impact": "High",
    "detector": "arbitrary-send-erc20",
    "elements": [
        {
            "name": "fastTransferFromAccount",
            "type": "function",
            "source_mapping": {
                "lines": [
                    46,
                    47,
                    48,
                    49,
                    50,
                    51,
                    52,
                    53,
                    54,
                    55,
                    56,
                    57,
                    58,
                    59,
                    60,
                    61,
                    62,
                    63,
                    64,
                    65,
                    66,
                    67,
                    68,
                    69,
                    70,
                    71,
                    72,
                    73,
                    74,
                    75,
                    76,
                    77
                ],
                "start": 1787,
                "length": 1123,
                "ending_column": 6,
                "is_dependency": true,
                "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                "starting_column": 5,
                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "GPv2Transfer",
                    "type": "contract",
                    "source_mapping": {
                        "lines": [
                            12,
                            13,
                            14,
                            15,
                            16,
                            17,
                            18,
                            19,
                            20,
                            21,
                            22,
                            23,
                            24,
                            25,
                            26,
                            27,
                            28,
                            29,
                            30,
                            31,
                            32,
                            33,
                            34,
                            35,
                            36,
                            37,
                            38,
                            39,
                            40,
                            41,
                            42,
                            43,
                            44,
                            45,
                            46,
                            47,
                            48,
                            49,
                            50,
                            51,
                            52,
                            53,
                            54,
                            55,
                            56,
                            57,
                            58,
                            59,
                            60,
                            61,
                            62,
                            63,
                            64,
                            65,
                            66,
                            67,
                            68,
                            69,
                            70,
                            71,
                            72,
                            73,
                            74,
                            75,
                            76,
                            77,
                            78,
                            79,
                            80,
                            81,
                            82,
                            83,
                            84,
                            85,
                            86,
                            87,
                            88,
                            89,
                            90,
                            91,
                            92,
                            93,
                            94,
                            95,
                            96,
                            97,
                            98,
                            99,
                            100,
                            101,
                            102,
                            103,
                            104,
                            105,
                            106,
                            107,
                            108,
                            109,
                            110,
                            111,
                            112,
                            113,
                            114,
                            115,
                            116,
                            117,
                            118,
                            119,
                            120,
                            121,
                            122,
                            123,
                            124,
                            125,
                            126,
                            127,
                            128,
                            129,
                            130,
                            131,
                            132,
                            133,
                            134,
                            135,
                            136,
                            137,
                            138,
                            139,
                            140,
                            141,
                            142,
                            143,
                            144,
                            145,
                            146,
                            147,
                            148,
                            149,
                            150,
                            151,
                            152,
                            153,
                            154,
                            155,
                            156,
                            157,
                            158,
                            159,
                            160,
                            161,
                            162,
                            163,
                            164,
                            165,
                            166,
                            167,
                            168,
                            169,
                            170,
                            171,
                            172,
                            173,
                            174,
                            175,
                            176,
                            177,
                            178,
                            179,
                            180,
                            181,
                            182,
                            183,
                            184,
                            185,
                            186,
                            187,
                            188,
                            189,
                            190,
                            191,
                            192,
                            193,
                            194,
                            195,
                            196,
                            197,
                            198,
                            199,
                            200,
                            201,
                            202,
                            203,
                            204
                        ],
                        "start": 296,
                        "length": 7744,
                        "ending_column": 2,
                        "is_dependency": true,
                        "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                        "starting_column": 1,
                        "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                        "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
                    }
                },
                "signature": "fastTransferFromAccount(IVault,GPv2Transfer.Data,address)"
            }
        },
        {
            "name": "transfer.token.safeTransferFrom(transfer.account,recipient,transfer.amount)",
            "type": "node",
            "source_mapping": {
                "lines": [
                    57,
                    58,
                    59,
                    60,
                    61
                ],
                "start": 2121,
                "length": 139,
                "ending_column": 14,
                "is_dependency": true,
                "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                "starting_column": 13,
                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "fastTransferFromAccount",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            46,
                            47,
                            48,
                            49,
                            50,
                            51,
                            52,
                            53,
                            54,
                            55,
                            56,
                            57,
                            58,
                            59,
                            60,
                            61,
                            62,
                            63,
                            64,
                            65,
                            66,
                            67,
                            68,
                            69,
                            70,
                            71,
                            72,
                            73,
                            74,
                            75,
                            76,
                            77
                        ],
                        "start": 1787,
                        "length": 1123,
                        "ending_column": 6,
                        "is_dependency": true,
                        "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                        "starting_column": 5,
                        "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                        "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "GPv2Transfer",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    12,
                                    13,
                                    14,
                                    15,
                                    16,
                                    17,
                                    18,
                                    19,
                                    20,
                                    21,
                                    22,
                                    23,
                                    24,
                                    25,
                                    26,
                                    27,
                                    28,
                                    29,
                                    30,
                                    31,
                                    32,
                                    33,
                                    34,
                                    35,
                                    36,
                                    37,
                                    38,
                                    39,
                                    40,
                                    41,
                                    42,
                                    43,
                                    44,
                                    45,
                                    46,
                                    47,
                                    48,
                                    49,
                                    50,
                                    51,
                                    52,
                                    53,
                                    54,
                                    55,
                                    56,
                                    57,
                                    58,
                                    59,
                                    60,
                                    61,
                                    62,
                                    63,
                                    64,
                                    65,
                                    66,
                                    67,
                                    68,
                                    69,
                                    70,
                                    71,
                                    72,
                                    73,
                                    74,
                                    75,
                                    76,
                                    77,
                                    78,
                                    79,
                                    80,
                                    81,
                                    82,
                                    83,
                                    84,
                                    85,
                                    86,
                                    87,
                                    88,
                                    89,
                                    90,
                                    91,
                                    92,
                                    93,
                                    94,
                                    95,
                                    96,
                                    97,
                                    98,
                                    99,
                                    100,
                                    101,
                                    102,
                                    103,
                                    104,
                                    105,
                                    106,
                                    107,
                                    108,
                                    109,
                                    110,
                                    111,
                                    112,
                                    113,
                                    114,
                                    115,
                                    116,
                                    117,
                                    118,
                                    119,
                                    120,
                                    121,
                                    122,
                                    123,
                                    124,
                                    125,
                                    126,
                                    127,
                                    128,
                                    129,
                                    130,
                                    131,
                                    132,
                                    133,
                                    134,
                                    135,
                                    136,
                                    137,
                                    138,
                                    139,
                                    140,
                                    141,
                                    142,
                                    143,
                                    144,
                                    145,
                                    146,
                                    147,
                                    148,
                                    149,
                                    150,
                                    151,
                                    152,
                                    153,
                                    154,
                                    155,
                                    156,
                                    157,
                                    158,
                                    159,
                                    160,
                                    161,
                                    162,
                                    163,
                                    164,
                                    165,
                                    166,
                                    167,
                                    168,
                                    169,
                                    170,
                                    171,
                                    172,
                                    173,
                                    174,
                                    175,
                                    176,
                                    177,
                                    178,
                                    179,
                                    180,
                                    181,
                                    182,
                                    183,
                                    184,
                                    185,
                                    186,
                                    187,
                                    188,
                                    189,
                                    190,
                                    191,
                                    192,
                                    193,
                                    194,
                                    195,
                                    196,
                                    197,
                                    198,
                                    199,
                                    200,
                                    201,
                                    202,
                                    203,
                                    204
                                ],
                                "start": 296,
                                "length": 7744,
                                "ending_column": 2,
                                "is_dependency": true,
                                "filename_short": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                                "starting_column": 1,
                                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
                                "filename_relative": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol"
                            }
                        },
                        "signature": "fastTransferFromAccount(IVault,GPv2Transfer.Data,address)"
                    }
                }
            }
        }
    ],
    "locations": [
        {
            "file": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
            "name": "fastTransferFromAccount",
            "type": "function",
            "lines": [
                46,
                47,
                48,
                49,
                50,
                51,
                52,
                53,
                54,
                55,
                56,
                57,
                58,
                59,
                60,
                61,
                62,
                63,
                64,
                65,
                66,
                67,
                68,
                69,
                70,
                71,
                72,
                73,
                74,
                75,
                76,
                77
            ]
        },
        {
            "file": "lib/contracts/src/contracts/libraries/GPv2Transfer.sol",
            "name": "transfer.token.safeTransferFrom(transfer.account,recipient,transfer.amount)",
            "type": "node",
            "lines": [
                57,
                58,
                59,
                60,
                61
            ]
        }
    ],
    "description": "GPv2Transfer.fastTransferFromAccount(IVault,GPv2Transfer.Data,address) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#46-77) uses arbitrary from in transferFrom: transfer.token.safeTransferFrom(transfer.account,recipient,transfer.amount) (lib/contracts/src/contracts/libraries/GPv2Transfer.sol#57-61)"
}
high other slither TransferLibrary.receiveAssets(address,address,uint256) (src/libraries/TransferLibrary.sol#40-48) uses arbitrary from in transferFrom: IERC20(asset).safeTransferFrom(from,address... 85 no
view
evidence_json
{
    "impact": "High",
    "detector": "arbitrary-send-erc20",
    "elements": [
        {
            "name": "receiveAssets",
            "type": "function",
            "source_mapping": {
                "lines": [
                    40,
                    41,
                    42,
                    43,
                    44,
                    45,
                    46,
                    47,
                    48
                ],
                "start": 1745,
                "length": 304,
                "ending_column": 6,
                "is_dependency": false,
                "filename_short": "src/libraries/TransferLibrary.sol",
                "starting_column": 5,
                "filename_absolute": "/tmp/slither-bjjc5fai/src/libraries/TransferLibrary.sol",
                "filename_relative": "src/libraries/TransferLibrary.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "TransferLibrary",
                    "type": "contract",
                    "source_mapping": {
                        "lines": [
                            13,
                            14,
                            15,
                            16,
                            17,
                            18,
                            19,
                            20,
                            21,
                            22,
                            23,
                            24,
                            25,
                            26,
                            27,
                            28,
                            29,
                            30,
                            31,
                            32,
                            33,
                            34,
                            35,
                            36,
                            37,
                            38,
                            39,
                            40,
                            41,
                            42,
                            43,
                            44,
                            45,
                            46,
                            47,
                            48,
                            49,
                            50,
                            51,
                            52,
                            53,
                            54,
                            55,
                            56,
                            57,
                            58,
                            59,
                            60,
                            61
                        ],
                        "start": 502,
                        "length": 2088,
                        "ending_column": 2,
                        "is_dependency": false,
                        "filename_short": "src/libraries/TransferLibrary.sol",
                        "starting_column": 1,
                        "filename_absolute": "/tmp/slither-bjjc5fai/src/libraries/TransferLibrary.sol",
                        "filename_relative": "src/libraries/TransferLibrary.sol"
                    }
                },
                "signature": "receiveAssets(address,address,uint256)"
            }
        },
        {
            "name": "IERC20(asset).safeTransferFrom(from,address(this),assets)",
            "type": "node",
            "source_mapping": {
                "lines": [
                    46
                ],
                "start": 1973,
                "length": 59,
                "ending_column": 72,
                "is_dependency": false,
                "filename_short": "src/libraries/TransferLibrary.sol",
                "starting_column": 13,
                "filename_absolute": "/tmp/slither-bjjc5fai/src/libraries/TransferLibrary.sol",
                "filename_relative": "src/libraries/TransferLibrary.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "receiveAssets",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            40,
                            41,
                            42,
                            43,
                            44,
                            45,
                            46,
                            47,
                            48
                        ],
                        "start": 1745,
                        "length": 304,
                        "ending_column": 6,
                        "is_dependency": false,
                        "filename_short": "src/libraries/TransferLibrary.sol",
                        "starting_column": 5,
                        "filename_absolute": "/tmp/slither-bjjc5fai/src/libraries/TransferLibrary.sol",
                        "filename_relative": "src/libraries/TransferLibrary.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "TransferLibrary",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    13,
                                    14,
                                    15,
                                    16,
                                    17,
                                    18,
                                    19,
                                    20,
                                    21,
                                    22,
                                    23,
                                    24,
                                    25,
                                    26,
                                    27,
                                    28,
                                    29,
                                    30,
                                    31,
                                    32,
                                    33,
                                    34,
                                    35,
                                    36,
                                    37,
                                    38,
                                    39,
                                    40,
                                    41,
                                    42,
                                    43,
                                    44,
                                    45,
                                    46,
                                    47,
                                    48,
                                    49,
                                    50,
                                    51,
                                    52,
                                    53,
                                    54,
                                    55,
                                    56,
                                    57,
                                    58,
                                    59,
                                    60,
                                    61
                                ],
                                "start": 502,
                                "length": 2088,
                                "ending_column": 2,
                                "is_dependency": false,
                                "filename_short": "src/libraries/TransferLibrary.sol",
                                "starting_column": 1,
                                "filename_absolute": "/tmp/slither-bjjc5fai/src/libraries/TransferLibrary.sol",
                                "filename_relative": "src/libraries/TransferLibrary.sol"
                            }
                        },
                        "signature": "receiveAssets(address,address,uint256)"
                    }
                }
            }
        }
    ],
    "locations": [
        {
            "file": "src/libraries/TransferLibrary.sol",
            "name": "receiveAssets",
            "type": "function",
            "lines": [
                40,
                41,
                42,
                43,
                44,
                45,
                46,
                47,
                48
            ]
        },
        {
            "file": "src/libraries/TransferLibrary.sol",
            "name": "IERC20(asset).safeTransferFrom(from,address(this),assets)",
            "type": "node",
            "lines": [
                46
            ]
        }
    ],
    "description": "TransferLibrary.receiveAssets(address,address,uint256) (src/libraries/TransferLibrary.sol#40-48) uses arbitrary from in transferFrom: IERC20(asset).safeTransferFrom(from,address(this),assets) (src/libraries/TransferLibrary.sol#46)"
}
high upgradeability slither StorageAccessible.simulateDelegatecallInternal(address,bytes) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#87-95) uses delegatecall to a input-controlled function id 85 no
view
evidence_json
{
    "impact": "High",
    "detector": "controlled-delegatecall",
    "elements": [
        {
            "name": "simulateDelegatecallInternal",
            "type": "function",
            "source_mapping": {
                "lines": [
                    87,
                    88,
                    89,
                    90,
                    91,
                    92,
                    93,
                    94,
                    95
                ],
                "start": 3738,
                "length": 376,
                "ending_column": 6,
                "is_dependency": true,
                "filename_short": "lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                "starting_column": 5,
                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                "filename_relative": "lib/contracts/src/contracts/mixins/StorageAccessible.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "StorageAccessible",
                    "type": "contract",
                    "source_mapping": {
                        "lines": [
                            32,
                            33,
                            34,
                            35,
                            36,
                            37,
                            38,
                            39,
                            40,
                            41,
                            42,
                            43,
                            44,
                            45,
                            46,
                            47,
                            48,
                            49,
                            50,
                            51,
                            52,
                            53,
                            54,
                            55,
                            56,
                            57,
                            58,
                            59,
                            60,
                            61,
                            62,
                            63,
                            64,
                            65,
                            66,
                            67,
                            68,
                            69,
                            70,
                            71,
                            72,
                            73,
                            74,
                            75,
                            76,
                            77,
                            78,
                            79,
                            80,
                            81,
                            82,
                            83,
                            84,
                            85,
                            86,
                            87,
                            88,
                            89,
                            90,
                            91,
                            92,
                            93,
                            94,
                            95,
                            96,
                            97,
                            98,
                            99,
                            100,
                            101,
                            102,
                            103,
                            104,
                            105,
                            106,
                            107,
                            108,
                            109,
                            110
                        ],
                        "start": 1305,
                        "length": 3226,
                        "ending_column": 2,
                        "is_dependency": true,
                        "filename_short": "lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                        "starting_column": 1,
                        "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                        "filename_relative": "lib/contracts/src/contracts/mixins/StorageAccessible.sol"
                    }
                },
                "signature": "simulateDelegatecallInternal(address,bytes)"
            }
        },
        {
            "name": "(success,response) = targetContract.delegatecall(calldataPayload)",
            "type": "node",
            "source_mapping": {
                "lines": [
                    93
                ],
                "start": 3984,
                "length": 66,
                "ending_column": 75,
                "is_dependency": true,
                "filename_short": "lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                "starting_column": 9,
                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                "filename_relative": "lib/contracts/src/contracts/mixins/StorageAccessible.sol"
            },
            "type_specific_fields": {
                "parent": {
                    "name": "simulateDelegatecallInternal",
                    "type": "function",
                    "source_mapping": {
                        "lines": [
                            87,
                            88,
                            89,
                            90,
                            91,
                            92,
                            93,
                            94,
                            95
                        ],
                        "start": 3738,
                        "length": 376,
                        "ending_column": 6,
                        "is_dependency": true,
                        "filename_short": "lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                        "starting_column": 5,
                        "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                        "filename_relative": "lib/contracts/src/contracts/mixins/StorageAccessible.sol"
                    },
                    "type_specific_fields": {
                        "parent": {
                            "name": "StorageAccessible",
                            "type": "contract",
                            "source_mapping": {
                                "lines": [
                                    32,
                                    33,
                                    34,
                                    35,
                                    36,
                                    37,
                                    38,
                                    39,
                                    40,
                                    41,
                                    42,
                                    43,
                                    44,
                                    45,
                                    46,
                                    47,
                                    48,
                                    49,
                                    50,
                                    51,
                                    52,
                                    53,
                                    54,
                                    55,
                                    56,
                                    57,
                                    58,
                                    59,
                                    60,
                                    61,
                                    62,
                                    63,
                                    64,
                                    65,
                                    66,
                                    67,
                                    68,
                                    69,
                                    70,
                                    71,
                                    72,
                                    73,
                                    74,
                                    75,
                                    76,
                                    77,
                                    78,
                                    79,
                                    80,
                                    81,
                                    82,
                                    83,
                                    84,
                                    85,
                                    86,
                                    87,
                                    88,
                                    89,
                                    90,
                                    91,
                                    92,
                                    93,
                                    94,
                                    95,
                                    96,
                                    97,
                                    98,
                                    99,
                                    100,
                                    101,
                                    102,
                                    103,
                                    104,
                                    105,
                                    106,
                                    107,
                                    108,
                                    109,
                                    110
                                ],
                                "start": 1305,
                                "length": 3226,
                                "ending_column": 2,
                                "is_dependency": true,
                                "filename_short": "lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                                "starting_column": 1,
                                "filename_absolute": "/tmp/slither-bjjc5fai/lib/contracts/src/contracts/mixins/StorageAccessible.sol",
                                "filename_relative": "lib/contracts/src/contracts/mixins/StorageAccessible.sol"
                            }
                        },
                        "signature": "simulateDelegatecallInternal(address,bytes)"
                    }
                }
            }
        }
    ],
    "locations": [
        {
            "file": "lib/contracts/src/contracts/mixins/StorageAccessible.sol",
            "name": "simulateDelegatecallInternal",
            "type": "function",
            "lines": [
                87,
                88,
                89,
                90,
                91,
                92,
                93,
                94,
                95
            ]
        },
        {
            "file": "lib/contracts/src/contracts/mixins/StorageAccessible.sol",
            "name": "(success,response) = targetContract.delegatecall(calldataPayload)",
            "type": "node",
            "lines": [
                93
            ]
        }
    ],
    "description": "StorageAccessible.simulateDelegatecallInternal(address,bytes) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#87-95) uses delegatecall to a input-controlled function id\n\t- (success,response) = targetContract.delegatecall(calldataPayload) (lib/contracts/src/contracts/mixins/StorageAccessible.sol#93)"
}
medium other detector CREATE/CREATE2 reachable 45 no no
view
trace_id: 0x55aa683749f92f6346227bd6b14c873acdb4a4a461962228dd8fe49160e62935
validation_json
{
    "sink": "CREATE",
    "errors": 0,
    "status": "unknown",
    "attempts": 32,
    "trace_id": "0x55aa683749f92f6346227bd6b14c873acdb4a4a461962228dd8fe49160e62935",
    "confirmed": false,
    "trace_mode": "structLogs",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xdac9318f",
            "selector": "0xdac9318f",
            "calldata_variants": [
                "0xdac9318f",
                "0xdac9318f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4891825",
            "selector": "0xe4891825",
            "calldata_variants": [
                "0xe4891825",
                "0xe48918250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe8d96a2e",
            "selector": "0xe8d96a2e",
            "calldata_variants": [
                "0xe8d96a2e",
                "0xe8d96a2e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed03e78c",
            "selector": "0xed03e78c",
            "calldata_variants": [
                "0xed03e78c",
                "0xed03e78c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2309ab6",
            "selector": "0xf2309ab6",
            "calldata_variants": [
                "0xf2309ab6",
                "0xf2309ab60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xff0e6489",
            "selector": "0xff0e6489",
            "calldata_variants": [
                "0xff0e6489",
                "0xff0e64890000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc5b26eaa",
            "selector": "0xc5b26eaa",
            "calldata_variants": [
                "0xc5b26eaa",
                "0xc5b26eaa0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xca15c873",
            "selector": "0xca15c873",
            "calldata_variants": [
                "0xca15c873",
                "0xca15c8730000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "create_count": 1,
    "create2_count": 0
}
low other cast Contract creation opcode present 60 no
view
evidence_json
{
    "notes": "runtime can deploy contracts dynamically via CREATE/CREATE2",
    "create_count": 1,
    "create2_count": 0
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 14
}
info other cast Heavy EXTCODE*/BALANCE usage 55 no
view
evidence_json
{
    "notes": "frequent external code or balance checks; may indicate introspection or validation logic",
    "ext_balance_count": 7
}