建立屬於自己的GameFi Dapp(7/7)
使用web3j呼叫智慧合約功能
建立屬於自己的GameFi Dapp(7/7)
使用web3j呼叫智慧合約功能

web3j
文章目錄
- 如何和智慧合約互動?
- web3j介紹
- 將solidity轉換成java
- 最後結果
- 系列文章目錄
1. 如何和智慧合約互動?
區塊鏈 layer
區塊鏈的架構大致可以分為4層,分別是layer 0~3,layer 0是區塊鏈的核心基礎,它執行區塊鏈的點對點網路、硬體設備等,讓區塊鏈可以互相交互;layer 1是負責處理和執行區塊鏈的交易,執行諸如PoW、PoS等共識機制,以及解決區塊時間和交易衝突的地方;layer 2是layer 0和layer 1的擴容,包含zk rollups、側鏈等,為了提升區塊鏈的交易吞吐量;layer 3是區塊鏈的應用層,目的在於為區塊鏈生態上提供更多應用服務,智慧合約其實是介於layer 2和layer 3的產物,在layer 3我們可以開發DApps來讓智慧合約有更多人性化的UI、UX。

Blockchain Layer
DApps如何和智慧合約互動?
從智慧合約的原始碼到使用智慧合約,大概包含幾個步驟:
- 撰寫智慧合約的原始碼(Solidity 、Move、Rust…)
- 編譯智慧合約的原始碼成可在 EVM 上執行的 **Bytecode(Binary code)和 [ABI(Application Binary Interface)](https://docs.soliditylang.org/en/v0.8.17/abi-spec.html)。**
- 部署智慧合約,實際上是把 bytecode 儲存在區塊鏈上,並取得一個專屬這個合約的地址。
- 如果要寫個程式呼叫這個智慧合約,就要把資料發送到這個合約的地址(透過 transaction)。Ethereum 節點會根據輸入的資料,選擇要執行合約中的哪一個 function 和要輸入的參數。
寫過API的人應該對ABI會很好理解,ABI其實就是定義好function名稱和參數,我們透過定義好的方式來呼叫智慧合約。ABI其實是一個JSON格式的檔案,我們可以透過RPC來向區塊鏈節點發起交易請求,節點會去鏈上抓取這份合約回來,如下圖所示,目前前端client主流有web3.js和web3.j的library可以使用,分別對應javascript和java,這個專案是使用java來開發,所以使用web3.j來開發程式。

Web3 js

Web3 j
2. web3j介紹
**web3j 是由一個 Java 撰寫的程式庫,主要是用來提供處理以太坊智慧合約及以太坊網路上的節點,簡單來說它是一個 Ethereum Client Library,方便透過該程式庫去與以太坊進行溝通。[web3j](https://docs.web3j.io/4.8.7/)** 除了提供原生 Java 的程式庫也可以在 android 上進行使用。
在撰寫java程式之前,我們需要先將web3j的ibrary core先引入專案中,如下所示,在專案中加入這幾段程式碼:
Maven
Java:
<dependency>
<groupId>org.web3j</groupId>
<artifactId>core</artifactId>
<version>4.8.7</version>
</dependency>
Android:
<dependency>
<groupId>org.web3j</groupId>
<artifactId>core</artifactId>
<version>4.8.7-android</version>
</dependency>
Gradle
Java:
implementation ('org.web3j:core:4.8.7')
Android:
implementation ('org.web3j:core:4.8.7-android')
3. 將solidity轉換成java
當我們開發java程式時,需要將solidity轉換成java語言才能透過web3j打包成transaction到區塊鏈上,取得需要的資料,如下圖是solidity轉換成java後的RPC function。轉換solidity需要兩樣東西,分別是ABI和BIN,就是上節提到的Application Binary Interface、Bytecode,產生ABI和BIN有很多方式,我這邊最推薦的方法是直接透過Remix IDE來取得,就不用安裝工具了,但還是需要安裝web3j CLI,後面會介紹到。

java RPC
透過Remix IDE取得ABI和BIN的方式如下:
在Remix IDE的介面左邊有一個編譯的icon,當我們編譯完solidity後,在最下方可以直接取得ABI和Bytecode。

Remix
ABI
[
{
"inputs": [
{
"internalType": "string",
"name": "initBaseURI",
"type": "string"
},
{
"internalType": "string",
"name": "initNotRevealedUri",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
...
Bytecode
Bytecode部分比較特別,從remix取得的是下面這段json,但實際我們需要的只有object,這才是binary code,將「608060405...」另存成.bin檔,ABI存成.abi後,就準備好需要的兩樣條件。
{
"functionDebugData": {
"@_175": {
"entryPoint": null,
"id": 175,
"parameterSlots": 2,
"returnSlots": 0
},
"@_2149": {
"entryPoint": null,
"id": 2149,
"parameterSlots": 2,
"returnSlots": 0
},
...
"linkReferences": {},
"object": "60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff021916908315150217905550670429d069189e0000600b55600a600c55600a600d556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601090805190602001906200009d9291906200039c565b50348015620000ab57600080fd5b506040516200484e3803806200484e8339818101604052810190620000d19190620004ca565b6040518060400160405280600981526020017f594f524b204d65746100000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f594b0000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001559291906200039c565b5080600190805190602001906200016e9291906200039c565b5050506200019162000185620001bb60201b60201c565b620001c360201b60201c565b620001a2826200028960201b60201c565b620001b381620002b560201b60201c565b505062000756565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000299620002e160201b60201c565b80600e9080519060200190620002b19291906200039c565b5050565b620002c5620002e160201b60201c565b80600f9080519060200190620002dd9291906200039c565b5050565b620002f1620001bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003176200037260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003679062000576565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003aa906200063e565b90600052602060002090601f016020900481019282620003ce57600085556200041a565b82601f10620003e957805160ff19168380011785556200041a565b828001600101855582156200041a579182015b8281111562000419578251825591602001919060010190620003fc565b5b5090506200042991906200042d565b5090565b5b80821115620004485760008160009055506001016200042e565b5090565b6000620004636200045d84620005c1565b62000598565b9050828152602081018484840111156200048257620004816200070d565b5b6200048f84828562000608565b509392505050565b600082601f830112620004af57620004ae62000708565b5b8151620004c18482602086016200044c565b91505092915050565b60008060408385031215620004e457620004e362000717565b5b600083015167ffffffffffffffff81111562000505576200050462000712565b5b620005138582860162000497565b925050602083015167ffffffffffffffff81111562000537576200053662000712565b5b620005458582860162000497565b9150509250929050565b60006200055e602083620005f7565b91506200056b826200072d565b602082019050919050565b6000602082019050818103600083015262000591816200054f565b9050919050565b6000620005a4620005b7565b9050620005b2828262000674565b919050565b6000604051905090565b600067ffffffffffffffff821115620005df57620005de620006d9565b5b620005ea826200071c565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620006285780820151818401526020810190506200060b565b8381111562000638576000848401525b50505050565b600060028204905060018216806200065757607f821691505b602082108114156200066e576200066d620006aa565b5b50919050565b6200067f826200071c565b810181811067ffffffffffffffff82111715620006a157620006a0620006d9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6140e880620007666000396000f3fe60806040526004361061021a5760003560e01c80637080d6fc11610123578063b88d4fde116100ab578063e6b5313a1161006f578063e6b5313a146107ad578063e985e9c5146107c9578063f2c4ce1e14610806578063f2fde38b1461082f578063f4a0a528146108585761021a565b8063b88d4fde146106dc578063c668286214610705578063c87b56dd14610730578063da3ef23f1461076d578063de8b51e1146107965761021a565b80637501f741116100f25780637501f741146106095780638da5cb5b1461063457806395d89b411461065f5780639d51d9b71461068a578063a22cb465146106b35761021a565b80637080d6fc1461055f57806370a082311461058a578063715018a6146105c757806373ad468a146105de5761021a565b80633b84d9c6116101a6578063547520fe11610175578063547520fe1461047a57806355f804b3146104a35780636352211e146104cc5780636817c76c146105095780636ebeac85146105345761021a565b80633b84d9c6146103d457806342842e0e146103eb5780634f6ccce71461041457806351cff8d9146104515761021a565b8063095ea7b3116101ed578063095ea7b3146102ef57806318160ddd1461031857806323b872dd146103435780632f745c591461036c57806332cb6b0c146103a95761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063081c8c44146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612db9565b610881565b6040516102539190613373565b60405180910390f35b34801561026857600080fd5b506102716108fb565b60405161027e919061338e565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612e5c565b61098d565b6040516102bb919061330c565b60405180910390f35b3480156102d057600080fd5b506102d96109d3565b6040516102e6919061338e565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190612d79565b610a61565b005b34801561032457600080fd5b5061032d610b79565b60405161033a9190613650565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190612c63565b610b86565b005b34801561037857600080fd5b50610393600480360381019061038e9190612d79565b610be6565b6040516103a09190613650565b60405180910390f35b3480156103b557600080fd5b506103be610c8b565b6040516103cb9190613650565b60405180910390f35b3480156103e057600080fd5b506103e9610c90565b005b3480156103f757600080fd5b50610412600480360381019061040d9190612c63565b610cc4565b005b34801561042057600080fd5b5061043b60048036038101906104369190612e5c565b610ce4565b6040516104489190613650565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190612bf6565b610d55565b005b34801561048657600080fd5b506104a1600480360381019061049c9190612e5c565b610dad565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190612e13565b610dbf565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190612e5c565b610de1565b604051610500919061330c565b60405180910390f35b34801561051557600080fd5b5061051e610e93565b60405161052b9190613650565b60405180910390f35b34801561054057600080fd5b50610549610e99565b6040516105569190613373565b60405180910390f35b34801561056b57600080fd5b50610574610eac565b6040516105819190613373565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190612bf6565b610ebf565b6040516105be9190613650565b60405180910390f35b3480156105d357600080fd5b506105dc610f77565b005b3480156105ea57600080fd5b506105f3610f8b565b6040516106009190613650565b60405180910390f35b34801561061557600080fd5b5061061e610f91565b60405161062b9190613650565b60405180910390f35b34801561064057600080fd5b50610649610f97565b604051610656919061330c565b60405180910390f35b34801561066b57600080fd5b50610674610fc1565b604051610681919061338e565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190612e5c565b611053565b005b3480156106bf57600080fd5b506106da60048036038101906106d59190612d39565b611065565b005b3480156106e857600080fd5b5061070360048036038101906106fe9190612cb6565b61107b565b005b34801561071157600080fd5b5061071a6110dd565b604051610727919061338e565b60405180910390f35b34801561073c57600080fd5b5061075760048036038101906107529190612e5c565b61116b565b604051610764919061338e565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f9190612e13565b61138f565b005b3480156107a257600080fd5b506107ab6113b1565b005b6107c760048036038101906107c29190612e5c565b6113e5565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190612c23565b611583565b6040516107fd9190613373565b60405180910390f35b34801561081257600080fd5b5061082d60048036038101906108289190612e13565b611617565b005b34801561083b57600080fd5b5061085660048036038101906108519190612bf6565b611639565b005b34801561086457600080fd5b5061087f600480360381019061087a9190612e5c565b6116bd565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f457506108f3826116cf565b5b9050919050565b60606000805461090a90613915565b80601f016020809104026020016040519081016040528092919081815260200182805461093690613915565b80156109835780601f1061095857610100808354040283529160200191610983565b820191906000526020600020905b81548152906001019060200180831161096657829003601f168201915b5050505050905090565b6000610998826117b1565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f80546109e090613915565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90613915565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b505050505081565b6000610a6c82610de1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad4906135d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610afc6117fc565b73ffffffffffffffffffffffffffffffffffffffff161480610b2b5750610b2a81610b256117fc565b611583565b5b610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190613510565b60405180910390fd5b610b748383611804565b505050565b6000600880549050905090565b610b97610b916117fc565b826118bd565b610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd90613630565b60405180910390fd5b610be1838383611952565b505050565b6000610bf183610ebf565b8210610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c29906133b0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b606481565b610c98611bb9565b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b610cdf8383836040518060200160405280600081525061107b565b505050565b6000610cee610b79565b8210610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906135f0565b60405180910390fd5b60088281548110610d4357610d42613aae565b5b90600052602060002001549050919050565b610d5d611bb9565b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610da8573d6000803e3d6000fd5b505050565b610db5611bb9565b80600d8190555050565b610dc7611bb9565b80600e9080519060200190610ddd929190612a0a565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e81906135b0565b60405180910390fd5b80915050919050565b600b5481565b600a60159054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f27906134f0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f7f611bb9565b610f896000611c37565b565b600c5481565b600d5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fd090613915565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffc90613915565b80156110495780601f1061101e57610100808354040283529160200191611049565b820191906000526020600020905b81548152906001019060200180831161102c57829003601f168201915b5050505050905090565b61105b611bb9565b80600c8190555050565b6110776110706117fc565b8383611cfd565b5050565b61108c6110866117fc565b836118bd565b6110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290613630565b60405180910390fd5b6110d784848484611e6a565b50505050565b601080546110ea90613915565b80601f016020809104026020016040519081016040528092919081815260200182805461111690613915565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b505050505081565b606061117682611ec6565b6111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac90613590565b60405180910390fd5b60001515600a60159054906101000a900460ff161515141561126357600f80546111de90613915565b80601f016020809104026020016040519081016040528092919081815260200182805461120a90613915565b80156112575780601f1061122c57610100808354040283529160200191611257565b820191906000526020600020905b81548152906001019060200180831161123a57829003601f168201915b5050505050905061138a565b600060116000848152602001908152602001600020805461128390613915565b80601f01602080910402602001604051908101604052809291908181526020018280546112af90613915565b80156112fc5780601f106112d1576101008083540402835291602001916112fc565b820191906000526020600020905b8154815290600101906020018083116112df57829003601f168201915b50505050509050600061130d611f32565b905060008151141561132357819250505061138a565b6000825111156113585780826040516020016113409291906132b7565b6040516020818303038152906040529250505061138a565b8061136285611fc4565b6010604051602001611376939291906132db565b604051602081830303815290604052925050505b919050565b611397611bb9565b80601090805190602001906113ad929190612a0a565b5050565b6113b9611bb9565b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6064816113f0610b79565b6113fa919061374a565b111561143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290613450565b60405180910390fd5b600a60149054906101000a900460ff1661148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190613550565b60405180910390fd5b600c548161149733610ebf565b6114a1919061374a565b11156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d9906134d0565b60405180910390fd5b34600b54826114f191906137d1565b1115611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152990613610565b60405180910390fd5b600d54811115611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e906134b0565b60405180910390fd5b61158081612125565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61161f611bb9565b80600f9080519060200190611635929190612a0a565b5050565b611641611bb9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a8906133f0565b60405180910390fd5b6116ba81611c37565b50565b6116c5611bb9565b80600b8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061179a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117aa57506117a98261216f565b5b9050919050565b6117ba81611ec6565b6117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f0906135b0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661187783610de1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806118c983610de1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061190b575061190a8185611583565b5b8061194957508373ffffffffffffffffffffffffffffffffffffffff166119318461098d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661197282610de1565b73ffffffffffffffffffffffffffffffffffffffff16146119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bf90613410565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90613470565b60405180910390fd5b611a438383836121d9565b611a4e600082611804565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a9e919061382b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af5919061374a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bb48383836122ed565b505050565b611bc16117fc565b73ffffffffffffffffffffffffffffffffffffffff16611bdf610f97565b73ffffffffffffffffffffffffffffffffffffffff1614611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90613570565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390613490565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e5d9190613373565b60405180910390a3505050565b611e75848484611952565b611e81848484846122f2565b611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb7906133d0565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600e8054611f4190613915565b80601f0160208091040260200160405190810160405280929190818152602001828054611f6d90613915565b8015611fba5780601f10611f8f57610100808354040283529160200191611fba565b820191906000526020600020905b815481529060010190602001808311611f9d57829003601f168201915b5050505050905090565b6060600082141561200c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612120565b600082905060005b6000821461203e57808061202790613978565b915050600a8261203791906137a0565b9150612014565b60008167ffffffffffffffff81111561205a57612059613add565b5b6040519080825280601f01601f19166020018201604052801561208c5781602001600182028036833780820191505090505b5090505b60008514612119576001826120a5919061382b565b9150600a856120b491906139c1565b60306120c0919061374a565b60f81b8183815181106120d6576120d5613aae565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561211291906137a0565b9450612090565b8093505050505b919050565b60005b8181101561216b57600061213a610b79565b90506064612146610b79565b1015612157576121563382612489565b5b50808061216390613978565b915050612128565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121e48383836124a7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561222757612222816124ac565b612266565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122655761226483826124f5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a9576122a481612662565b6122e8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122e7576122e68282612733565b5b5b505050565b505050565b60006123138473ffffffffffffffffffffffffffffffffffffffff166127b2565b1561247c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261233c6117fc565b8786866040518563ffffffff1660e01b815260040161235e9493929190613327565b602060405180830381600087803b15801561237857600080fd5b505af19250505080156123a957506040513d601f19601f820116820180604052508101906123a69190612de6565b60015b61242c573d80600081146123d9576040519150601f19603f3d011682016040523d82523d6000602084013e6123de565b606091505b50600081511415612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b906133d0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612481565b600190505b949350505050565b6124a38282604051806020016040528060008152506127d5565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161250284610ebf565b61250c919061382b565b90506000600760008481526020019081526020016000205490508181146125f1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612676919061382b565b90506000600960008481526020019081526020016000205490506000600883815481106126a6576126a5613aae565b5b9060005260206000200154905080600883815481106126c8576126c7613aae565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061271757612716613a7f565b5b6001900381819060005260206000200160009055905550505050565b600061273e83610ebf565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6127df8383612830565b6127ec60008484846122f2565b61282b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612822906133d0565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790613530565b60405180910390fd5b6128a981611ec6565b156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090613430565b60405180910390fd5b6128f5600083836121d9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612945919061374a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a06600083836122ed565b5050565b828054612a1690613915565b90600052602060002090601f016020900481019282612a385760008555612a7f565b82601f10612a5157805160ff1916838001178555612a7f565b82800160010185558215612a7f579182015b82811115612a7e578251825591602001919060010190612a63565b5b509050612a8c9190612a90565b5090565b5b80821115612aa9576000816000905550600101612a91565b5090565b6000612ac0612abb84613690565b61366b565b905082815260208101848484011115612adc57612adb613b11565b5b612ae78482856138d3565b509392505050565b6000612b02612afd846136c1565b61366b565b905082815260208101848484011115612b1e57612b1d613b11565b5b612b298482856138d3565b509392505050565b600081359050612b4081614056565b92915050565b600081359050612b558161406d565b92915050565b600081359050612b6a81614084565b92915050565b600081519050612b7f81614084565b92915050565b600082601f830112612b9a57612b99613b0c565b5b8135612baa848260208601612aad565b91505092915050565b600082601f830112612bc857612bc7613b0c565b5b8135612bd8848260208601612aef565b91505092915050565b600081359050612bf08161409b565b92915050565b600060208284031215612c0c57612c0b613b1b565b5b6000612c1a84828501612b31565b91505092915050565b60008060408385031215612c3a57612c39613b1b565b5b6000612c4885828601612b31565b9250506020612c5985828601612b31565b9150509250929050565b600080600060608486031215612c7c57612c7b613b1b565b5b6000612c8a86828701612b31565b9350506020612c9b86828701612b31565b9250506040612cac86828701612be1565b9150509250925092565b60008060008060808587031215612cd057612ccf613b1b565b5b6000612cde87828801612b31565b9450506020612cef87828801612b31565b9350506040612d0087828801612be1565b925050606085013567ffffffffffffffff811115612d2157612d20613b16565b5b612d2d87828801612b85565b91505092959194509250565b60008060408385031215612d5057612d4f613b1b565b5b6000612d5e85828601612b31565b9250506020612d6f85828601612b46565b9150509250929050565b60008060408385031215612d9057612d8f613b1b565b5b6000612d9e85828601612b31565b9250506020612daf85828601612be1565b9150509250929050565b600060208284031215612dcf57612dce613b1b565b5b6000612ddd84828501612b5b565b91505092915050565b600060208284031215612dfc57612dfb613b1b565b5b6000612e0a84828501612b70565b91505092915050565b600060208284031215612e2957612e28613b1b565b5b600082013567ffffffffffffffff811115612e4757612e46613b16565b5b612e5384828501612bb3565b91505092915050565b600060208284031215612e7257612e71613b1b565b5b6000612e8084828501612be1565b91505092915050565b612e928161385f565b82525050565b612ea181613871565b82525050565b6000612eb282613707565b612ebc818561371d565b9350612ecc8185602086016138e2565b612ed581613b20565b840191505092915050565b6000612eeb82613712565b612ef5818561372e565b9350612f058185602086016138e2565b612f0e81613b20565b840191505092915050565b6000612f2482613712565b612f2e818561373f565b9350612f3e8185602086016138e2565b80840191505092915050565b60008154612f5781613915565b612f61818661373f565b94506001821660008114612f7c5760018114612f8d57612fc0565b60ff19831686528186019350612fc0565b612f96856136f2565b60005b83811015612fb857815481890152600182019150602081019050612f99565b838801955050505b50505092915050565b6000612fd6602b8361372e565b9150612fe182613b31565b604082019050919050565b6000612ff960328361372e565b915061300482613b80565b604082019050919050565b600061301c60268361372e565b915061302782613bcf565b604082019050919050565b600061303f60258361372e565b915061304a82613c1e565b604082019050919050565b6000613062601c8361372e565b915061306d82613c6d565b602082019050919050565b6000613085601c8361372e565b915061309082613c96565b602082019050919050565b60006130a860248361372e565b91506130b382613cbf565b604082019050919050565b60006130cb60198361372e565b91506130d682613d0e565b602082019050919050565b60006130ee60208361372e565b91506130f982613d37565b602082019050919050565b6000613111601d8361372e565b915061311c82613d60565b602082019050919050565b600061313460298361372e565b915061313f82613d89565b604082019050919050565b6000613157603e8361372e565b915061316282613dd8565b604082019050919050565b600061317a60208361372e565b915061318582613e27565b602082019050919050565b600061319d60268361372e565b91506131a882613e50565b604082019050919050565b60006131c060208361372e565b91506131cb82613e9f565b602082019050919050565b60006131e3602f8361372e565b91506131ee82613ec8565b604082019050919050565b600061320660188361372e565b915061321182613f17565b602082019050919050565b600061322960218361372e565b915061323482613f40565b604082019050919050565b600061324c602c8361372e565b915061325782613f8f565b604082019050919050565b600061326f60158361372e565b915061327a82613fde565b602082019050919050565b6000613292602e8361372e565b915061329d82614007565b604082019050919050565b6132b1816138c9565b82525050565b60006132c38285612f19565b91506132cf8284612f19565b91508190509392505050565b60006132e78286612f19565b91506132f38285612f19565b91506132ff8284612f4a565b9150819050949350505050565b60006020820190506133216000830184612e89565b92915050565b600060808201905061333c6000830187612e89565b6133496020830186612e89565b61335660408301856132a8565b81810360608301526133688184612ea7565b905095945050505050565b60006020820190506133886000830184612e98565b92915050565b600060208201905081810360008301526133a88184612ee0565b905092915050565b600060208201905081810360008301526133c981612fc9565b9050919050565b600060208201905081810360008301526133e981612fec565b9050919050565b600060208201905081810360008301526134098161300f565b9050919050565b6000602082019050818103600083015261342981613032565b9050919050565b6000602082019050818103600083015261344981613055565b9050919050565b6000602082019050818103600083015261346981613078565b9050919050565b600060208201905081810360008301526134898161309b565b9050919050565b600060208201905081810360008301526134a9816130be565b9050919050565b600060208201905081810360008301526134c9816130e1565b9050919050565b600060208201905081810360008301526134e981613104565b9050919050565b6000602082019050818103600083015261350981613127565b9050919050565b600060208201905081810360008301526135298161314a565b9050919050565b600060208201905081810360008301526135498161316d565b9050919050565b6000602082019050818103600083015261356981613190565b9050919050565b60006020820190508181036000830152613589816131b3565b9050919050565b600060208201905081810360008301526135a9816131d6565b9050919050565b600060208201905081810360008301526135c9816131f9565b9050919050565b600060208201905081810360008301526135e98161321c565b9050919050565b600060208201905081810360008301526136098161323f565b9050919050565b6000602082019050818103600083015261362981613262565b9050919050565b6000602082019050818103600083015261364981613285565b9050919050565b600060208201905061366560008301846132a8565b92915050565b6000613675613686565b90506136818282613947565b919050565b6000604051905090565b600067ffffffffffffffff8211156136ab576136aa613add565b5b6136b482613b20565b9050602081019050919050565b600067ffffffffffffffff8211156136dc576136db613add565b5b6136e582613b20565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613755826138c9565b9150613760836138c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613795576137946139f2565b5b828201905092915050565b60006137ab826138c9565b91506137b6836138c9565b9250826137c6576137c5613a21565b5b828204905092915050565b60006137dc826138c9565b91506137e7836138c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138205761381f6139f2565b5b828202905092915050565b6000613836826138c9565b9150613841836138c9565b925082821015613854576138536139f2565b5b828203905092915050565b600061386a826138a9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139005780820151818401526020810190506138e5565b8381111561390f576000848401525b50505050565b6000600282049050600182168061392d57607f821691505b6020821081141561394157613940613a50565b5b50919050565b61395082613b20565b810181811067ffffffffffffffff8211171561396f5761396e613add565b5b80604052505050565b6000613983826138c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139b6576139b56139f2565b5b600182019050919050565b60006139cc826138c9565b91506139d7836138c9565b9250826139e7576139e6613a21565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f43616e206f6e6c79206d696e74203120746f6b656e7320617420612074696d65600082015250565b7f53616c6520776f756c6420657863656564206d61782062616c616e6365000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420594f524b60008201527f204d657461730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61405f8161385f565b811461406a57600080fd5b50565b61407681613871565b811461408157600080fd5b50565b61408d8161387d565b811461409857600080fd5b50565b6140a4816138c9565b81146140af57600080fd5b5056fea26469706673582212207529e8b90bd43b6e51fe6f54bd666828007713e08b4a4988a8da18eeabc24ea664736f6c63430008070033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0xA PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0xA PUSH1 0x15 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH8 0x429D069189E0000 PUSH1 0xB SSTORE PUSH1 0xA PUSH1 0xC SSTORE PUSH1 0xA PUSH1 0xD SSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x2E6A736F6E000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x10 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x9D SWAP3 SWAP2 SWAP1 PUSH3 0x39C JUMP JUMPDEST POP CALLVALUE DUP1 ISZERO PUSH3 0xAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x484E CODESIZE SUB DUP1 PUSH3 0x484E DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH3 0xD1 SWAP2 SWAP1 PUSH3 0x4CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x594F524B204D6574610000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x594B000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 PUSH1 0x0 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x155 SWAP3 SWAP2 SWAP1 PUSH3 0x39C JUMP JUMPDEST POP DUP1 PUSH1 0x1 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x16E SWAP3 SWAP2 SWAP1 PUSH3 0x39C JUMP JUMPDEST POP POP POP PUSH3 0x191 PUSH3 0x185 PUSH3 0x1BB PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1C3 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1A2 DUP3 PUSH3 0x289 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1B3 DUP2 PUSH3 0x2B5 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP PUSH3 0x756 JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0xA PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH3 0x299 PUSH3 0x2E1 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP1 PUSH1 0xE SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x2B1 SWAP3 SWAP2 SWAP1 PUSH3 0x39C JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH3 0x2C5 PUSH3 0x2E1 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP1 PUSH1 0xF SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x2DD SWAP3 SWAP2 SWAP1 PUSH3 0x39C JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH3 0x2F1 PUSH3 0x1BB PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH3 0x317 PUSH3 0x372 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH3 0x370 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x367 SWAP1 PUSH3 0x576 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x3AA SWAP1 PUSH3 0x63E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x3CE JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x41A JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x3E9 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x41A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x41A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x419 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x3FC JUMP JUMPDEST JUMPDEST POP SWAP1 POP PUSH3 0x429 SWAP2 SWAP1 PUSH3 0x42D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x448 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH3 0x42E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x463 PUSH3 0x45D DUP5 PUSH3 0x5C1 JUMP JUMPDEST PUSH3 0x598 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH3 0x482 JUMPI PUSH3 0x481 PUSH3 0x70D JUMP JUMPDEST JUMPDEST PUSH3 0x48F DUP5 DUP3 DUP6 PUSH3 0x608 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x4AF JUMPI PUSH3 0x4AE PUSH3 0x708 JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH3 0x4C1 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH3 0x44C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x4E4 JUMPI PUSH3 0x4E3 PUSH3 0x717 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP4 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH3 0x505 JUMPI PUSH3 0x504 PUSH3 0x712 JUMP JUMPDEST JUMPDEST PUSH3 0x513 DUP6 DUP3 DUP7 ADD PUSH3 0x497 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH3 0x537 JUMPI PUSH3 0x536 PUSH3 0x712 JUMP JUMPDEST JUMPDEST PUSH3 0x545 DUP6 DUP3 DUP7 ADD PUSH3 0x497 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x55E PUSH1 0x20 DUP4 PUSH3 0x5F7 JUMP JUMPDEST SWAP2 POP PUSH3 0x56B DUP3 PUSH3 0x72D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH3 0x591 DUP2 PUSH3 0x54F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x5A4 PUSH3 0x5B7 JUMP JUMPDEST SWAP1 POP PUSH3 0x5B2 DUP3 DUP3 PUSH3 0x674 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH3 0x5DF JUMPI PUSH3 0x5DE PUSH3 0x6D9 JUMP JUMPDEST JUMPDEST PUSH3 0x5EA DUP3 PUSH3 0x71C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x628 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH3 0x60B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x638 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH3 0x657 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x66E JUMPI PUSH3 0x66D PUSH3 0x6AA JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0x67F DUP3 PUSH3 0x71C JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH3 0x6A1 JUMPI PUSH3 0x6A0 PUSH3 0x6D9 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x40E8 DUP1 PUSH3 0x766 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x21A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7080D6FC GT PUSH2 0x123 JUMPI DUP1 PUSH4 0xB88D4FDE GT PUSH2 0xAB JUMPI DUP1 PUSH4 0xE6B5313A GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE6B5313A EQ PUSH2 0x7AD JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x7C9 JUMPI DUP1 PUSH4 0xF2C4CE1E EQ PUSH2 0x806 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0xF4A0A528 EQ PUSH2 0x858 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x6DC JUMPI DUP1 PUSH4 0xC6682862 EQ PUSH2 0x705 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x730 JUMPI DUP1 PUSH4 0xDA3EF23F EQ PUSH2 0x76D JUMPI DUP1 PUSH4 0xDE8B51E1 EQ PUSH2 0x796 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x7501F741 GT PUSH2 0xF2 JUMPI DUP1 PUSH4 0x7501F741 EQ PUSH2 0x609 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x634 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x65F JUMPI DUP1 PUSH4 0x9D51D9B7 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x6B3 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x7080D6FC EQ PUSH2 0x55F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x58A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x5C7 JUMPI DUP1 PUSH4 0x73AD468A EQ PUSH2 0x5DE JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x3B84D9C6 GT PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x547520FE GT PUSH2 0x175 JUMPI DUP1 PUSH4 0x547520FE EQ PUSH2 0x47A JUMPI DUP1 PUSH4 0x55F804B3 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0x6817C76C EQ PUSH2 0x509 JUMPI DUP1 PUSH4 0x6EBEAC85 EQ PUSH2 0x534 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x3B84D9C6 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x3EB JUMPI DUP1 PUSH4 0x4F6CCCE7 EQ PUSH2 0x414 JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x451 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1ED JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x2EF JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x343 JUMPI DUP1 PUSH4 0x2F745C59 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0x32CB6B0C EQ PUSH2 0x3A9 JUMPI PUSH2 0x21A JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0x81C8C44 EQ PUSH2 0x2C4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x246 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x241 SWAP2 SWAP1 PUSH2 0x2DB9 JUMP JUMPDEST PUSH2 0x881 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x253 SWAP2 SWAP1 PUSH2 0x3373 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x271 PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x27E SWAP2 SWAP1 PUSH2 0x338E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2A9 SWAP2 SWAP1 PUSH2 0x2E5C JUMP JUMPDEST PUSH2 0x98D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2BB SWAP2 SWAP1 PUSH2 0x330C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D9 PUSH2 0x9D3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E6 SWAP2 SWAP1 PUSH2 0x338E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x316 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x311 SWAP2 SWAP1 PUSH2 0x2D79 JUMP JUMPDEST PUSH2 0xA61 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x324 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32D PUSH2 0xB79 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x33A SWAP2 SWAP1 PUSH2 0x3650 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x36A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x365 SWAP2 SWAP1 PUSH2 0x2C63 JUMP JUMPDEST PUSH2 0xB86 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x393 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x38E SWAP2 SWAP1 PUSH2 0x2D79 JUMP JUMPDEST PUSH2 0xBE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3A0 SWAP2 SWAP1 PUSH2 0x3650 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BE PUSH2 0xC8B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3CB SWAP2 SWAP1 PUSH2 0x3650 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E9 PUSH2 0xC90 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x412 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x40D SWAP2 SWAP1 PUSH2 0x2C63 JUMP JUMPDEST PUSH2 0xCC4 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x43B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x436 SWAP2 SWAP1 PUSH2 0x2E5C JUMP JUMPDEST PUSH2 0xCE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0x3650 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x478 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x473 SWAP2 SWAP1 PUSH2 0x2BF6 JUMP JUMPDEST PUSH2 0xD55 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x486 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A1 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x49C SWAP2 SWAP1 PUSH2 0x2E5C JUMP JUMPDEST PUSH2 0xDAD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4CA PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x2E13 JUMP JUMPDEST PUSH2 0xDBF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4F3 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4EE SWAP2 SWAP1 PUSH2 0x2E5C JUMP JUMPDEST PUSH2 0xDE1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x500 SWAP2 SWAP1 PUSH2 0x330C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x515 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x51E PUSH2 0xE93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x52B SWAP2 SWAP1 PUSH2 0x3650 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x540 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x549 PUSH2 0xE99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x556 SWAP2 SWAP1 PUSH2 0x3373 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x574 PUSH2 0xEAC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x581 SWAP2 SWAP1 PUSH2 0x3373 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B1 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5AC SWAP2 SWAP1 PUSH2 0x2BF6 JUMP JUMPDEST PUSH2 0xEBF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5BE SWAP2 SWAP1 PUSH2 0x3650 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5DC PUSH2 0xF77 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5F3 PUSH2 0xF8B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x600 SWAP2 SWAP1 PUSH2 0x3650 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x615 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61E PUSH2 0xF91 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x62B SWAP2 SWAP1 PUSH2 0x3650 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x640 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x649 PUSH2 0xF97 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x656 SWAP2 SWAP1 PUSH2 0x330C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x674 PUSH2 0xFC1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x681 SWAP2 SWAP1 PUSH2 0x338E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x696 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B1 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6AC SWAP2 SWAP1 PUSH2 0x2E5C JUMP JUMPDEST PUSH2 0x1053 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6DA PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6D5 SWAP2 SWAP1 PUSH2 0x2D39 JUMP JUMPDEST PUSH2 0x1065 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x703 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6FE SWAP2 SWAP1 PUSH2 0x2CB6 JUMP JUMPDEST PUSH2 0x107B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x711 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x71A PUSH2 0x10DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x727 SWAP2 SWAP1 PUSH2 0x338E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x73C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x757 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x752 SWAP2 SWAP1 PUSH2 0x2E5C JUMP JUMPDEST PUSH2 0x116B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x764 SWAP2 SWAP1 PUSH2 0x338E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x779 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x794 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x78F SWAP2 SWAP1 PUSH2 0x2E13 JUMP JUMPDEST PUSH2 0x138F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7AB PUSH2 0x13B1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7C7 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x7C2 SWAP2 SWAP1 PUSH2 0x2E5C JUMP JUMPDEST PUSH2 0x13E5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x7EB SWAP2 SWAP1 PUSH2 0x2C23 JUMP JUMPDEST PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7FD SWAP2 SWAP1 PUSH2 0x3373 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x812 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x82D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x828 SWAP2 SWAP1 PUSH2 0x2E13 JUMP JUMPDEST PUSH2 0x1617 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x83B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x856 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x851 SWAP2 SWAP1 PUSH2 0x2BF6 JUMP JUMPDEST PUSH2 0x1639 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x864 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x87F PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x87A SWAP2 SWAP1 PUSH2 0x2E5C JUMP JUMPDEST PUSH2 0x16BD JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0x780E9D6300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x8F4 JUMPI POP PUSH2 0x8F3 DUP3 PUSH2 0x16CF JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0x90A SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x936 SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x983 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x958 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x983 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x966 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x998 DUP3 PUSH2 0x17B1 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xF DUP1 SLOAD PUSH2 0x9E0 SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xA0C SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xA59 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA2E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA59 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA3C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA6C DUP3 PUSH2 0xDE1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xADD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAD4 SWAP1 PUSH2 0x35D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xAFC PUSH2 0x17FC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0xB2B JUMPI POP PUSH2 0xB2A DUP2 PUSH2 0xB25 PUSH2 0x17FC JUMP JUMPDEST PUSH2 0x1583 JUMP JUMPDEST JUMPDEST PUSH2 0xB6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB61 SWAP1 PUSH2 0x3510 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB74 DUP4 DUP4 PUSH2 0x1804 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 DUP1 SLOAD SWAP1 POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xB97 PUSH2 0xB91 PUSH2 0x17FC JUMP JUMPDEST DUP3 PUSH2 0x18BD JUMP JUMPDEST PUSH2 0xBD6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBCD SWAP1 PUSH2 0x3630 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xBE1 DUP4 DUP4 DUP4 PUSH2 0x1952 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBF1 DUP4 PUSH2 0xEBF JUMP JUMPDEST DUP3 LT PUSH2 0xC32 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC29 SWAP1 PUSH2 0x33B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x64 DUP2 JUMP JUMPDEST PUSH2 0xC98 PUSH2 0x1BB9 JUMP JUMPDEST PUSH1 0xA PUSH1 0x15 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH1 0xA PUSH1 0x15 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0xCDF DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x107B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCEE PUSH2 0xB79 JUMP JUMPDEST DUP3 LT PUSH2 0xD2F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD26 SWAP1 PUSH2 0x35F0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xD43 JUMPI PUSH2 0xD42 PUSH2 0x3AAE JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xD5D PUSH2 0x1BB9 JUMP JUMPDEST PUSH1 0x0 SELFBALANCE SWAP1 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 0xDA8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xDB5 PUSH2 0x1BB9 JUMP JUMPDEST DUP1 PUSH1 0xD DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH2 0xDC7 PUSH2 0x1BB9 JUMP JUMPDEST DUP1 PUSH1 0xE SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0xDDD SWAP3 SWAP2 SWAP1 PUSH2 0x2A0A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xE8A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE81 SWAP1 PUSH2 0x35B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA PUSH1 0x15 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xA PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xF30 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF27 SWAP1 PUSH2 0x34F0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 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 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF7F PUSH2 0x1BB9 JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x0 PUSH2 0x1C37 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0xFD0 SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xFFC SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1049 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x101E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1049 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x102C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x105B PUSH2 0x1BB9 JUMP JUMPDEST DUP1 PUSH1 0xC DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH2 0x1077 PUSH2 0x1070 PUSH2 0x17FC JUMP JUMPDEST DUP4 DUP4 PUSH2 0x1CFD JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x108C PUSH2 0x1086 PUSH2 0x17FC JUMP JUMPDEST DUP4 PUSH2 0x18BD JUMP JUMPDEST PUSH2 0x10CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x10C2 SWAP1 PUSH2 0x3630 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10D7 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1E6A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x10 DUP1 SLOAD PUSH2 0x10EA SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1116 SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1163 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1138 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1163 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1146 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1176 DUP3 PUSH2 0x1EC6 JUMP JUMPDEST PUSH2 0x11B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11AC SWAP1 PUSH2 0x3590 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ISZERO ISZERO PUSH1 0xA PUSH1 0x15 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO EQ ISZERO PUSH2 0x1263 JUMPI PUSH1 0xF DUP1 SLOAD PUSH2 0x11DE SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x120A SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1257 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x122C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1257 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x123A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x138A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x11 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH2 0x1283 SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x12AF SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x12FC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x12D1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x12FC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x12DF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x130D PUSH2 0x1F32 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD EQ ISZERO PUSH2 0x1323 JUMPI DUP2 SWAP3 POP POP POP PUSH2 0x138A JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT ISZERO PUSH2 0x1358 JUMPI DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1340 SWAP3 SWAP2 SWAP1 PUSH2 0x32B7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP3 POP POP POP PUSH2 0x138A JUMP JUMPDEST DUP1 PUSH2 0x1362 DUP6 PUSH2 0x1FC4 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1376 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x32DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP3 POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1397 PUSH2 0x1BB9 JUMP JUMPDEST DUP1 PUSH1 0x10 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x13AD SWAP3 SWAP2 SWAP1 PUSH2 0x2A0A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x13B9 PUSH2 0x1BB9 JUMP JUMPDEST PUSH1 0xA PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH1 0xA PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x64 DUP2 PUSH2 0x13F0 PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x13FA SWAP2 SWAP1 PUSH2 0x374A JUMP JUMPDEST GT ISZERO PUSH2 0x143B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1432 SWAP1 PUSH2 0x3450 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xA PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0x148A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1481 SWAP1 PUSH2 0x3550 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD DUP2 PUSH2 0x1497 CALLER PUSH2 0xEBF JUMP JUMPDEST PUSH2 0x14A1 SWAP2 SWAP1 PUSH2 0x374A JUMP JUMPDEST GT ISZERO PUSH2 0x14E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x14D9 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLVALUE PUSH1 0xB SLOAD DUP3 PUSH2 0x14F1 SWAP2 SWAP1 PUSH2 0x37D1 JUMP JUMPDEST GT ISZERO PUSH2 0x1532 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1529 SWAP1 PUSH2 0x3610 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD SLOAD DUP2 GT ISZERO PUSH2 0x1577 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x156E SWAP1 PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1580 DUP2 PUSH2 0x2125 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x161F PUSH2 0x1BB9 JUMP JUMPDEST DUP1 PUSH1 0xF SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x1635 SWAP3 SWAP2 SWAP1 PUSH2 0x2A0A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1641 PUSH2 0x1BB9 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x16B1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16A8 SWAP1 PUSH2 0x33F0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x16BA DUP2 PUSH2 0x1C37 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x16C5 PUSH2 0x1BB9 JUMP JUMPDEST DUP1 PUSH1 0xB DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x80AC58CD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x179A JUMPI POP PUSH32 0x5B5E139F00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ JUMPDEST DUP1 PUSH2 0x17AA JUMPI POP PUSH2 0x17A9 DUP3 PUSH2 0x216F JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x17BA DUP2 PUSH2 0x1EC6 JUMP JUMPDEST PUSH2 0x17F9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17F0 SWAP1 PUSH2 0x35B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x4 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1877 DUP4 PUSH2 0xDE1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x18C9 DUP4 PUSH2 0xDE1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x190B JUMPI POP PUSH2 0x190A DUP2 DUP6 PUSH2 0x1583 JUMP JUMPDEST JUMPDEST DUP1 PUSH2 0x1949 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1931 DUP5 PUSH2 0x98D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1972 DUP3 PUSH2 0xDE1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x19C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19BF SWAP1 PUSH2 0x3410 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A38 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A2F SWAP1 PUSH2 0x3470 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A43 DUP4 DUP4 DUP4 PUSH2 0x21D9 JUMP JUMPDEST PUSH2 0x1A4E PUSH1 0x0 DUP3 PUSH2 0x1804 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x3 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1A9E SWAP2 SWAP1 PUSH2 0x382B JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x3 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1AF5 SWAP2 SWAP1 PUSH2 0x374A JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH2 0x1BB4 DUP4 DUP4 DUP4 PUSH2 0x22ED JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1BC1 PUSH2 0x17FC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1BDF PUSH2 0xF97 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1C35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C2C SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0xA PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1D6C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1D63 SWAP1 PUSH2 0x3490 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x5 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1E5D SWAP2 SWAP1 PUSH2 0x3373 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x1E75 DUP5 DUP5 DUP5 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0x1E81 DUP5 DUP5 DUP5 DUP5 PUSH2 0x22F2 JUMP JUMPDEST PUSH2 0x1EC0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1EB7 SWAP1 PUSH2 0x33D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0xE DUP1 SLOAD PUSH2 0x1F41 SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1F6D SWAP1 PUSH2 0x3915 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1FBA JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F8F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1FBA JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F9D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x200C JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3000000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP PUSH2 0x2120 JUMP JUMPDEST PUSH1 0x0 DUP3 SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x0 DUP3 EQ PUSH2 0x203E JUMPI DUP1 DUP1 PUSH2 0x2027 SWAP1 PUSH2 0x3978 JUMP JUMPDEST SWAP2 POP POP PUSH1 0xA DUP3 PUSH2 0x2037 SWAP2 SWAP1 PUSH2 0x37A0 JUMP JUMPDEST SWAP2 POP PUSH2 0x2014 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x205A JUMPI PUSH2 0x2059 PUSH2 0x3ADD JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x208C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x1 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST PUSH1 0x0 DUP6 EQ PUSH2 0x2119 JUMPI PUSH1 0x1 DUP3 PUSH2 0x20A5 SWAP2 SWAP1 PUSH2 0x382B JUMP JUMPDEST SWAP2 POP PUSH1 0xA DUP6 PUSH2 0x20B4 SWAP2 SWAP1 PUSH2 0x39C1 JUMP JUMPDEST PUSH1 0x30 PUSH2 0x20C0 SWAP2 SWAP1 PUSH2 0x374A JUMP JUMPDEST PUSH1 0xF8 SHL DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x20D6 JUMPI PUSH2 0x20D5 PUSH2 0x3AAE JUMP JUMPDEST JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0xA DUP6 PUSH2 0x2112 SWAP2 SWAP1 PUSH2 0x37A0 JUMP JUMPDEST SWAP5 POP PUSH2 0x2090 JUMP JUMPDEST DUP1 SWAP4 POP POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x216B JUMPI PUSH1 0x0 PUSH2 0x213A PUSH2 0xB79 JUMP JUMPDEST SWAP1 POP PUSH1 0x64 PUSH2 0x2146 PUSH2 0xB79 JUMP JUMPDEST LT ISZERO PUSH2 0x2157 JUMPI PUSH2 0x2156 CALLER DUP3 PUSH2 0x2489 JUMP JUMPDEST JUMPDEST POP DUP1 DUP1 PUSH2 0x2163 SWAP1 PUSH2 0x3978 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2128 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x21E4 DUP4 DUP4 DUP4 PUSH2 0x24A7 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2227 JUMPI PUSH2 0x2222 DUP2 PUSH2 0x24AC JUMP JUMPDEST PUSH2 0x2266 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2265 JUMPI PUSH2 0x2264 DUP4 DUP3 PUSH2 0x24F5 JUMP JUMPDEST JUMPDEST JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x22A9 JUMPI PUSH2 0x22A4 DUP2 PUSH2 0x2662 JUMP JUMPDEST PUSH2 0x22E8 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x22E7 JUMPI PUSH2 0x22E6 DUP3 DUP3 PUSH2 0x2733 JUMP JUMPDEST JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2313 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x27B2 JUMP JUMPDEST ISZERO PUSH2 0x247C JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x150B7A02 PUSH2 0x233C PUSH2 0x17FC JUMP JUMPDEST DUP8 DUP7 DUP7 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x235E SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3327 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x23A9 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23A6 SWAP2 SWAP1 PUSH2 0x2DE6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x242C JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23D9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x23DE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH1 0x0 DUP2 MLOAD EQ ISZERO PUSH2 0x2424 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x241B SWAP1 PUSH2 0x33D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH4 0x150B7A02 PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ SWAP2 POP POP PUSH2 0x2481 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x24A3 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x27D5 JUMP JUMPDEST POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x8 DUP1 SLOAD SWAP1 POP PUSH1 0x9 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x8 DUP2 SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP PUSH1 0x1 SWAP1 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP1 SWAP2 SWAP1 SWAP2 POP SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x2502 DUP5 PUSH2 0xEBF JUMP JUMPDEST PUSH2 0x250C SWAP2 SWAP1 PUSH2 0x382B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x7 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP DUP2 DUP2 EQ PUSH2 0x25F1 JUMPI PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP DUP1 PUSH1 0x6 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x7 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP JUMPDEST PUSH1 0x7 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x6 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x8 DUP1 SLOAD SWAP1 POP PUSH2 0x2676 SWAP2 SWAP1 PUSH2 0x382B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x9 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x8 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x26A6 JUMPI PUSH2 0x26A5 PUSH2 0x3AAE JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x8 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x26C8 JUMPI PUSH2 0x26C7 PUSH2 0x3AAE JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x9 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x9 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x8 DUP1 SLOAD DUP1 PUSH2 0x2717 JUMPI PUSH2 0x2716 PUSH2 0x3A7F JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x273E DUP4 PUSH2 0xEBF JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x6 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x7 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE GT SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x27DF DUP4 DUP4 PUSH2 0x2830 JUMP JUMPDEST PUSH2 0x27EC PUSH1 0x0 DUP5 DUP5 DUP5 PUSH2 0x22F2 JUMP JUMPDEST PUSH2 0x282B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2822 SWAP1 PUSH2 0x33D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x28A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2897 SWAP1 PUSH2 0x3530 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x28A9 DUP2 PUSH2 0x1EC6 JUMP JUMPDEST ISZERO PUSH2 0x28E9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28E0 SWAP1 PUSH2 0x3430 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x28F5 PUSH1 0x0 DUP4 DUP4 PUSH2 0x21D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x3 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2945 SWAP2 SWAP1 PUSH2 0x374A JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH2 0x2A06 PUSH1 0x0 DUP4 DUP4 PUSH2 0x22ED JUMP JUMPDEST POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2A16 SWAP1 PUSH2 0x3915 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2A38 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2A7F JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2A51 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2A7F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2A7F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2A7E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2A63 JUMP JUMPDEST JUMPDEST POP SWAP1 POP PUSH2 0x2A8C SWAP2 SWAP1 PUSH2 0x2A90 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2AA9 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH2 0x2A91 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2AC0 PUSH2 0x2ABB DUP5 PUSH2 0x3690 JUMP JUMPDEST PUSH2 0x366B JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x2ADC JUMPI PUSH2 0x2ADB PUSH2 0x3B11 JUMP JUMPDEST JUMPDEST PUSH2 0x2AE7 DUP5 DUP3 DUP6 PUSH2 0x38D3 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B02 PUSH2 0x2AFD DUP5 PUSH2 0x36C1 JUMP JUMPDEST PUSH2 0x366B JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x2B1E JUMPI PUSH2 0x2B1D PUSH2 0x3B11 JUMP JUMPDEST JUMPDEST PUSH2 0x2B29 DUP5 DUP3 DUP6 PUSH2 0x38D3 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2B40 DUP2 PUSH2 0x4056 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2B55 DUP2 PUSH2 0x406D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2B6A DUP2 PUSH2 0x4084 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x2B7F DUP2 PUSH2 0x4084 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2B9A JUMPI PUSH2 0x2B99 PUSH2 0x3B0C JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2BAA DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2AAD JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2BC8 JUMPI PUSH2 0x2BC7 PUSH2 0x3B0C JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2BD8 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2AEF JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2BF0 DUP2 PUSH2 0x409B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C0C JUMPI PUSH2 0x2C0B PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2C1A DUP5 DUP3 DUP6 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2C3A JUMPI PUSH2 0x2C39 PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2C48 DUP6 DUP3 DUP7 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2C59 DUP6 DUP3 DUP7 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2C7C JUMPI PUSH2 0x2C7B PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2C8A DUP7 DUP3 DUP8 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x2C9B DUP7 DUP3 DUP8 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x2CAC DUP7 DUP3 DUP8 ADD PUSH2 0x2BE1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2CD0 JUMPI PUSH2 0x2CCF PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2CDE DUP8 DUP3 DUP9 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x2CEF DUP8 DUP3 DUP9 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x2D00 DUP8 DUP3 DUP9 ADD PUSH2 0x2BE1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D21 JUMPI PUSH2 0x2D20 PUSH2 0x3B16 JUMP JUMPDEST JUMPDEST PUSH2 0x2D2D DUP8 DUP3 DUP9 ADD PUSH2 0x2B85 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D50 JUMPI PUSH2 0x2D4F PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2D5E DUP6 DUP3 DUP7 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2D6F DUP6 DUP3 DUP7 ADD PUSH2 0x2B46 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D90 JUMPI PUSH2 0x2D8F PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2D9E DUP6 DUP3 DUP7 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2DAF DUP6 DUP3 DUP7 ADD PUSH2 0x2BE1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DCF JUMPI PUSH2 0x2DCE PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2DDD DUP5 DUP3 DUP6 ADD PUSH2 0x2B5B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DFC JUMPI PUSH2 0x2DFB PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2E0A DUP5 DUP3 DUP6 ADD PUSH2 0x2B70 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E29 JUMPI PUSH2 0x2E28 PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2E47 JUMPI PUSH2 0x2E46 PUSH2 0x3B16 JUMP JUMPDEST JUMPDEST PUSH2 0x2E53 DUP5 DUP3 DUP6 ADD PUSH2 0x2BB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E72 JUMPI PUSH2 0x2E71 PUSH2 0x3B1B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x2E80 DUP5 DUP3 DUP6 ADD PUSH2 0x2BE1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2E92 DUP2 PUSH2 0x385F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x2EA1 DUP2 PUSH2 0x3871 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EB2 DUP3 PUSH2 0x3707 JUMP JUMPDEST PUSH2 0x2EBC DUP2 DUP6 PUSH2 0x371D JUMP JUMPDEST SWAP4 POP PUSH2 0x2ECC DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x38E2 JUMP JUMPDEST PUSH2 0x2ED5 DUP2 PUSH2 0x3B20 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EEB DUP3 PUSH2 0x3712 JUMP JUMPDEST PUSH2 0x2EF5 DUP2 DUP6 PUSH2 0x372E JUMP JUMPDEST SWAP4 POP PUSH2 0x2F05 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x38E2 JUMP JUMPDEST PUSH2 0x2F0E DUP2 PUSH2 0x3B20 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F24 DUP3 PUSH2 0x3712 JUMP JUMPDEST PUSH2 0x2F2E DUP2 DUP6 PUSH2 0x373F JUMP JUMPDEST SWAP4 POP PUSH2 0x2F3E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x38E2 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH2 0x2F57 DUP2 PUSH2 0x3915 JUMP JUMPDEST PUSH2 0x2F61 DUP2 DUP7 PUSH2 0x373F JUMP JUMPDEST SWAP5 POP PUSH1 0x1 DUP3 AND PUSH1 0x0 DUP2 EQ PUSH2 0x2F7C JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x2F8D JUMPI PUSH2 0x2FC0 JUMP JUMPDEST PUSH1 0xFF NOT DUP4 AND DUP7 MSTORE DUP2 DUP7 ADD SWAP4 POP PUSH2 0x2FC0 JUMP JUMPDEST PUSH2 0x2F96 DUP6 PUSH2 0x36F2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FB8 JUMPI DUP2 SLOAD DUP2 DUP10 ADD MSTORE PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2F99 JUMP JUMPDEST DUP4 DUP9 ADD SWAP6 POP POP POP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FD6 PUSH1 0x2B DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x2FE1 DUP3 PUSH2 0x3B31 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FF9 PUSH1 0x32 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x3004 DUP3 PUSH2 0x3B80 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x301C PUSH1 0x26 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x3027 DUP3 PUSH2 0x3BCF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x303F PUSH1 0x25 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x304A DUP3 PUSH2 0x3C1E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3062 PUSH1 0x1C DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x306D DUP3 PUSH2 0x3C6D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3085 PUSH1 0x1C DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x3090 DUP3 PUSH2 0x3C96 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30A8 PUSH1 0x24 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x30B3 DUP3 PUSH2 0x3CBF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30CB PUSH1 0x19 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x30D6 DUP3 PUSH2 0x3D0E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30EE PUSH1 0x20 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x30F9 DUP3 PUSH2 0x3D37 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3111 PUSH1 0x1D DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x311C DUP3 PUSH2 0x3D60 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3134 PUSH1 0x29 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x313F DUP3 PUSH2 0x3D89 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3157 PUSH1 0x3E DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x3162 DUP3 PUSH2 0x3DD8 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x317A PUSH1 0x20 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x3185 DUP3 PUSH2 0x3E27 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x319D PUSH1 0x26 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x31A8 DUP3 PUSH2 0x3E50 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31C0 PUSH1 0x20 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x31CB DUP3 PUSH2 0x3E9F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31E3 PUSH1 0x2F DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x31EE DUP3 PUSH2 0x3EC8 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3206 PUSH1 0x18 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x3211 DUP3 PUSH2 0x3F17 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3229 PUSH1 0x21 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x3234 DUP3 PUSH2 0x3F40 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x324C PUSH1 0x2C DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x3257 DUP3 PUSH2 0x3F8F JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x326F PUSH1 0x15 DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x327A DUP3 PUSH2 0x3FDE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3292 PUSH1 0x2E DUP4 PUSH2 0x372E JUMP JUMPDEST SWAP2 POP PUSH2 0x329D DUP3 PUSH2 0x4007 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x32B1 DUP2 PUSH2 0x38C9 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32C3 DUP3 DUP6 PUSH2 0x2F19 JUMP JUMPDEST SWAP2 POP PUSH2 0x32CF DUP3 DUP5 PUSH2 0x2F19 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32E7 DUP3 DUP7 PUSH2 0x2F19 JUMP JUMPDEST SWAP2 POP PUSH2 0x32F3 DUP3 DUP6 PUSH2 0x2F19 JUMP JUMPDEST SWAP2 POP PUSH2 0x32FF DUP3 DUP5 PUSH2 0x2F4A JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x3321 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2E89 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x333C PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x2E89 JUMP JUMPDEST PUSH2 0x3349 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x2E89 JUMP JUMPDEST PUSH2 0x3356 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x32A8 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3368 DUP2 DUP5 PUSH2 0x2EA7 JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x3388 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2E98 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x33A8 DUP2 DUP5 PUSH2 0x2EE0 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x33C9 DUP2 PUSH2 0x2FC9 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x33E9 DUP2 PUSH2 0x2FEC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3409 DUP2 PUSH2 0x300F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3429 DUP2 PUSH2 0x3032 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3449 DUP2 PUSH2 0x3055 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3469 DUP2 PUSH2 0x3078 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3489 DUP2 PUSH2 0x309B JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x34A9 DUP2 PUSH2 0x30BE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x34C9 DUP2 PUSH2 0x30E1 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x34E9 DUP2 PUSH2 0x3104 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3509 DUP2 PUSH2 0x3127 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3529 DUP2 PUSH2 0x314A JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3549 DUP2 PUSH2 0x316D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3569 DUP2 PUSH2 0x3190 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3589 DUP2 PUSH2 0x31B3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x35A9 DUP2 PUSH2 0x31D6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x35C9 DUP2 PUSH2 0x31F9 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x35E9 DUP2 PUSH2 0x321C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3609 DUP2 PUSH2 0x323F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3629 DUP2 PUSH2 0x3262 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3649 DUP2 PUSH2 0x3285 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x3665 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x32A8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3675 PUSH2 0x3686 JUMP JUMPDEST SWAP1 POP PUSH2 0x3681 DUP3 DUP3 PUSH2 0x3947 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x36AB JUMPI PUSH2 0x36AA PUSH2 0x3ADD JUMP JUMPDEST JUMPDEST PUSH2 0x36B4 DUP3 PUSH2 0x3B20 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x36DC JUMPI PUSH2 0x36DB PUSH2 0x3ADD JUMP JUMPDEST JUMPDEST PUSH2 0x36E5 DUP3 PUSH2 0x3B20 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3755 DUP3 PUSH2 0x38C9 JUMP JUMPDEST SWAP2 POP PUSH2 0x3760 DUP4 PUSH2 0x38C9 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x3795 JUMPI PUSH2 0x3794 PUSH2 0x39F2 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37AB DUP3 PUSH2 0x38C9 JUMP JUMPDEST SWAP2 POP PUSH2 0x37B6 DUP4 PUSH2 0x38C9 JUMP JUMPDEST SWAP3 POP DUP3 PUSH2 0x37C6 JUMPI PUSH2 0x37C5 PUSH2 0x3A21 JUMP JUMPDEST JUMPDEST DUP3 DUP3 DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37DC DUP3 PUSH2 0x38C9 JUMP JUMPDEST SWAP2 POP PUSH2 0x37E7 DUP4 PUSH2 0x38C9 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3820 JUMPI PUSH2 0x381F PUSH2 0x39F2 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3836 DUP3 PUSH2 0x38C9 JUMP JUMPDEST SWAP2 POP PUSH2 0x3841 DUP4 PUSH2 0x38C9 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 LT ISZERO PUSH2 0x3854 JUMPI PUSH2 0x3853 PUSH2 0x39F2 JUMP JUMPDEST JUMPDEST DUP3 DUP3 SUB SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x386A DUP3 PUSH2 0x38A9 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3900 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x38E5 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x390F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x392D JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x3941 JUMPI PUSH2 0x3940 PUSH2 0x3A50 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3950 DUP3 PUSH2 0x3B20 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x396F JUMPI PUSH2 0x396E PUSH2 0x3ADD JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3983 DUP3 PUSH2 0x38C9 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x39B6 JUMPI PUSH2 0x39B5 PUSH2 0x39F2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39CC DUP3 PUSH2 0x38C9 JUMP JUMPDEST SWAP2 POP PUSH2 0x39D7 DUP4 PUSH2 0x38C9 JUMP JUMPDEST SWAP3 POP DUP3 PUSH2 0x39E7 JUMPI PUSH2 0x39E6 PUSH2 0x3A21 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MOD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x455243373231456E756D657261626C653A206F776E657220696E646578206F75 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x74206F6620626F756E6473000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A207472616E7366657220746F206E6F6E204552433732315265 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x63656976657220696D706C656D656E7465720000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A207472616E736665722066726F6D20696E636F727265637420 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6F776E6572000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A20746F6B656E20616C7265616479206D696E74656400000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x53616C6520776F756C6420657863656564206D617820737570706C7900000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A207472616E7366657220746F20746865207A65726F20616464 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A20617070726F766520746F2063616C6C657200000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x43616E206F6E6C79206D696E74203120746F6B656E7320617420612074696D65 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x53616C6520776F756C6420657863656564206D61782062616C616E6365000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A2061646472657373207A65726F206973206E6F742061207661 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6C6964206F776E65720000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A20617070726F76652063616C6C6572206973206E6F7420746F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6B656E206F776E6572206E6F7220617070726F76656420666F7220616C6C0000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A206D696E7420746F20746865207A65726F2061646472657373 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x53616C65206D7573742062652061637469766520746F206D696E7420594F524B PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x204D657461730000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732314D657461646174613A2055524920717565727920666F72206E6F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6E6578697374656E7420746F6B656E0000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A20696E76616C696420746F6B656E2049440000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A20617070726F76616C20746F2063757272656E74206F776E65 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x7200000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x455243373231456E756D657261626C653A20676C6F62616C20696E646578206F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x7574206F6620626F756E64730000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4E6F7420656E6F7567682065746865722073656E740000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x4552433732313A2063616C6C6572206973206E6F7420746F6B656E206F776E65 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x72206E6F7220617070726F766564000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x405F DUP2 PUSH2 0x385F JUMP JUMPDEST DUP2 EQ PUSH2 0x406A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x4076 DUP2 PUSH2 0x3871 JUMP JUMPDEST DUP2 EQ PUSH2 0x4081 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x408D DUP2 PUSH2 0x387D JUMP JUMPDEST DUP2 EQ PUSH2 0x4098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x40A4 DUP2 PUSH2 0x38C9 JUMP JUMPDEST DUP2 EQ PUSH2 0x40AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH22 0x29E8B90BD43B6E51FE6F54BD666828007713E08B4A49 DUP9 0xA8 0xDA XOR 0xEE 0xAB 0xC2 0x4E 0xA6 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
"sourceMap": "314:3764:12:-:0;;;427:5;399:33;;;;;;;;;;;;;;;;;;;;462:5;438:29;;;;;;;;;;;;;;;;;;;;564:9;537:36;;607:2;579:30;;640:2;615:27;;703:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;799:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1390:113:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1464:5;1456;:13;;;;;;;;;;;;:::i;:::-;;1489:7;1479;:17;;;;;;;;;;;;:::i;:::-;;1390:113;;936:32:0;955:12;:10;;;:12;;:::i;:::-;936:18;;;:32;;:::i;:::-;920:23:12::1;931:11;920:10;;;:23;;:::i;:::-;953:37;971:18;953:17;;;:37;;:::i;:::-;799:198:::0;;314:3764;;640:96:8;693:7;719:10;712:17;;640:96;:::o;2433:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;3464:102:12:-;1094:13:0;:11;;;:13;;:::i;:::-;3548:11:12::1;3538:7;:21;;;;;;;;;;;;:::i;:::-;;3464:102:::0;:::o;3334:124::-;1094:13:0;:11;;;:13;;:::i;:::-;3436:15:12::1;3419:14;:32;;;;;;;;;;;;:::i;:::-;;3334:124:::0;:::o;1359:130:0:-;1433:12;:10;;;:12;;:::i;:::-;1422:23;;:7;:5;;;:7;;:::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;1201:85::-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;314:3764:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:421:13:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:112;;;293:79;;:::i;:::-;262:112;383:39;415:6;410:3;405;383:39;:::i;:::-;102:326;7:421;;;;;:::o;448:355::-;515:5;564:3;557:4;549:6;545:17;541:27;531:122;;572:79;;:::i;:::-;531:122;682:6;676:13;707:90;793:3;785:6;778:4;770:6;766:17;707:90;:::i;:::-;698:99;;521:282;448:355;;;;:::o;809:853::-;908:6;916;965:2;953:9;944:7;940:23;936:32;933:119;;;971:79;;:::i;:::-;933:119;1112:1;1101:9;1097:17;1091:24;1142:18;1134:6;1131:30;1128:117;;;1164:79;;:::i;:::-;1128:117;1269:74;1335:7;1326:6;1315:9;1311:22;1269:74;:::i;:::-;1259:84;;1062:291;1413:2;1402:9;1398:18;1392:25;1444:18;1436:6;1433:30;1430:117;;;1466:79;;:::i;:::-;1430:117;1571:74;1637:7;1628:6;1617:9;1613:22;1571:74;:::i;:::-;1561:84;;1363:292;809:853;;;;;:::o;1668:366::-;1810:3;1831:67;1895:2;1890:3;1831:67;:::i;:::-;1824:74;;1907:93;1996:3;1907:93;:::i;:::-;2025:2;2020:3;2016:12;2009:19;;1668:366;;;:::o;2040:419::-;2206:4;2244:2;2233:9;2229:18;2221:26;;2293:9;2287:4;2283:20;2279:1;2268:9;2264:17;2257:47;2321:131;2447:4;2321:131;:::i;:::-;2313:139;;2040:419;;;:::o;2465:129::-;2499:6;2526:20;;:::i;:::-;2516:30;;2555:33;2583:4;2575:6;2555:33;:::i;:::-;2465:129;;;:::o;2600:75::-;2633:6;2666:2;2660:9;2650:19;;2600:75;:::o;2681:308::-;2743:4;2833:18;2825:6;2822:30;2819:56;;;2855:18;;:::i;:::-;2819:56;2893:29;2915:6;2893:29;:::i;:::-;2885:37;;2977:4;2971;2967:15;2959:23;;2681:308;;;:::o;2995:169::-;3079:11;3113:6;3108:3;3101:19;3153:4;3148:3;3144:14;3129:29;;2995:169;;;;:::o;3170:307::-;3238:1;3248:113;3262:6;3259:1;3256:13;3248:113;;;3347:1;3342:3;3338:11;3332:18;3328:1;3323:3;3319:11;3312:39;3284:2;3281:1;3277:10;3272:15;;3248:113;;;3379:6;3376:1;3373:13;3370:101;;;3459:1;3450:6;3445:3;3441:16;3434:27;3370:101;3219:258;3170:307;;;:::o;3483:320::-;3527:6;3564:1;3558:4;3554:12;3544:22;;3611:1;3605:4;3601:12;3632:18;3622:81;;3688:4;3680:6;3676:17;3666:27;;3622:81;3750:2;3742:6;3739:14;3719:18;3716:38;3713:84;;;3769:18;;:::i;:::-;3713:84;3534:269;3483:320;;;:::o;3809:281::-;3892:27;3914:4;3892:27;:::i;:::-;3884:6;3880:40;4022:6;4010:10;4007:22;3986:18;3974:10;3971:34;3968:62;3965:88;;;4033:18;;:::i;:::-;3965:88;4073:10;4069:2;4062:22;3852:238;3809:281;;:::o;4096:180::-;4144:77;4141:1;4134:88;4241:4;4238:1;4231:15;4265:4;4262:1;4255:15;4282:180;4330:77;4327:1;4320:88;4427:4;4424:1;4417:15;4451:4;4448:1;4441:15;4468:117;4577:1;4574;4567:12;4591:117;4700:1;4697;4690:12;4714:117;4823:1;4820;4813:12;4837:117;4946:1;4943;4936:12;4960:102;5001:6;5052:2;5048:7;5043:2;5036:5;5032:14;5028:28;5018:38;;4960:102;;;:::o;5068:182::-;5208:34;5204:1;5196:6;5192:14;5185:58;5068:182;:::o;314:3764:12:-;;;;;;;"
}
web3j CLI
我們需要透過webj來幫助我們將ABI和BIN轉換成java的RPC,安裝方式如下:
windows可以在powershell下這行指令:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/web3j/web3j-installer/master/installer.ps1'))
Unix系列可以下這行指令:
curl -L get.web3j.io | sh && source ~/.web3j/source.sh
執行web3j CLI指令來轉換solidity:
web3j generate solidity -a= abi檔案 -b= bin檔案 -o=輸出位置 -p=輸出資料夾格式
例如轉換game.sol這個合約:
web3j generate solidity -a=./game.abi -b=./game.bin -o=./ -p=com.contract
4. 最後結果
到這邊我們已經完成「建立屬於自己的GameFi Dapp」了,從GameFi背景了解為甚麼我們需要建造區塊鏈遊戲,以及從技術面,實際的方式了解如何開發一個區塊鏈遊戲,包含建立NFT、遊戲合約、開發android、設計後端server、IPFS,再到最後使用 web3j 來執行RPC功能。為了激發更多應用,我無私地將這個專案提供給大家,希望可以創造出更多不同的應用。
https://github.com/Yorkchung/Dapp_NFT
如何有任何建議或想法都可以提供給我,謝謝看到這裡的各位~
區塊鏈遊戲影片--打造屬於邊走邊玩的區塊鏈遊戲
這個專案也有發表在2022 MOPCON。
[embed]
5. 系列文章目錄
文章會分成7個系列來介紹,分別針對用到的工具和方法進行介紹。文章目錄如下:
메타데이터
- post_id
- 44bd6eb7ea2e
- slug
- 44bd6eb7ea2e
- url
- https://medium.com/@yorkisinhere/44bd6eb7ea2e
- canonical_url
- https://medium.com/@yorkisinhere/44bd6eb7ea2e
- author_url
- https://medium.com/@yorkisinhere
- status
- ok
- fetched_at
- 2026-07-26 11:40:32