PIP-26: Deploy Upgraded Compass EVM to the Upgraded Paloma Mainnet (messenger) and controlled by the upgraded Pigeon relayer network

PIP Name: PIP-26: Deploy Upgraded Compass EVM to the Upgraded Paloma Mainnet (messenger) and controlled by the upgraded Pigeon relayer network.

Status: Proposed

Author(s): @LARRY

Type: EVM Proposal

Discussions-to:

Created: 05/19/2023

Simple Summary

Deploy Compass-EVM contract to the Paloma Messenger Mainnet ****that will be upgraded to Paloma v1.0.0 and Pigeon v1.0.0 to ready the flock to take flight on new target chains in the EVM ecosystem and for the launch of the Paloma bot ecosystem. This new Compass-EVM also includes support for ERC-20 creation and ownership by the Paloma validator set. Compass-EVM uses Blueprint contracts to create a copy of any ERC20 owned by the Paloma validator set.

Abstract

Paloma Compass-EVM is the bridge contract that will be deployed to each supported chain on Paloma. The Compass-EVM is the contract that manages arbitrary contract calls as well as bridge functionality secured by the Paloma validator set. A community member deployed this contract and votes are ready to be received. Come vote your GRAINs for Compass-EVM!

Motivation

Paloma is meant to monitor and deliver messages across multiple blockchains via its network of validator datacenters. We are relaunching deployment on EVM target chains with new upgrades the Pigeon relay messaging system with the new messenger mainnet now upgraded to Paloma v1.0.0 and Pigeon v1.0.0.

Specification Overview

Technical Specification

  1. Run the governance command to deploy the smart contract to all evm chains
palomad tx gov submit-proposal evm propose-new-smart-contract '[JSON ABI BLOB]' [HEX BLOB] \\
--title "Vote to Deplay the new and improved Paloma CompassEVM to the Paloma Messenger Mainnet" \\
--description "PIP-26 Paloma Deploys a new Paloma CompassEVM on Paloma's Messenger mainnet to supported EVM Mainnet chains for Pigeons to send messages on EVM mainnet chains from the Paloma Mainnet." \\
--deposit 10000000ugrain \\
--fees 400ugrain \\
--gas auto \\
--from=<From Paloma Address> \\
--chain-id=messenger \\
--yes

If the proposal passes, Compass EVM will be deployed to all existing and future supported EVM target chains.

Rationale

Compass EVM manages arbitrary contract calls as well as bridge functionality secured by the Paloma validator set. In order to send messages cross-chain securely, Compass EVM needs to be deployed. The new Compass-EVM will include new event emitters as well as new functions for blueprint ERC20 contracts that will be launched from Paloma and owned by the Paloma validator set.

The ‘[JSON ABI BLOB]’ [HEX BLOB] for proposal is outlined below.

'[{\\"anonymous\\":false,\\"inputs\\":[{\\"indexed\\":false,\\"name\\":\\"checkpoint\\",\\"type\\":\\"bytes32\\"},{\\"indexed\\":false,\\"name\\":\\"valset_id\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"ValsetUpdated\\",\\"type\\":\\"event\\"},{\\"anonymous\\":false,\\"inputs\\":[{\\"indexed\\":false,\\"name\\":\\"logic_contract_address\\",\\"type\\":\\"address\\"},{\\"indexed\\":false,\\"name\\":\\"payload\\",\\"type\\":\\"bytes\\"},{\\"indexed\\":false,\\"name\\":\\"message_id\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"LogicCallEvent\\",\\"type\\":\\"event\\"},{\\"anonymous\\":false,\\"inputs\\":[{\\"indexed\\":false,\\"name\\":\\"token\\",\\"type\\":\\"address\\"},{\\"indexed\\":false,\\"name\\":\\"sender\\",\\"type\\":\\"address\\"},{\\"indexed\\":false,\\"name\\":\\"receiver\\",\\"type\\":\\"string\\"},{\\"indexed\\":false,\\"name\\":\\"amount\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"SendToPalomaEvent\\",\\"type\\":\\"event\\"},{\\"anonymous\\":false,\\"inputs\\":[{\\"indexed\\":false,\\"name\\":\\"token\\",\\"type\\":\\"address\\"},{\\"indexed\\":false,\\"name\\":\\"message_id\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"BatchSendEvent\\",\\"type\\":\\"event\\"},{\\"anonymous\\":false,\\"inputs\\":[{\\"indexed\\":false,\\"name\\":\\"paloma_denom\\",\\"type\\":\\"string\\"},{\\"indexed\\":false,\\"name\\":\\"token_contract\\",\\"type\\":\\"address\\"},{\\"indexed\\":false,\\"name\\":\\"name\\",\\"type\\":\\"string\\"},{\\"indexed\\":false,\\"name\\":\\"symbol\\",\\"type\\":\\"string\\"},{\\"indexed\\":false,\\"name\\":\\"decimals\\",\\"type\\":\\"uint8\\"}],\\"name\\":\\"ERC20DeployedEvent\\",\\"type\\":\\"event\\"},{\\"inputs\\":[{\\"name\\":\\"turnstone_id\\",\\"type\\":\\"bytes32\\"},{\\"components\\":[{\\"name\\":\\"validators\\",\\"type\\":\\"address[]\\"},{\\"name\\":\\"powers\\",\\"type\\":\\"uint256[]\\"},{\\"name\\":\\"valset_id\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"valset\\",\\"type\\":\\"tuple\\"}],\\"outputs\\":[],\\"stateMutability\\":\\"nonpayable\\",\\"type\\":\\"constructor\\"},{\\"inputs\\":[],\\"name\\":\\"turnstone_id\\",\\"outputs\\":[{\\"name\\":\\"\\",\\"type\\":\\"bytes32\\"}],\\"stateMutability\\":\\"pure\\",\\"type\\":\\"function\\"},{\\"inputs\\":[{\\"components\\":[{\\"components\\":[{\\"name\\":\\"validators\\",\\"type\\":\\"address[]\\"},{\\"name\\":\\"powers\\",\\"type\\":\\"uint256[]\\"},{\\"name\\":\\"valset_id\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"valset\\",\\"type\\":\\"tuple\\"},{\\"components\\":[{\\"name\\":\\"v\\",\\"type\\":\\"uint256\\"},{\\"name\\":\\"r\\",\\"type\\":\\"uint256\\"},{\\"name\\":\\"s\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"signatures\\",\\"type\\":\\"tuple[]\\"}],\\"name\\":\\"consensus\\",\\"type\\":\\"tuple\\"},{\\"components\\":[{\\"name\\":\\"validators\\",\\"type\\":\\"address[]\\"},{\\"name\\":\\"powers\\",\\"type\\":\\"uint256[]\\"},{\\"name\\":\\"valset_id\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"new_valset\\",\\"type\\":\\"tuple\\"}],\\"name\\":\\"update_valset\\",\\"outputs\\":[],\\"stateMutability\\":\\"nonpayable\\",\\"type\\":\\"function\\"},{\\"inputs\\":[{\\"components\\":[{\\"components\\":[{\\"name\\":\\"validators\\",\\"type\\":\\"address[]\\"},{\\"name\\":\\"powers\\",\\"type\\":\\"uint256[]\\"},{\\"name\\":\\"valset_id\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"valset\\",\\"type\\":\\"tuple\\"},{\\"components\\":[{\\"name\\":\\"v\\",\\"type\\":\\"uint256\\"},{\\"name\\":\\"r\\",\\"type\\":\\"uint256\\"},{\\"name\\":\\"s\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"signatures\\",\\"type\\":\\"tuple[]\\"}],\\"name\\":\\"consensus\\",\\"type\\":\\"tuple\\"},{\\"components\\":[{\\"name\\":\\"logic_contract_address\\",\\"type\\":\\"address\\"},{\\"name\\":\\"payload\\",\\"type\\":\\"bytes\\"}],\\"name\\":\\"args\\",\\"type\\":\\"tuple\\"},{\\"name\\":\\"message_id\\",\\"type\\":\\"uint256\\"},{\\"name\\":\\"deadline\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"submit_logic_call\\",\\"outputs\\":[],\\"stateMutability\\":\\"nonpayable\\",\\"type\\":\\"function\\"},{\\"inputs\\":[{\\"name\\":\\"token\\",\\"type\\":\\"address\\"},{\\"name\\":\\"receiver\\",\\"type\\":\\"string\\"},{\\"name\\":\\"amount\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"send_token_to_paloma\\",\\"outputs\\":[],\\"stateMutability\\":\\"nonpayable\\",\\"type\\":\\"function\\"},{\\"inputs\\":[{\\"components\\":[{\\"components\\":[{\\"name\\":\\"validators\\",\\"type\\":\\"address[]\\"},{\\"name\\":\\"powers\\",\\"type\\":\\"uint256[]\\"},{\\"name\\":\\"valset_id\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"valset\\",\\"type\\":\\"tuple\\"},{\\"components\\":[{\\"name\\":\\"v\\",\\"type\\":\\"uint256\\"},{\\"name\\":\\"r\\",\\"type\\":\\"uint256\\"},{\\"name\\":\\"s\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"signatures\\",\\"type\\":\\"tuple[]\\"}],\\"name\\":\\"consensus\\",\\"type\\":\\"tuple\\"},{\\"name\\":\\"token\\",\\"type\\":\\"address\\"},{\\"components\\":[{\\"name\\":\\"receiver\\",\\"type\\":\\"address[]\\"},{\\"name\\":\\"amount\\",\\"type\\":\\"uint256[]\\"}],\\"name\\":\\"args\\",\\"type\\":\\"tuple\\"},{\\"name\\":\\"message_id\\",\\"type\\":\\"uint256\\"},{\\"name\\":\\"deadline\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"submit_batch\\",\\"outputs\\":[],\\"stateMutability\\":\\"nonpayable\\",\\"type\\":\\"function\\"},{\\"inputs\\":[{\\"name\\":\\"_paloma_denom\\",\\"type\\":\\"string\\"},{\\"name\\":\\"_name\\",\\"type\\":\\"string\\"},{\\"name\\":\\"_symbol\\",\\"type\\":\\"string\\"},{\\"name\\":\\"_decimals\\",\\"type\\":\\"uint8\\"},{\\"name\\":\\"_blueprint\\",\\"type\\":\\"address\\"}],\\"name\\":\\"deploy_erc20\\",\\"outputs\\":[],\\"stateMutability\\":\\"nonpayable\\",\\"type\\":\\"function\\"},{\\"inputs\\":[],\\"name\\":\\"last_checkpoint\\",\\"outputs\\":[{\\"name\\":\\"\\",\\"type\\":\\"bytes32\\"}],\\"stateMutability\\":\\"view\\",\\"type\\":\\"function\\"},{\\"inputs\\":[],\\"name\\":\\"last_valset_id\\",\\"outputs\\":[{\\"name\\":\\"\\",\\"type\\":\\"uint256\\"}],\\"stateMutability\\":\\"view\\",\\"type\\":\\"function\\"},{\\"inputs\\":[{\\"name\\":\\"arg0\\",\\"type\\":\\"uint256\\"}],\\"name\\":\\"message_id_used\\",\\"outputs\\":[{\\"name\\":\\"\\",\\"type\\":\\"bool\\"}],\\"stateMutability\\":\\"view\\",\\"type\\":\\"function\\"}]' 6020611ce8600039600051602081611cc8016000396000518101610140602082611cc80160003960005111611cc357602081611cc801600039600051806040526000816101408111611cc357801561008357905b60208160051b6020860101611cc8016000396000518060a01c611cc3578160051b60600152600101818118610053575b50505050602060208201611cc8016000396000518101610140602082611cc80160003960005111611cc357602081611cc8016000396000518061286052602082018160051b8082611cc8016128803950505050602060408201611cc801600039600051615080525034611cc3576020611cc860003960005161a200526040366150a03760006040516101408111611cc357801561018857905b8060051b606001516150e0526150a0516150c05161286051811015611cc35760051b6128800151808201828110611cc357905090506150a05263aaaaaaaa6150a0511061016857610188565b6150c05160018101818110611cc35790506150c05260010181811861011c575b505063aaaaaaaa6150a05110156101ff5760126150e0527f496e73756666696369656e7420506f7765720000000000000000000000000000615100526150e0506150e0518061510001601f826000031636823750506308c379a06150a05260206150c052601f19601f6150e05101166044016150bcfd5b63299018c261510452600460808061512452806151240160006040518083528060051b6000826101408111611cc357801561025357905b8060051b606001518160051b602088010152600101818118610236575b50508201602001915050905081019050806151445280615124016000612860518083528060051b6000826101408111611cc35780156102ac57905b8060051b61288001518160051b60208801015260010181811861028e575b5050820160200191505090508101905061508051615164526020611cc86000396000516151845201615100526151008051602082012090506150e0526150e051600055615080516001557f09d40458cf931745f8d532ef13fa9c74bfb7fe0edcee88e0a677b0cbef88f0f96150e0516151005261508051615120526040615100a161198361033f61887d396119a361887df36003361161000c5761143f565b60003560e01c346119715763f0f40504811861003e576004361061197157602061198360003960005160405260206040f35b63eadf4af78118610518576101e436106119715760043560040180358101803581016101408135116119715780358061cb405260008161014081116119715780156100ab57905b8060051b6020850101358060a01c611971578160051b61cb600152600101818118610085575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc03750505050506024356004018035810161014081351161197157803580620193c052600081610140811161197157801561016857905b8060051b6020850101358060a01c611971578160051b620193e00152600101818118610141575b5050505060208101358101610140813511611971578035806201bbe052602082018160051b80826201bc00375050505060408101356201e400525062011b80516201e40051116102215760116201e420527f496e76616c69642056616c7365742049440000000000000000000000000000006201e440526201e420506201e42051806201e44001601f826000031636823750506308c379a06201e3e05260206201e40052601f19601f6201e4205101166044016201e3fcfd5b6040366201e420376000620193c05161014081116119715780156102b857905b8060051b620193e001516201e460526201e420516201e440516201bbe0518110156119715760051b6201bc00015180820182811061197157905090506201e4205263aaaaaaaa6201e4205110610296576102b8565b6201e44051600181018181106119715790506201e44052600101818118610241575b505063aaaaaaaa6201e4205110156103395760126201e460527f496e73756666696369656e7420506f77657200000000000000000000000000006201e480526201e460506201e46051806201e48001601f826000031636823750506308c379a06201e4205260206201e44052601f19601f6201e4605101166044016201e43cfd5b61cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b8051615080526103846201e4606116b8565b6201e4605160005418156104015760146201e480527f496e636f727265637420436865636b706f696e740000000000000000000000006201e4a0526201e480506201e48051806201e4a001601f826000031636823750506308c379a06201e4405260206201e46052601f19601f6201e4805101166044016201e45cfd5b620193c051806040528060051b80606082620193e060045afa5050506201bbe05180612860528060051b80612880826201bc0060045afa5050506201e40051615080526104506201e4806116b8565b6201e480516201e4605261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201e4605161ca20526104ca6114e8565b6201e460516000556201e400516001557f09d40458cf931745f8d532ef13fa9c74bfb7fe0edcee88e0a677b0cbef88f0f96201e460516201e480526201e400516201e4a05260406201e480a1005b631029ae6f81186109cb576101e436106119715760043560040180358101803581016101408135116119715780358061cb4052600081610140811161197157801561058557905b8060051b6020850101358060a01c611971578160051b61cb60015260010181811861055f575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc037505050505060243560040180358060a01c61197157620193c0526020810135810161500081351161197157803580620193e0526020820181816201940037505050506064354211156106a15760076201e400527f54696d656f7574000000000000000000000000000000000000000000000000006201e420526201e400506201e40051806201e42001601f826000031636823750506308c379a06201e3c05260206201e3e052601f19601f6201e4005101166044016201e3dcfd5b60026044356020526000526040600020541561072657600f6201e400527f55736564204d6573736167655f494400000000000000000000000000000000006201e420526201e400506201e40051806201e42001601f826000031636823750506308c379a06201e3c05260206201e3e052601f19601f6201e4005101166044016201e3dcfd5b6001600260443560205260005260406000205561cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b8051615080526107846201e4006116b8565b6201e4005160005418156108015760146201e420527f496e636f727265637420436865636b706f696e740000000000000000000000006201e440526201e420506201e42051806201e44001601f826000031636823750506308c379a06201e3e05260206201e40052601f19601f6201e4205101166044016201e3fcfd5b63980721b26201e4245260046080806201e44452806201e444016040620193c0518252806020830152808201620193e051808252602082018181836201940060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190509050810190506044356201e4645260206119836000396000516201e484526064356201e4a452016201e420526201e4208051602082012090506201e4005261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201e4005161ca205261091b6114e8565b620193e0600060008251602084016000620193c0515af19050610943573d600060003e3d6000fd5b7f0d2bd340033bb64fd086788e6685b480a9bf10b98d63e9b8073eb5d0bd6c6ee96060620193c0516201e42052806201e44052806201e42001620193e051808252602082018181836201940060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356201e460526201e420a1005b63b39dcd5e8118610b4d5760843610611971576004358060a01c611971576101e05260243560040160408135116119715780358061020052602082018181610220375050506101e0516370a0823161028052306102a0526020610280602461029c845afa610a3e573d600060003e3d6000fd5b60203d1061197157610280905051610260526101e051604052336060523060805260443560a052610a6d6117a2565b610260516101e0516370a0823161028052306102a0526020610280602461029c845afa610a9f573d600060003e3d6000fd5b60203d10611971576102809050518082038281116119715790509050610260526102605115611971577f75a16dbdc936366f3b5b1a7aaabc5d7b28dcf94ce2eb5b3efbe0bce0da7ee66960806101e05161028052336102a052806102c0528061028001610200518082526020820181818361022060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356102e052610280a1005b630ffc0bdb81186110dd5761022436106119715760043560040180358101803581016101408135116119715780358061cb40526000816101408111611971578015610bba57905b8060051b6020850101358060a01c611971578160051b61cb600152600101818118610b94575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc03750505050506024358060a01c61197157620193c05260443560040180358101604081351161197157803580620193e05260008160408111611971578015610c8557905b8060051b6020850101358060a01c611971578160051b620194000152600101818118610c5e575b505050506020810135810160408135116119715780358062019c0052602082018160051b808262019c20375050505050608435421115610d2e5760076201a420527f54696d656f7574000000000000000000000000000000000000000000000000006201a440526201a420506201a42051806201a44001601f826000031636823750506308c379a06201a3e05260206201a40052601f19601f6201a4205101166044016201a3fcfd5b600260643560205260005260406000205415610db357600f6201a420527f55736564204d6573736167655f494400000000000000000000000000000000006201a440526201a420506201a42051806201a44001601f826000031636823750506308c379a06201a3e05260206201a40052601f19601f6201a4205101166044016201a3fcfd5b620193e0516201a4205262019c00516201a4205118611971576001600260643560205260005260406000205561cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b805161508052610e2a6201a4406116b8565b6201a440516000541815610ea75760146201a460527f496e636f727265637420436865636b706f696e740000000000000000000000006201a480526201a460506201a46051806201a48001601f826000031636823750506308c379a06201a4205260206201a44052601f19601f6201a4605101166044016201a43cfd5b63ecaa10b96201a46452600460a0620193c0516201a48452806201a4a452806201a4840160408082528082016000620193e0518083528060051b60008260408111611971578015610f1357905b8060051b6201940001518160051b602088010152600101818118610ef4575b50508201602001915050905081019050806020830152808201600062019c00518083528060051b60008260408111611971578015610f6c57905b8060051b62019c2001518160051b602088010152600101818118610f4d575b505082016020019150509050810190509050810190506064356201a4c45260206119836000396000516201a4e4526084356201a50452016201a460526201a4608051602082012090506201a4405261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201a4405161ca205261102a6114e8565b60006040905b806201a460526201a420516201a460511061104a5761109f565b620193c0516040526201a46051620193e0518110156119715760051b6201940001516060526201a4605162019c00518110156119715760051b62019c200151608052611094611891565b600101818118611030575b50507fba199fb06e908b6eca45bc6e460f07d1888e4a0606361da80e679eac61d11103620193c0516201a460526064356201a4805260406201a460a1005b6308a92ad781186113d25761010436106119715760043560040160408135116119715780358060405260208201818160603750505060243560040160408135116119715780358060a05260208201818160c03750505060443560040160208135116119715780358061010052602082018035610120525050506064358060081c61197157610140526084358060a01c6119715761016052303318156111e2576007610180527f496e76616c6964000000000000000000000000000000000000000000000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b610160516080306101a0526101a0516101e0528061020052806101e00160a0518082526020820181818360c060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061022052806101e001610100518082526020820161012051815250508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610140516101c0526101c051610240526003823b0359600182126119715781600382863c8181018381856101e060045afa5050828201816000f08015611971579050905090509050610180527f7144f66490771d357f3d6d385605288e1579754e5555f2e01114a2945f394e5b60a0806101a052806101a00160405180825260208201818183606060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610180516101c052806101e052806101a00160a0518082526020820181818360c060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061020052806101a001610100518082526020820161012051815250508051806020830101601f82600003163682375050601f19601f8251602001011690508101905061014051610220526101a0a1005b63a9a4a98381186113f157600436106119715760005460405260206040f35b634da6ecc9811861141057600436106119715760015460405260206040f35b6338d6172d811861143d576024361061197157600260043560205260005260406000205460405260206040f35b505b60006000fd5b6000601c610100527f19457468657265756d205369676e6564204d6573736167653a0a333200000000610120526101008051602082018361016001815181525050808301925050506060518161016001526020810190508061014052610140905080516020820120905060e05260e051610100526080516101205260a0516101405260c0516101605260206000608061010060015afa5060005160405114815250565b60403661ca4037600061520051610140811161197157801561163f57905b6060810261522001805161ca8052602081015161caa052604081015161cac0525061ca80511561161f5761ca40516101a0518110156119715760051b6101c0015160405261ca205160605261ca805160805261caa05160a05261cac05160c05261157161cae0611445565b61cae0516115df57601161cb00527f496e76616c6964205369676e617475726500000000000000000000000000000061cb205261cb005061cb00518061cb2001601f826000031636823750506308c379a061cac052602061cae052601f19601f61cb0051011660440161cadcfd5b61ca605161ca40516129c0518110156119715760051b6129e00151808201828110611971579050905061ca605263aaaaaaaa61ca60511061161f5761163f565b61ca40516001810181811061197157905061ca4052600101818118611506575b505063aaaaaaaa61ca605110156116b657601261ca80527f496e73756666696369656e7420506f776572000000000000000000000000000061caa05261ca805061ca80518061caa001601f826000031636823750506308c379a061ca4052602061ca6052601f19601f61ca8051011660440161ca5cfd5b565b63299018c26150a45260046080806150c452806150c40160006040518083528060051b600082610140811161197157801561170c57905b8060051b606001518160051b6020880101526001018181186116ef575b50508201602001915050905081019050806150e452806150c4016000612860518083528060051b600082610140811161197157801561176557905b8060051b61288001518160051b602088010152600101818118611747575b505082016020019150509050810190506150805161510452602061198360003960005161512452016150a0526150a0805160208201209050815250565b6323b872dd610104526004606051610124526080516101445260a05161016452606001610100526101005060206101c06101005161012060006040515af16117ef573d600060003e3d6000fd5b3d602081183d60201002186101a0526101a080518060c05260208201805160e05250505060c0511561188f5760e05160c05160200360031b1c61188f576013610100527f5472616e7366657246726f6d206661696c6564000000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b565b63a9059cbb60e4526004606051610104526080516101245260400160e05260e050602061018060e05161010060006040515af16118d3573d600060003e3d6000fd5b3d602081183d60201002186101605261016080518060a05260208201805160c05250505060a0511561196f5760c05160a05160200360031b1c61196f57601360e0527f5472616e7366657246726f6d206661696c6564000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b600080fda165767970657283000307000b005b600080fd