Share Dialog
Share Dialog
Subscribe to Steven
Subscribe to Steven
<100 subscribers
<100 subscribers
본 포스팅은 아래의 The Ethereum Virtual Machine (EVM) Runtime Environment Medium 글을 번역한 것으로 오역이 있을 수 있습니다.
https://medium.com/0xcode/the-ethereum-virtual-machine-evm-runtime-environment-d7969544d3dd
EVM(이더리움 가상 머신)은 이더리움 블록체인에서 운영 체제 런타임 환경을 제공합니다. 스마트 컨트랙트에 존재하는 Solidity 코드는 사람이 읽을 수 있는 high-level 코드에서 기계가 읽을 수 있는 low-level 코드로 번역됩니다. 이 과정에서 코드를 바이트코드로 변환하기 위해 16진수 값으로 텍스트를 번역합니다. 바이트코드는 컴파일러에 의해 생성된 다음 바이트 코드는 EVM에 의해 처리되며, 네트워크에서 실행됩니다. EVM은 FPGA (Field Programmable Array) 또는 스택 기반의 CPU 위에 구축할 수 있습니다. 이는 이더리움 네트워크와 같은 분산 플랫폼 전반에 걸쳐 코드의 이식성을 허락하는 추상화 계층을 제공합니다.
EVM은 Stack Machine의 일종입니다. 다른 스택 기반의 프로그래밍 언어와 같이, 마지막에 입력한 값을 가장 먼저 꺼냅니다. 이는 LIFO(Last In First Out)의 개념입니다. 피연산자가 항상 주어진 위치에 존재하는 Zero Address Format 원칙을 사용합니다. 스택의 값이 임시적이므로 레지스터의 주소가 필요하지 않습니다. 그리하여 작업이 수행될 때, 스택의 상단의 값은 ‘popped’ 되고, 그 결과는 스택으로 다시 ‘pushed’ 됩니다. 이를 다른 말로 Reverse Polish Notation라고 합니다.
아래는 Zero-Address-Format에 대한 설명이 담긴 글입니다.
https://www.geeksforgeeks.org/difference-between-3-address-instruction-and-0-address-instruction/
예시를 살펴보도록 하겠습니다.
x = 12 + 4 * 5
일반적으로 이 방정식은 아래와 같이 읽을 수 있습니다.
x는 4 곱하기 5에 12를 더한 값과 같다.
LIFO의 개념을 사용하면, Stack Machine으로부터 다른 방식으로 읽힐 수 있습니다. 이 경우에는 위 방정식이 아래와 같이 보일 것입니다.
x = 4 5 * 12 +
이것을 호출 스택에서 읽는 방법은 다음과 같습니다.
4, 5, 그리고 곱셈을 취하고, 스택에서 해당 값들을 꺼냅니다. 그런 다음 스택의 상단에 결과 값을 다시 넣어줍니다. 그런 다음 결과 값과 12를 취하여 x의 합을 구한 다음 스택에서 값을 꺼냅니다. 더한 값 x를 다시 스택의 상단으로 넣어줍니다.

두 경우 모두 이 작업에 대한 결과는 32입니다. 데이터를 호출 스택에 넣는 작업은 PUSH 메서드라고 하는 것을 사용하는 반면 데이터를 제거하는 것은 POP 메서드라고 합니다.
사람이 읽을 수 있는 ASCII 문자에서 기계가 읽을 수 있는 16진수로 코드를 컴파일하는 것은 첫번째 단계일 뿐입니다. 다음으로, 기계 코드는 opcode라고 불리는 것을 실행해야 합니다. opcode 또는 연산 코드는 컴퓨터에 수행할 작업을 알려주는 것입니다. 연산자가 수행할 작업에 따라 동작이 달라지는 데이터인 피연산자가 있습니다.
아래는 에스크로 기능을 수행하는 단순한 스마트 컨트랙트입니다.
pragma solidity ^0.5.1;
contract Escrow {
address agent;
mapping(address => uint256) public deposits;
modifier onlyAgent() {
require(msg.sender == agent);
_;
}
constructor () public {
agent = msg.sender;
}
function deposit(address payee) public onlyAgent payable {
uint256 amount = msg.value;
deposits[payee] = deposits[payee] + amount;
}
function withdraw(address payable payee) public onlyAgent {
uint256 payment = deposits[payee];
deposits[payee] = 0;
payee.transfer(payment);
}
}
아래는 컴파일한 다음의 코드로부터 생성된 바이트 코드의 예입니다.
아래는 스마트 컨트랙트에 대해 생성된 opcode입니다.
Opcode는 CPU로부터 실행되는 어셈블리 언어 명령입니다. 물론, 개발자는 동일한 목적을 달성하기 위해 고급 프로그래밍 코드 대신 어셈블리 언어를 사용할 수 있지만 훨씬 더 복잡합니다. IDE의 사용 용이성과 친숙한 UI는 대부분의 개발자에게 훨씬 더 좋고 소요 시간도 줄여줍니다.
스마트 컨트랙트는 분산되고 탈중앙화된 블록체인에 배포됩니다. ABI(Application Binary Interface)는 네트워크를 통해 스마트 컨트랙트와 상호작용하기 위한 표준 방식을 제공합니다. 이를 통해 외부 앱과 컨트랙트 간의 상호작용을 할 수 있습니다. 개발자는 앱 또는 DApps(Decentralized Application)에서 스마트 컨트랙트의 매서드와 함수에 접근하기 위해 ABI를 사용합니다.
[
{
"constant": false,
"inputs": [
{
"name": "payee",
"type": "address"
}
],
"name": "withdraw",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "payee",
"type": "address"
}
],
"name": "deposit",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
}
],
"name": "deposits",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
}
]
스마트 컨트랙트가 블록체인에 배포될 때, EVM은 바이트 코드에서 컴파일된 코드의 opcode를 실행합니다. 만약 함수가 블록체인의 상태를 변경해야 하는 경우라면 가스(wei로 측정)라고 하는 계산 단위가 컨트랙트 소유자에게 청구됩니다. 이러한 비용은 네트워크를 통한 계산 비용 지출해야 하는 이더리움 프로토콜을 따릅니다. 이것은 블록에 넣은 트랜잭션을 확인할 채굴자에게 지불되는 비용입니다. 블록체인의 상태를 변경하지 않는 단순한 call 함수는 가스를 지불하지 않습니다. 이에 대한 예는 스마트 계약에 저장된 값에 대한 잔액 조회 호출입니다.
비용면에서 PUSH 매서드를 사용해 Stack에 데이터를 저장하는 것은 가장 저렴합니다. 그 다음으로는 RAM(시스템 메모리)에 데이터를 저장하는 MSTORE 매서드가 있습니다. 두 방법 모두 데이터 값은 일시적이므로 블록체인에서 영구적이지 않습니다. Disk 저장소에 데이터를 저장하는 SSTORE 매서드를 사용할 때 지속됩니다. SSTORE 매서드는 블록체인에 영구적으로 저장하기 때문에 더욱 비쌉니다.
이 예제의 스마트 컨트랙트 세부사항으로 돌아가보겠습니다. 스마트 컨트랙트가 EVM으로부터 배포되고 실행되면 블록체인에 존재합니다. 이는 불변이고 동시에 투명합니다. 즉시 바뀔 수 없고, 모두에게 공개됩니다. 또한, 스마트 컨트랙트는 자기 자신의 주소가 할당됩니다. 예를 들면,
0x692a70d2e424a56d2c6c27aa97d1a86395877b3a
이 스마트 컨트랙트는 테스트 환경에서 배포되었습니다. 그러나 만약 이 스마트 컨트팩트가 이더리움 블록체인 메인넷에 배포되었다면, block explorer을 사용해 검색할 수 있습니다. 이는 밸런스와 이더 값, 그리고 컨트랙트 창조자의 공개 주소를 포함한 스마트 컨트랙트에 대한 더욱 자세한 내용을 담고 있습니다. 모든 거래는 거래 해시 값으로 나열되고 검색할 수도 있습니다.
아래의 다이어그램은 이더리움 네트워크 아키텍처와 관련된 EVM을 보여줍니다.

본 포스팅은 아래의 The Ethereum Virtual Machine (EVM) Runtime Environment Medium 글을 번역한 것으로 오역이 있을 수 있습니다.
https://medium.com/0xcode/the-ethereum-virtual-machine-evm-runtime-environment-d7969544d3dd
EVM(이더리움 가상 머신)은 이더리움 블록체인에서 운영 체제 런타임 환경을 제공합니다. 스마트 컨트랙트에 존재하는 Solidity 코드는 사람이 읽을 수 있는 high-level 코드에서 기계가 읽을 수 있는 low-level 코드로 번역됩니다. 이 과정에서 코드를 바이트코드로 변환하기 위해 16진수 값으로 텍스트를 번역합니다. 바이트코드는 컴파일러에 의해 생성된 다음 바이트 코드는 EVM에 의해 처리되며, 네트워크에서 실행됩니다. EVM은 FPGA (Field Programmable Array) 또는 스택 기반의 CPU 위에 구축할 수 있습니다. 이는 이더리움 네트워크와 같은 분산 플랫폼 전반에 걸쳐 코드의 이식성을 허락하는 추상화 계층을 제공합니다.
EVM은 Stack Machine의 일종입니다. 다른 스택 기반의 프로그래밍 언어와 같이, 마지막에 입력한 값을 가장 먼저 꺼냅니다. 이는 LIFO(Last In First Out)의 개념입니다. 피연산자가 항상 주어진 위치에 존재하는 Zero Address Format 원칙을 사용합니다. 스택의 값이 임시적이므로 레지스터의 주소가 필요하지 않습니다. 그리하여 작업이 수행될 때, 스택의 상단의 값은 ‘popped’ 되고, 그 결과는 스택으로 다시 ‘pushed’ 됩니다. 이를 다른 말로 Reverse Polish Notation라고 합니다.
아래는 Zero-Address-Format에 대한 설명이 담긴 글입니다.
https://www.geeksforgeeks.org/difference-between-3-address-instruction-and-0-address-instruction/
예시를 살펴보도록 하겠습니다.
x = 12 + 4 * 5
일반적으로 이 방정식은 아래와 같이 읽을 수 있습니다.
x는 4 곱하기 5에 12를 더한 값과 같다.
LIFO의 개념을 사용하면, Stack Machine으로부터 다른 방식으로 읽힐 수 있습니다. 이 경우에는 위 방정식이 아래와 같이 보일 것입니다.
x = 4 5 * 12 +
이것을 호출 스택에서 읽는 방법은 다음과 같습니다.
4, 5, 그리고 곱셈을 취하고, 스택에서 해당 값들을 꺼냅니다. 그런 다음 스택의 상단에 결과 값을 다시 넣어줍니다. 그런 다음 결과 값과 12를 취하여 x의 합을 구한 다음 스택에서 값을 꺼냅니다. 더한 값 x를 다시 스택의 상단으로 넣어줍니다.

두 경우 모두 이 작업에 대한 결과는 32입니다. 데이터를 호출 스택에 넣는 작업은 PUSH 메서드라고 하는 것을 사용하는 반면 데이터를 제거하는 것은 POP 메서드라고 합니다.
사람이 읽을 수 있는 ASCII 문자에서 기계가 읽을 수 있는 16진수로 코드를 컴파일하는 것은 첫번째 단계일 뿐입니다. 다음으로, 기계 코드는 opcode라고 불리는 것을 실행해야 합니다. opcode 또는 연산 코드는 컴퓨터에 수행할 작업을 알려주는 것입니다. 연산자가 수행할 작업에 따라 동작이 달라지는 데이터인 피연산자가 있습니다.
아래는 에스크로 기능을 수행하는 단순한 스마트 컨트랙트입니다.
pragma solidity ^0.5.1;
contract Escrow {
address agent;
mapping(address => uint256) public deposits;
modifier onlyAgent() {
require(msg.sender == agent);
_;
}
constructor () public {
agent = msg.sender;
}
function deposit(address payee) public onlyAgent payable {
uint256 amount = msg.value;
deposits[payee] = deposits[payee] + amount;
}
function withdraw(address payable payee) public onlyAgent {
uint256 payment = deposits[payee];
deposits[payee] = 0;
payee.transfer(payment);
}
}
아래는 컴파일한 다음의 코드로부터 생성된 바이트 코드의 예입니다.
아래는 스마트 컨트랙트에 대해 생성된 opcode입니다.
Opcode는 CPU로부터 실행되는 어셈블리 언어 명령입니다. 물론, 개발자는 동일한 목적을 달성하기 위해 고급 프로그래밍 코드 대신 어셈블리 언어를 사용할 수 있지만 훨씬 더 복잡합니다. IDE의 사용 용이성과 친숙한 UI는 대부분의 개발자에게 훨씬 더 좋고 소요 시간도 줄여줍니다.
스마트 컨트랙트는 분산되고 탈중앙화된 블록체인에 배포됩니다. ABI(Application Binary Interface)는 네트워크를 통해 스마트 컨트랙트와 상호작용하기 위한 표준 방식을 제공합니다. 이를 통해 외부 앱과 컨트랙트 간의 상호작용을 할 수 있습니다. 개발자는 앱 또는 DApps(Decentralized Application)에서 스마트 컨트랙트의 매서드와 함수에 접근하기 위해 ABI를 사용합니다.
[
{
"constant": false,
"inputs": [
{
"name": "payee",
"type": "address"
}
],
"name": "withdraw",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "payee",
"type": "address"
}
],
"name": "deposit",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
}
],
"name": "deposits",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
}
]
스마트 컨트랙트가 블록체인에 배포될 때, EVM은 바이트 코드에서 컴파일된 코드의 opcode를 실행합니다. 만약 함수가 블록체인의 상태를 변경해야 하는 경우라면 가스(wei로 측정)라고 하는 계산 단위가 컨트랙트 소유자에게 청구됩니다. 이러한 비용은 네트워크를 통한 계산 비용 지출해야 하는 이더리움 프로토콜을 따릅니다. 이것은 블록에 넣은 트랜잭션을 확인할 채굴자에게 지불되는 비용입니다. 블록체인의 상태를 변경하지 않는 단순한 call 함수는 가스를 지불하지 않습니다. 이에 대한 예는 스마트 계약에 저장된 값에 대한 잔액 조회 호출입니다.
비용면에서 PUSH 매서드를 사용해 Stack에 데이터를 저장하는 것은 가장 저렴합니다. 그 다음으로는 RAM(시스템 메모리)에 데이터를 저장하는 MSTORE 매서드가 있습니다. 두 방법 모두 데이터 값은 일시적이므로 블록체인에서 영구적이지 않습니다. Disk 저장소에 데이터를 저장하는 SSTORE 매서드를 사용할 때 지속됩니다. SSTORE 매서드는 블록체인에 영구적으로 저장하기 때문에 더욱 비쌉니다.
이 예제의 스마트 컨트랙트 세부사항으로 돌아가보겠습니다. 스마트 컨트랙트가 EVM으로부터 배포되고 실행되면 블록체인에 존재합니다. 이는 불변이고 동시에 투명합니다. 즉시 바뀔 수 없고, 모두에게 공개됩니다. 또한, 스마트 컨트랙트는 자기 자신의 주소가 할당됩니다. 예를 들면,
0x692a70d2e424a56d2c6c27aa97d1a86395877b3a
이 스마트 컨트랙트는 테스트 환경에서 배포되었습니다. 그러나 만약 이 스마트 컨트팩트가 이더리움 블록체인 메인넷에 배포되었다면, block explorer을 사용해 검색할 수 있습니다. 이는 밸런스와 이더 값, 그리고 컨트랙트 창조자의 공개 주소를 포함한 스마트 컨트랙트에 대한 더욱 자세한 내용을 담고 있습니다. 모든 거래는 거래 해시 값으로 나열되고 검색할 수도 있습니다.
아래의 다이어그램은 이더리움 네트워크 아키텍처와 관련된 EVM을 보여줍니다.

{
"linkReferences": {},
"object": "608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103ac806100606000396000f3fe608060405260043610610051576000357c01000000000000000000000000000000000000000000000000000000009004806351cff8d914610056578063f340fa01146100a7578063fc7e286d146100eb575b600080fd5b34801561006257600080fd5b506100a56004803603602081101561007957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610150565b005b6100e9600480360360208110156100bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061027f565b005b3480156100f757600080fd5b5061013a6004803603602081101561010e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610368565b6040518082815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156101ab57600080fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561027a573d6000803e3d6000fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156102da57600080fd5b600034905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6001602052806000526040600020600091509050548156fea165627a7a72305820d6fa1114b349521b18dd6efdd04f06c882f1f7984c04829d2400baec88dc76950029",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x3AC DUP1 PUSH2 0x60 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x51 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x56 JUMPI DUP1 PUSH4 0xF340FA01 EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0xFC7E286D EQ PUSH2 0xEB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x150 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x27F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x368 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x27A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLVALUE SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD ADD PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd6 STATICCALL GT EQ 0xb3 0x49 MSTORE SHL XOR 0xdd PUSH15 0xFDD04F06C882F1F7984C04829D2400 0xba 0xec DUP9 0xdc PUSH23 0x9500290000000000000000000000000000000000000000 ",
"sourceMap": "56:676:0:-;;;331:57;8:9:-1;5:2;;;30:1;27;20:12;5:2;331:57:0;371:10;363:5;;:18;;;;;;;;;;;;;;;;;;56:676;;;;;;"
}
PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x51 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x56 JUMPI DUP1 PUSH4 0xF340FA01 EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0xFC7E286D EQ PUSH2 0xEB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x150 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x27F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x368 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x27A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLVALUE SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD ADD PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd6 STATICCALL GT EQ 0xb3 0x49 MSTORE SHL XOR 0xdd PUSH15 0xFDD04F06C882F1F7984C04829D2400 0xba 0xec DUP9 0xdc PUSH23 0x9500290000000000000000000000000000000000000000
{
"linkReferences": {},
"object": "608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103ac806100606000396000f3fe608060405260043610610051576000357c01000000000000000000000000000000000000000000000000000000009004806351cff8d914610056578063f340fa01146100a7578063fc7e286d146100eb575b600080fd5b34801561006257600080fd5b506100a56004803603602081101561007957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610150565b005b6100e9600480360360208110156100bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061027f565b005b3480156100f757600080fd5b5061013a6004803603602081101561010e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610368565b6040518082815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156101ab57600080fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561027a573d6000803e3d6000fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156102da57600080fd5b600034905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6001602052806000526040600020600091509050548156fea165627a7a72305820d6fa1114b349521b18dd6efdd04f06c882f1f7984c04829d2400baec88dc76950029",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x3AC DUP1 PUSH2 0x60 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x51 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x56 JUMPI DUP1 PUSH4 0xF340FA01 EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0xFC7E286D EQ PUSH2 0xEB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x150 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x27F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x368 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x27A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLVALUE SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD ADD PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd6 STATICCALL GT EQ 0xb3 0x49 MSTORE SHL XOR 0xdd PUSH15 0xFDD04F06C882F1F7984C04829D2400 0xba 0xec DUP9 0xdc PUSH23 0x9500290000000000000000000000000000000000000000 ",
"sourceMap": "56:676:0:-;;;331:57;8:9:-1;5:2;;;30:1;27;20:12;5:2;331:57:0;371:10;363:5;;:18;;;;;;;;;;;;;;;;;;56:676;;;;;;"
}
PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x51 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x56 JUMPI DUP1 PUSH4 0xF340FA01 EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0xFC7E286D EQ PUSH2 0xEB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x150 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x27F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x368 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x27A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLVALUE SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD ADD PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd6 STATICCALL GT EQ 0xb3 0x49 MSTORE SHL XOR 0xdd PUSH15 0xFDD04F06C882F1F7984C04829D2400 0xba 0xec DUP9 0xdc PUSH23 0x9500290000000000000000000000000000000000000000
No activity yet