Skip to content

Instantly share code, notes, and snippets.

@zone117x
Created November 10, 2022 11:10
Show Gist options
  • Save zone117x/4c3b800b0886bcb6895dbb128c7c2300 to your computer and use it in GitHub Desktop.
Save zone117x/4c3b800b0886bcb6895dbb128c7c2300 to your computer and use it in GitHub Desktop.
stacks2.1-event-stream-borked.json
["/new_burn_block",{"burn_amount":0,"burn_block_hash":"0x0c79e0a0b950d8838b92299f3c623a2275220567c1f09bd30dd14b82efe1e8c0","burn_block_height":100,"reward_recipients":[],"reward_slot_holders":[]}]
["/new_burn_block",{"burn_amount":0,"burn_block_hash":"0x37cdc44d61328ae67f8882d4754e2fa2160f4ef1ead91d2d19ad98808f400131","burn_block_height":101,"reward_recipients":[],"reward_slot_holders":[]}]
["/new_burn_block",{"burn_amount":0,"burn_block_hash":"0x79c0dc847ed7574c7d63627f0a7422e5a48d6315d0ff7d754323b886caab6108","burn_block_height":102,"reward_recipients":[],"reward_slot_holders":[]}]
["/new_burn_block",{"burn_amount":20000,"burn_block_hash":"0x7c45de287b70eb596b40833c2cdbde49282daf41cd0145186d0bcf8f6f9f53d6","burn_block_height":103,"reward_recipients":[],"reward_slot_holders":[]}]
["/new_block",{"anchored_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"block_hash":"0xe074842eca1985317e4b83f9064e4044ea0c4af3ca81bba569280b1b2a08c24b","block_height":1,"burn_block_hash":"0x7c45de287b70eb596b40833c2cdbde49282daf41cd0145186d0bcf8f6f9f53d6","burn_block_height":103,"burn_block_time":1668078506,"confirmed_microblocks_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"events":[],"index_block_hash":"0xddd5c433dc4cfb17a2b1bb6f86a225f8e3e829b47b766f27a4783ef8060bbabe","matured_miner_rewards":[],"miner_txid":"0x4221666ee93453399ad4543dc02df16540414fbf36bcfe11d9833360cd004020","parent_block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","parent_burn_block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","parent_burn_block_height":0,"parent_burn_block_timestamp":0,"parent_index_block_hash":"0x55c9861be5cff984a20ce6d99d4aa65941412889bdc665094136429b84f8c2ee","parent_microblock":"0x0000000000000000000000000000000000000000000000000000000000000000","parent_microblock_sequence":0,"transactions":[{"contract_abi":{"clarity_version":"Clarity1","functions":[{"access":"private","args":[{"name":"n","type":"uint128"},{"name":"a","type":"uint128"},{"name":"b","type":"uint128"}],"name":"linear","outputs":{"type":"uint128"}},{"access":"private","args":[{"name":"n","type":"uint128"},{"name":"a","type":"uint128"},{"name":"b","type":"uint128"}],"name":"logn","outputs":{"type":"uint128"}},{"access":"private","args":[{"name":"n","type":"uint128"},{"name":"a","type":"uint128"},{"name":"b","type":"uint128"}],"name":"nlogn","outputs":{"type":"uint128"}},{"access":"private","args":[{"name":"r","type":"uint128"}],"name":"runtime","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_add","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_bind_name","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_check_let","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_check_tuple_cons","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_check_tuple_get","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_check_tuple_merge","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_fetch_contract_entry","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_get_function_entry","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_iterable_func","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_list_items_check","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_lookup_function","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_lookup_function_types","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_lookup_variable_const","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_lookup_variable_depth","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_option_check","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_option_cons","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_storage","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_tuple_items_check","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_type_annotate","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_type_check","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_type_lookup","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_use_trait_entry","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_analysis_visit","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_and","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_append","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_as_max_len","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_asserts","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ast_cycle_detection","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ast_parse","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_at_block","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_begin","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_bind_name","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_block_info","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_concat","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_contract_call","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_contract_of","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_contract_storage","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_create_ft","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_create_map","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_create_nft","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_create_var","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_default_to","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_div","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_element_at","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_eq","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_err_cons","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_fetch_entry","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_fetch_var","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_filter","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_fold","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ft_balance","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ft_burn","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ft_get_supply","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ft_mint","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ft_transfer","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ge","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_geq","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_hash160","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_if","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_index_of","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_inner_type_check_cost","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_int_cast","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_is_err","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_is_none","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_is_okay","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_is_some","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_keccak256","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_le","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_len","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_leq","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_let","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_list_cons","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_load_contract","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_log2","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_lookup_function","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_lookup_variable_depth","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_lookup_variable_size","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_map","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_match","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_mod","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_mul","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_nft_burn","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_nft_mint","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_nft_owner","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_nft_transfer","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_not","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_ok_cons","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_or","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_pow","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_principal_of","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_print","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_secp256k1recover","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_secp256k1verify","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_set_entry","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_set_var","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_sha256","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_sha512","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_sha512t256","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_some_cons","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_sqrti","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_stx_balance","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_stx_transfer","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_sub","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_try_ret","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_tuple_cons","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_tuple_get","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_tuple_merge","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_type_parse_step","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_unwrap","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_unwrap_err","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_unwrap_err_or_ret","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_unwrap_ret","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_user_function_application","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"cost_xor","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}},{"access":"read_only","args":[{"name":"n","type":"uint128"}],"name":"poison_microblock","outputs":{"type":{"tuple":[{"name":"read_count","type":"uint128"},{"name":"read_length","type":"uint128"},{"name":"runtime","type":"uint128"},{"name":"write_count","type":"uint128"},{"name":"write_length","type":"uint128"}]}}}],"fungible_tokens":[],"maps":[],"non_fungible_tokens":[],"variables":[]},"execution_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"microblock_hash":null,"microblock_parent_hash":null,"microblock_sequence":null,"raw_result":"0x0703","raw_tx":"0x800000000004000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302000000000107636f7374732d320000319a3b3b20746865202e636f7374732d3220636f6e74726163740a0a3b3b2048656c7065722046756e6374696f6e730a0a3b3b2052657475726e206120436f73742053706563696669636174696f6e2077697468206a75737420612072756e74696d6520636f73740a28646566696e652d70726976617465202872756e74696d652028722075696e7429290a202020207b0a202020202020202072756e74696d653a20722c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075302c0a2020202020202020726561645f6c656e6774683a2075302c0a202020207d290a0a3b3b204c696e65617220636f73742d6173736573736d656e742066756e6374696f6e0a28646566696e652d7072697661746520286c696e65617220286e2075696e74292028612075696e74292028622075696e7429290a20202020282b20282a2061206e29206229290a0a3b3b204c6f674e20636f73742d6173736573736d656e742066756e6374696f6e0a28646566696e652d7072697661746520286c6f676e20286e2075696e74292028612075696e74292028622075696e7429290a20202020282b20282a206120286c6f6732206e2929206229290a0a3b3b204e4c6f674e20636f73742d6173736573736d656e742066756e6374696f6e0a28646566696e652d7072697661746520286e6c6f676e20286e2075696e74292028612075696e74292028622075696e7429290a20202020282b20282a206120282a206e20286c6f6732206e292929206229290a0a0a3b3b20436f73742046756e6374696f6e730a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f747970655f616e6e6f7461746520286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075312075392929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f747970655f636865636b20286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753131332075312929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f747970655f6c6f6f6b757020286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075312075362929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f766973697420286e2075696e7429290a202020202872756e74696d6520753129290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6974657261626c655f66756e6320286e2075696e7429290a202020202872756e74696d6520286c696e656172206e207532207531342929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6f7074696f6e5f636f6e7320286e2075696e7429290a202020202872756e74696d6520753629290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6f7074696f6e5f636865636b20286e2075696e7429290a202020202872756e74696d6520753329290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f62696e645f6e616d6520286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753220753137362929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6c6973745f6974656d735f636865636b20286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075322075342929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f636865636b5f7475706c655f67657420286e2075696e7429290a202020202872756e74696d6520286c6f676e206e2075312075322929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f636865636b5f7475706c655f6d6572676520286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075313030302075313030302929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f636865636b5f7475706c655f636f6e7320286e2075696e7429290a202020202872756e74696d6520286e6c6f676e206e2075332075352929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f7475706c655f6974656d735f636865636b20286e2075696e7429290a202020202872756e74696d6520286c696e656172206e207531207535392929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f636865636b5f6c657420286e2075696e7429290a202020202872756e74696d6520286c696e656172206e207531207531322929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6c6f6f6b75705f66756e6374696f6e20286e2075696e7429290a202020202872756e74696d652075323029290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6c6f6f6b75705f66756e6374696f6e5f747970657320286e2075696e7429290a202020202872756e74696d6520286c696e656172206e207531207532382929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6c6f6f6b75705f7661726961626c655f636f6e737420286e2075696e7429290a202020202872756e74696d652075313529290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6c6f6f6b75705f7661726961626c655f646570746820286e2075696e7429290a202020202872756e74696d6520286e6c6f676e206e207531207533342929290a0a28646566696e652d726561642d6f6e6c792028636f73745f6173745f706172736520286e2075696e7429290a202020202872756e74696d6520286c696e656172206e207531373220753238373434312929290a0a28646566696e652d726561642d6f6e6c792028636f73745f6173745f6379636c655f646574656374696f6e20286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075313431207537322929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f73746f7261676520286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075322075313030292c0a202020202020202077726974655f6c656e6774683a20286c696e656172206e207531207531292c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f7573655f74726169745f656e74727920286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075392075373233292c0a202020202020202077726974655f6c656e6774683a20286c696e656172206e207531207531292c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a20286c696e656172206e207531207531290a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f6765745f66756e6374696f6e5f656e74727920286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e20753831207531333033292c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a20286c696e656172206e207531207531290a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f616e616c797369735f66657463685f636f6e74726163745f656e74727920286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e207531303030207531303030292c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a20286c696e656172206e207531207531290a202020207d290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c6f6f6b75705f7661726961626c655f646570746820286e2075696e7429290a202020202872756e74696d6520286c696e656172206e207532207531342929290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c6f6f6b75705f7661726961626c655f73697a6520286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075322075312929290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c6f6f6b75705f66756e6374696f6e20286e2075696e7429290a202020202872756e74696d652075313629290a0a28646566696e652d726561642d6f6e6c792028636f73745f62696e645f6e616d6520286e2075696e7429290a202020202872756e74696d65207532353629290a0a28646566696e652d726561642d6f6e6c792028636f73745f696e6e65725f747970655f636865636b5f636f737420286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075322075392929290a0a28646566696e652d726561642d6f6e6c792028636f73745f757365725f66756e6374696f6e5f6170706c69636174696f6e20286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075323620753134302929290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c657420286e2075696e7429290a202020202872756e74696d6520286c696e656172206e207531343620753836322929290a0a28646566696e652d726561642d6f6e6c792028636f73745f696620286e2075696e7429290a202020202872756e74696d65207532303029290a0a28646566696e652d726561642d6f6e6c792028636f73745f6173736572747320286e2075696e7429290a202020202872756e74696d65207531353829290a0a28646566696e652d726561642d6f6e6c792028636f73745f6d617020286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075313231302075333331342929290a0a28646566696e652d726561642d6f6e6c792028636f73745f66696c74657220286e2075696e7429290a202020202872756e74696d65207534363029290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c656e20286e2075696e7429290a202020202872756e74696d65207534383629290a0a28646566696e652d726561642d6f6e6c792028636f73745f656c656d656e745f617420286e2075696e7429290a202020202872756e74696d65207536313929290a0a28646566696e652d726561642d6f6e6c792028636f73745f696e6465785f6f6620286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753120753234332929290a0a28646566696e652d726561642d6f6e6c792028636f73745f666f6c6420286e2075696e7429290a202020202872756e74696d65207534383329290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c6973745f636f6e7320286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075313420753139382929290a0a28646566696e652d726561642d6f6e6c792028636f73745f747970655f70617273655f7374657020286e2075696e7429290a202020202872756e74696d6520753529290a0a28646566696e652d726561642d6f6e6c792028636f73745f7475706c655f67657420286e2075696e7429290a202020202872756e74696d6520286e6c6f676e206e2075342075313738302929290a0a28646566696e652d726561642d6f6e6c792028636f73745f7475706c655f6d6572676520286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753420753634362929290a0a28646566696e652d726561642d6f6e6c792028636f73745f7475706c655f636f6e7320286e2075696e7429290a202020202872756e74696d6520286e6c6f676e206e207531312075313130312929290a0a28646566696e652d726561642d6f6e6c792028636f73745f61646420286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075313220753135362929290a0a28646566696e652d726561642d6f6e6c792028636f73745f73756220286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075313220753135362929290a0a28646566696e652d726561642d6f6e6c792028636f73745f6d756c20286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075313420753135372929290a0a28646566696e652d726561642d6f6e6c792028636f73745f64697620286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075313420753135372929290a0a28646566696e652d726561642d6f6e6c792028636f73745f67657120286e2075696e7429290a202020202872756e74696d65207531363629290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c657120286e2075696e7429290a202020202872756e74696d65207531363629290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c6520286e2075696e7429290a202020202872756e74696d65207531363629290a0a28646566696e652d726561642d6f6e6c792028636f73745f676520286e2075696e7429290a202020202872756e74696d65207531363629290a0a28646566696e652d726561642d6f6e6c792028636f73745f696e745f6361737420286e2075696e7429290a202020202872756e74696d65207531363429290a0a28646566696e652d726561642d6f6e6c792028636f73745f6d6f6420286e2075696e7429290a202020202872756e74696d65207531363829290a0a28646566696e652d726561642d6f6e6c792028636f73745f706f7720286e2075696e7429290a202020202872756e74696d65207531373029290a0a28646566696e652d726561642d6f6e6c792028636f73745f737172746920286e2075696e7429290a202020202872756e74696d65207531363729290a0a28646566696e652d726561642d6f6e6c792028636f73745f6c6f673220286e2075696e7429290a202020202872756e74696d65207531363129290a0a28646566696e652d726561642d6f6e6c792028636f73745f786f7220286e2075696e7429290a202020202872756e74696d65207531363729290a0a28646566696e652d726561642d6f6e6c792028636f73745f6e6f7420286e2075696e7429290a202020202872756e74696d65207531363229290a0a28646566696e652d726561642d6f6e6c792028636f73745f657120286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753720753137322929290a0a28646566696e652d726561642d6f6e6c792028636f73745f626567696e20286e2075696e7429290a202020202872756e74696d65207532303229290a0a28646566696e652d726561642d6f6e6c792028636f73745f6861736831363020286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753120753230312929290a0a28646566696e652d726561642d6f6e6c792028636f73745f73686132353620286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753120753130302929290a0a28646566696e652d726561642d6f6e6c792028636f73745f73686135313220286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753120753137362929290a0a28646566696e652d726561642d6f6e6c792028636f73745f7368613531327432353620286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753120753138382929290a0a28646566696e652d726561642d6f6e6c792028636f73745f6b656363616b32353620286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753120753232312929290a0a28646566696e652d726561642d6f6e6c792028636f73745f736563703235366b317265636f76657220286e2075696e7429290a202020202872756e74696d652075313433343429290a0a28646566696e652d726561642d6f6e6c792028636f73745f736563703235366b3176657269667920286e2075696e7429290a202020202872756e74696d652075313335343029290a0a28646566696e652d726561642d6f6e6c792028636f73745f7072696e7420286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075332075313431332929290a0a28646566696e652d726561642d6f6e6c792028636f73745f736f6d655f636f6e7320286e2075696e7429290a202020202872756e74696d65207532333029290a0a28646566696e652d726561642d6f6e6c792028636f73745f6f6b5f636f6e7320286e2075696e7429290a202020202872756e74696d65207532333029290a0a28646566696e652d726561642d6f6e6c792028636f73745f6572725f636f6e7320286e2075696e7429290a202020202872756e74696d65207532333029290a0a28646566696e652d726561642d6f6e6c792028636f73745f64656661756c745f746f20286e2075696e7429290a202020202872756e74696d65207532343929290a0a28646566696e652d726561642d6f6e6c792028636f73745f756e777261705f72657420286e2075696e7429290a202020202872756e74696d65207532393929290a0a28646566696e652d726561642d6f6e6c792028636f73745f756e777261705f6572725f6f725f72657420286e2075696e7429290a202020202872756e74696d65207533333929290a0a28646566696e652d726561642d6f6e6c792028636f73745f69735f6f6b617920286e2075696e7429290a202020202872756e74696d65207532383729290a0a28646566696e652d726561642d6f6e6c792028636f73745f69735f6e6f6e6520286e2075696e7429290a202020202872756e74696d65207532383729290a0a28646566696e652d726561642d6f6e6c792028636f73745f69735f65727220286e2075696e7429290a202020202872756e74696d65207532383729290a0a28646566696e652d726561642d6f6e6c792028636f73745f69735f736f6d6520286e2075696e7429290a202020202872756e74696d65207532383729290a0a28646566696e652d726561642d6f6e6c792028636f73745f756e7772617020286e2075696e7429290a202020202872756e74696d65207532383429290a0a28646566696e652d726561642d6f6e6c792028636f73745f756e777261705f65727220286e2075696e7429290a202020202872756e74696d65207532363429290a0a28646566696e652d726561642d6f6e6c792028636f73745f7472795f72657420286e2075696e7429290a202020202872756e74696d65207532353629290a0a28646566696e652d726561642d6f6e6c792028636f73745f6d6174636820286e2075696e7429290a202020202872756e74696d65207532383629290a0a28646566696e652d726561642d6f6e6c792028636f73745f6f7220286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753320753134392929290a0a28646566696e652d726561642d6f6e6c792028636f73745f616e6420286e2075696e7429290a202020202872756e74696d6520286c696e656172206e20753320753134392929290a0a28646566696e652d726561642d6f6e6c792028636f73745f617070656e6420286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075373120753137362929290a0a28646566696e652d726561642d6f6e6c792028636f73745f636f6e63617420286e2075696e7429290a202020202872756e74696d6520286c696e656172206e2075373520753234342929290a0a28646566696e652d726561642d6f6e6c792028636f73745f61735f6d61785f6c656e20286e2075696e7429290a202020202872756e74696d65207534373529290a0a28646566696e652d726561642d6f6e6c792028636f73745f636f6e74726163745f63616c6c20286e2075696e7429290a202020202872756e74696d65207531353329290a0a28646566696e652d726561642d6f6e6c792028636f73745f636f6e74726163745f6f6620286e2075696e7429290a202020202872756e74696d652075313334303029290a0a28646566696e652d726561642d6f6e6c792028636f73745f7072696e636970616c5f6f6620286e2075696e7429290a202020202872756e74696d652075333929290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f61745f626c6f636b20286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20753231302c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6c6f61645f636f6e747261637420286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075312075313537292c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a20202020202020203b3b2073657420746f20332062656361757365206f6620746865206173736f636961746564206d65746164617461206c6f6164730a2020202020202020726561645f636f756e743a2075332c0a2020202020202020726561645f6c656e6774683a20286c696e656172206e207531207531290a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6372656174655f6d617020286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e207531207531363331292c0a202020202020202077726974655f6c656e6774683a20286c696e656172206e207531207531292c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075302c0a2020202020202020726561645f6c656e6774683a2075300a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6372656174655f76617220286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e207537207532313532292c0a202020202020202077726974655f6c656e6774683a20286c696e656172206e207531207531292c0a202020202020202077726974655f636f756e743a2075322c0a2020202020202020726561645f636f756e743a2075302c0a2020202020202020726561645f6c656e6774683a2075300a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6372656174655f6e667420286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e207531207531363130292c0a202020202020202077726974655f6c656e6774683a20286c696e656172206e207531207531292c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075302c0a2020202020202020726561645f6c656e6774683a2075300a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6372656174655f667420286e2075696e7429290a202020207b0a202020202020202072756e74696d653a2075313937322c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075322c0a2020202020202020726561645f636f756e743a2075302c0a2020202020202020726561645f6c656e6774683a2075300a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f66657463685f656e74727920286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e207531207531353339292c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a20286c696e656172206e207531207531290a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f7365745f656e74727920286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e207534207532323034292c0a202020202020202077726974655f6c656e6774683a20286c696e656172206e207531207531292c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075300a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f66657463685f76617220286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075312075353433292c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a20286c696e656172206e207531207531290a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f7365745f76617220286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075352075363931292c0a202020202020202077726974655f6c656e6774683a20286c696e656172206e207531207531292c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075300a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f636f6e74726163745f73746f7261676520286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e20753133207537393832292c0a202020202020202077726974655f6c656e6774683a20286c696e656172206e207531207531292c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075302c0a2020202020202020726561645f6c656e6774683a2075300a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f626c6f636b5f696e666f20286e2075696e7429290a202020207b0a202020202020202072756e74696d653a2075363332312c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f7374785f62616c616e636520286e2075696e7429290a202020207b0a202020202020202072756e74696d653a2075313338352c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f7374785f7472616e7366657220286e2075696e7429290a202020207b0a202020202020202072756e74696d653a2075313433302c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f66745f6d696e7420286e2075696e7429290a202020207b0a202020202020202072756e74696d653a2075313634352c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075322c0a2020202020202020726561645f636f756e743a2075322c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f66745f7472616e7366657220286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20753631322c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075322c0a2020202020202020726561645f636f756e743a2075322c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f66745f62616c616e636520286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20753534372c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6e66745f6d696e7420286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075392075373935292c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6e66745f7472616e7366657220286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075392075373935292c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6e66745f6f776e657220286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075392075373935292c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f66745f6765745f737570706c7920286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20753438332c0a202020202020202077726974655f6c656e6774683a2075302c0a202020202020202077726974655f636f756e743a2075302c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f66745f6275726e20286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20753631322c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075322c0a2020202020202020726561645f636f756e743a2075322c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028636f73745f6e66745f6275726e20286e2075696e7429290a202020207b0a202020202020202072756e74696d653a20286c696e656172206e2075392075373935292c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a0a0a28646566696e652d726561642d6f6e6c792028706f69736f6e5f6d6963726f626c6f636b20286e2075696e7429290a202020207b0a202020202020202072756e74696d653a207532393536382c0a202020202020202077726974655f6c656e6774683a2075312c0a202020202020202077726974655f636f756e743a2075312c0a2020202020202020726561645f636f756e743a2075312c0a2020202020202020726561645f6c656e6774683a2075310a202020207d290a","status":"success","tx_index":0,"txid":"0xef13fb69ad25f49400fad61d82fb678cb59f8e584acd70450acd84b3e49ef706","decoded_tx":{"tx_id":"0xef13fb69ad25f49400fad61d82fb678cb59f8e584acd70450acd84b3e49ef706","version":128,"chain_id":0,"auth":{"type_id":4,"origin_condition":{"hash_mode":0,"signer":{"address_version":26,"address_hash_bytes":"0x0000000000000000000000000000000000000000","address":"ST000000000000000000002AMW42H"},"nonce":"0","tx_fee":"0","key_encoding":1,"signature":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}},"anchor_mode":3,"post_condition_mode":2,"post_conditions":[],"post_conditions_buffer":"0x0200000000","payload":{"type_id":1,"contract_name":"costs-2","code_body":";; the .costs-2 contract\n\n;; Helper Functions\n\n;; Return a Cost Specification with just a runtime cost\n(define-private (runtime (r uint))\n {\n runtime: r,\n write_length: u0,\n write_count: u0,\n read_count: u0,\n read_length: u0,\n })\n\n;; Linear cost-assessment function\n(define-private (linear (n uint) (a uint) (b uint))\n (+ (* a n) b))\n\n;; LogN cost-assessment function\n(define-private (logn (n uint) (a uint) (b uint))\n (+ (* a (log2 n)) b))\n\n;; NLogN cost-assessment function\n(define-private (nlogn (n uint) (a uint) (b uint))\n (+ (* a (* n (log2 n))) b))\n\n\n;; Cost Functions\n(define-read-only (cost_analysis_type_annotate (n uint))\n (runtime (linear n u1 u9)))\n\n(define-read-only (cost_analysis_type_check (n uint))\n (runtime (linear n u113 u1)))\n\n(define-read-only (cost_analysis_type_lookup (n uint))\n (runtime (linear n u1 u6)))\n\n(define-read-only (cost_analysis_visit (n uint))\n (runtime u1))\n\n(define-read-only (cost_analysis_iterable_func (n uint))\n (runtime (linear n u2 u14)))\n\n(define-read-only (cost_analysis_option_cons (n uint))\n (runtime u6))\n\n(define-read-only (cost_analysis_option_check (n uint))\n (runtime u3))\n\n(define-read-only (cost_analysis_bind_name (n uint))\n (runtime (linear n u2 u176)))\n\n(define-read-only (cost_analysis_list_items_check (n uint))\n (runtime (linear n u2 u4)))\n\n(define-read-only (cost_analysis_check_tuple_get (n uint))\n (runtime (logn n u1 u2)))\n\n(define-read-only (cost_analysis_check_tuple_merge (n uint))\n (runtime (linear n u1000 u1000)))\n\n(define-read-only (cost_analysis_check_tuple_cons (n uint))\n (runtime (nlogn n u3 u5)))\n\n(define-read-only (cost_analysis_tuple_items_check (n uint))\n (runtime (linear n u1 u59)))\n\n(define-read-only (cost_analysis_check_let (n uint))\n (runtime (linear n u1 u12)))\n\n(define-read-only (cost_analysis_lookup_function (n uint))\n (runtime u20))\n\n(define-read-only (cost_analysis_lookup_function_types (n uint))\n (runtime (linear n u1 u28)))\n\n(define-read-only (cost_analysis_lookup_variable_const (n uint))\n (runtime u15))\n\n(define-read-only (cost_analysis_lookup_variable_depth (n uint))\n (runtime (nlogn n u1 u34)))\n\n(define-read-only (cost_ast_parse (n uint))\n (runtime (linear n u172 u287441)))\n\n(define-read-only (cost_ast_cycle_detection (n uint))\n (runtime (linear n u141 u72)))\n\n(define-read-only (cost_analysis_storage (n uint))\n {\n runtime: (linear n u2 u100),\n write_length: (linear n u1 u1),\n write_count: u1,\n read_count: u1,\n read_length: u1\n })\n\n(define-read-only (cost_analysis_use_trait_entry (n uint))\n {\n runtime: (linear n u9 u723),\n write_length: (linear n u1 u1),\n write_count: u0,\n read_count: u1,\n read_length: (linear n u1 u1)\n })\n\n\n(define-read-only (cost_analysis_get_function_entry (n uint))\n {\n runtime: (linear n u81 u1303),\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: (linear n u1 u1)\n })\n\n\n(define-read-only (cost_analysis_fetch_contract_entry (n uint))\n {\n runtime: (linear n u1000 u1000),\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: (linear n u1 u1)\n })\n\n(define-read-only (cost_lookup_variable_depth (n uint))\n (runtime (linear n u2 u14)))\n\n(define-read-only (cost_lookup_variable_size (n uint))\n (runtime (linear n u2 u1)))\n\n(define-read-only (cost_lookup_function (n uint))\n (runtime u16))\n\n(define-read-only (cost_bind_name (n uint))\n (runtime u256))\n\n(define-read-only (cost_inner_type_check_cost (n uint))\n (runtime (linear n u2 u9)))\n\n(define-read-only (cost_user_function_application (n uint))\n (runtime (linear n u26 u140)))\n\n(define-read-only (cost_let (n uint))\n (runtime (linear n u146 u862)))\n\n(define-read-only (cost_if (n uint))\n (runtime u200))\n\n(define-read-only (cost_asserts (n uint))\n (runtime u158))\n\n(define-read-only (cost_map (n uint))\n (runtime (linear n u1210 u3314)))\n\n(define-read-only (cost_filter (n uint))\n (runtime u460))\n\n(define-read-only (cost_len (n uint))\n (runtime u486))\n\n(define-read-only (cost_element_at (n uint))\n (runtime u619))\n\n(define-read-only (cost_index_of (n uint))\n (runtime (linear n u1 u243)))\n\n(define-read-only (cost_fold (n uint))\n (runtime u483))\n\n(define-read-only (cost_list_cons (n uint))\n (runtime (linear n u14 u198)))\n\n(define-read-only (cost_type_parse_step (n uint))\n (runtime u5))\n\n(define-read-only (cost_tuple_get (n uint))\n (runtime (nlogn n u4 u1780)))\n\n(define-read-only (cost_tuple_merge (n uint))\n (runtime (linear n u4 u646)))\n\n(define-read-only (cost_tuple_cons (n uint))\n (runtime (nlogn n u11 u1101)))\n\n(define-read-only (cost_add (n uint))\n (runtime (linear n u12 u156)))\n\n(define-read-only (cost_sub (n uint))\n (runtime (linear n u12 u156)))\n\n(define-read-only (cost_mul (n uint))\n (runtime (linear n u14 u157)))\n\n(define-read-only (cost_div (n uint))\n (runtime (linear n u14 u157)))\n\n(define-read-only (cost_geq (n uint))\n (runtime u166))\n\n(define-read-only (cost_leq (n uint))\n (runtime u166))\n\n(define-read-only (cost_le (n uint))\n (runtime u166))\n\n(define-read-only (cost_ge (n uint))\n (runtime u166))\n\n(define-read-only (cost_int_cast (n uint))\n (runtime u164))\n\n(define-read-only (cost_mod (n uint))\n (runtime u168))\n\n(define-read-only (cost_pow (n uint))\n (runtime u170))\n\n(define-read-only (cost_sqrti (n uint))\n (runtime u167))\n\n(define-read-only (cost_log2 (n uint))\n (runtime u161))\n\n(define-read-only (cost_xor (n uint))\n (runtime u167))\n\n(define-read-only (cost_not (n uint))\n (runtime u162))\n\n(define-read-only (cost_eq (n uint))\n (runtime (linear n u7 u172)))\n\n(define-read-only (cost_begin (n uint))\n (runtime u202))\n\n(define-read-only (cost_hash160 (n uint))\n (runtime (linear n u1 u201)))\n\n(define-read-only (cost_sha256 (n uint))\n (runtime (linear n u1 u100)))\n\n(define-read-only (cost_sha512 (n uint))\n (runtime (linear n u1 u176)))\n\n(define-read-only (cost_sha512t256 (n uint))\n (runtime (linear n u1 u188)))\n\n(define-read-only (cost_keccak256 (n uint))\n (runtime (linear n u1 u221)))\n\n(define-read-only (cost_secp256k1recover (n uint))\n (runtime u14344))\n\n(define-read-only (cost_secp256k1verify (n uint))\n (runtime u13540))\n\n(define-read-only (cost_print (n uint))\n (runtime (linear n u3 u1413)))\n\n(define-read-only (cost_some_cons (n uint))\n (runtime u230))\n\n(define-read-only (cost_ok_cons (n uint))\n (runtime u230))\n\n(define-read-only (cost_err_cons (n uint))\n (runtime u230))\n\n(define-read-only (cost_default_to (n uint))\n (runtime u249))\n\n(define-read-only (cost_unwrap_ret (n uint))\n (runtime u299))\n\n(define-read-only (cost_unwrap_err_or_ret (n uint))\n (runtime u339))\n\n(define-read-only (cost_is_okay (n uint))\n (runtime u287))\n\n(define-read-only (cost_is_none (n uint))\n (runtime u287))\n\n(define-read-only (cost_is_err (n uint))\n (runtime u287))\n\n(define-read-only (cost_is_some (n uint))\n (runtime u287))\n\n(define-read-only (cost_unwrap (n uint))\n (runtime u284))\n\n(define-read-only (cost_unwrap_err (n uint))\n (runtime u264))\n\n(define-read-only (cost_try_ret (n uint))\n (runtime u256))\n\n(define-read-only (cost_match (n uint))\n (runtime u286))\n\n(define-read-only (cost_or (n uint))\n (runtime (linear n u3 u149)))\n\n(define-read-only (cost_and (n uint))\n (runtime (linear n u3 u149)))\n\n(define-read-only (cost_append (n uint))\n (runtime (linear n u71 u176)))\n\n(define-read-only (cost_concat (n uint))\n (runtime (linear n u75 u244)))\n\n(define-read-only (cost_as_max_len (n uint))\n (runtime u475))\n\n(define-read-only (cost_contract_call (n uint))\n (runtime u153))\n\n(define-read-only (cost_contract_of (n uint))\n (runtime u13400))\n\n(define-read-only (cost_principal_of (n uint))\n (runtime u39))\n\n\n(define-read-only (cost_at_block (n uint))\n {\n runtime: u210,\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_load_contract (n uint))\n {\n runtime: (linear n u1 u157),\n write_length: u0,\n write_count: u0,\n ;; set to 3 because of the associated metadata loads\n read_count: u3,\n read_length: (linear n u1 u1)\n })\n\n\n(define-read-only (cost_create_map (n uint))\n {\n runtime: (linear n u1 u1631),\n write_length: (linear n u1 u1),\n write_count: u1,\n read_count: u0,\n read_length: u0\n })\n\n\n(define-read-only (cost_create_var (n uint))\n {\n runtime: (linear n u7 u2152),\n write_length: (linear n u1 u1),\n write_count: u2,\n read_count: u0,\n read_length: u0\n })\n\n\n(define-read-only (cost_create_nft (n uint))\n {\n runtime: (linear n u1 u1610),\n write_length: (linear n u1 u1),\n write_count: u1,\n read_count: u0,\n read_length: u0\n })\n\n\n(define-read-only (cost_create_ft (n uint))\n {\n runtime: u1972,\n write_length: u1,\n write_count: u2,\n read_count: u0,\n read_length: u0\n })\n\n\n(define-read-only (cost_fetch_entry (n uint))\n {\n runtime: (linear n u1 u1539),\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: (linear n u1 u1)\n })\n\n\n(define-read-only (cost_set_entry (n uint))\n {\n runtime: (linear n u4 u2204),\n write_length: (linear n u1 u1),\n write_count: u1,\n read_count: u1,\n read_length: u0\n })\n\n\n(define-read-only (cost_fetch_var (n uint))\n {\n runtime: (linear n u1 u543),\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: (linear n u1 u1)\n })\n\n\n(define-read-only (cost_set_var (n uint))\n {\n runtime: (linear n u5 u691),\n write_length: (linear n u1 u1),\n write_count: u1,\n read_count: u1,\n read_length: u0\n })\n\n\n(define-read-only (cost_contract_storage (n uint))\n {\n runtime: (linear n u13 u7982),\n write_length: (linear n u1 u1),\n write_count: u1,\n read_count: u0,\n read_length: u0\n })\n\n\n(define-read-only (cost_block_info (n uint))\n {\n runtime: u6321,\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_stx_balance (n uint))\n {\n runtime: u1385,\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_stx_transfer (n uint))\n {\n runtime: u1430,\n write_length: u1,\n write_count: u1,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_ft_mint (n uint))\n {\n runtime: u1645,\n write_length: u1,\n write_count: u2,\n read_count: u2,\n read_length: u1\n })\n\n\n(define-read-only (cost_ft_transfer (n uint))\n {\n runtime: u612,\n write_length: u1,\n write_count: u2,\n read_count: u2,\n read_length: u1\n })\n\n\n(define-read-only (cost_ft_balance (n uint))\n {\n runtime: u547,\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_nft_mint (n uint))\n {\n runtime: (linear n u9 u795),\n write_length: u1,\n write_count: u1,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_nft_transfer (n uint))\n {\n runtime: (linear n u9 u795),\n write_length: u1,\n write_count: u1,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_nft_owner (n uint))\n {\n runtime: (linear n u9 u795),\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_ft_get_supply (n uint))\n {\n runtime: u483,\n write_length: u0,\n write_count: u0,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (cost_ft_burn (n uint))\n {\n runtime: u612,\n write_length: u1,\n write_count: u2,\n read_count: u2,\n read_length: u1\n })\n\n\n(define-read-only (cost_nft_burn (n uint))\n {\n runtime: (linear n u9 u795),\n write_length: u1,\n write_count: u1,\n read_count: u1,\n read_length: u1\n })\n\n\n(define-read-only (poison_microblock (n uint))\n {\n runtime: u29568,\n write_length: u1,\n write_count: u1,\n read_count: u1,\n read_length: u1\n })\n"}}},{"contract_abi":{"clarity_version":"Clarity2","functions":[{"access":"private","args":[{"name":"cycle-index","type":"uint128"},{"name":"params","type":{"tuple":[{"name":"amount-ustx","type":"uint128"},{"name":"first-reward-cycle","type":"uint128"},{"name":"i","type":"uint128"},{"name":"num-cycles","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-set-indexes","type":{"list":{"length":12,"type":"uint128"}}},{"name":"stacker","type":{"optional":"principal"}}]}}],"name":"add-pox-addr-to-ith-reward-cycle","outputs":{"type":{"tuple":[{"name":"amount-ustx","type":"uint128"},{"name":"first-reward-cycle","type":"uint128"},{"name":"i","type":"uint128"},{"name":"num-cycles","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-set-indexes","type":{"list":{"length":12,"type":"uint128"}}},{"name":"stacker","type":{"optional":"principal"}}]}}},{"access":"private","args":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"first-reward-cycle","type":"uint128"},{"name":"num-cycles","type":"uint128"},{"name":"amount-ustx","type":"uint128"},{"name":"stacker","type":"principal"}],"name":"add-pox-addr-to-reward-cycles","outputs":{"type":{"response":{"error":"int128","ok":{"list":{"length":12,"type":"uint128"}}}}}},{"access":"private","args":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"first-reward-cycle","type":"uint128"},{"name":"num-cycles","type":"uint128"},{"name":"amount-ustx","type":"uint128"}],"name":"add-pox-partial-stacked","outputs":{"type":"bool"}},{"access":"private","args":[{"name":"cycle-index","type":"uint128"},{"name":"params","type":{"tuple":[{"name":"amount-ustx","type":"uint128"},{"name":"num-cycles","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-cycle","type":"uint128"}]}}],"name":"add-pox-partial-stacked-to-ith-cycle","outputs":{"type":{"tuple":[{"name":"amount-ustx","type":"uint128"},{"name":"num-cycles","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-cycle","type":"uint128"}]}}},{"access":"private","args":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-cycle","type":"uint128"},{"name":"amount-ustx","type":"uint128"},{"name":"stacker","type":{"optional":"principal"}}],"name":"append-reward-cycle-pox-addr","outputs":{"type":"uint128"}},{"access":"private","args":[{"name":"set-index","type":"uint128"},{"name":"data-res","type":{"response":{"error":"int128","ok":{"tuple":[{"name":"cycle","type":"uint128"},{"name":"first-unlocked-cycle","type":"uint128"},{"name":"stacker","type":"principal"}]}}}}],"name":"fold-unlock-reward-cycle","outputs":{"type":{"response":{"error":"int128","ok":{"tuple":[{"name":"cycle","type":"uint128"},{"name":"first-unlocked-cycle","type":"uint128"},{"name":"stacker","type":"principal"}]}}}}},{"access":"private","args":[{"name":"user","type":"principal"},{"name":"amount-locked","type":"uint128"},{"name":"cycle-to-unlock","type":"uint128"}],"name":"handle-unlock","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"private","args":[{"name":"reward-cycle-index","type":"uint128"},{"name":"updates","type":{"optional":{"tuple":[{"name":"add-amount","type":"uint128"},{"name":"first-cycle","type":"uint128"},{"name":"reward-cycle","type":"uint128"},{"name":"stacker","type":"principal"}]}}}],"name":"increase-reward-cycle-entry","outputs":{"type":{"optional":{"tuple":[{"name":"add-amount","type":"uint128"},{"name":"first-cycle","type":"uint128"},{"name":"reward-cycle","type":"uint128"},{"name":"stacker","type":"principal"}]}}}},{"access":"public","args":[{"name":"caller","type":"principal"},{"name":"until-burn-ht","type":{"optional":"uint128"}}],"name":"allow-contract-caller","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"public","args":[{"name":"stacker","type":"principal"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"extend-count","type":"uint128"}],"name":"delegate-stack-extend","outputs":{"type":{"response":{"error":"int128","ok":{"tuple":[{"name":"stacker","type":"principal"},{"name":"unlock-burn-height","type":"uint128"}]}}}}},{"access":"public","args":[{"name":"stacker","type":"principal"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"increase-by","type":"uint128"}],"name":"delegate-stack-increase","outputs":{"type":{"response":{"error":"int128","ok":{"tuple":[{"name":"stacker","type":"principal"},{"name":"total-locked","type":"uint128"}]}}}}},{"access":"public","args":[{"name":"stacker","type":"principal"},{"name":"amount-ustx","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"start-burn-ht","type":"uint128"},{"name":"lock-period","type":"uint128"}],"name":"delegate-stack-stx","outputs":{"type":{"response":{"error":"int128","ok":{"tuple":[{"name":"lock-amount","type":"uint128"},{"name":"stacker","type":"principal"},{"name":"unlock-burn-height","type":"uint128"}]}}}}},{"access":"public","args":[{"name":"amount-ustx","type":"uint128"},{"name":"delegate-to","type":"principal"},{"name":"until-burn-ht","type":{"optional":"uint128"}},{"name":"pox-addr","type":{"optional":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}}}],"name":"delegate-stx","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"public","args":[{"name":"caller","type":"principal"}],"name":"disallow-contract-caller","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"public","args":[],"name":"reject-pox","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"public","args":[],"name":"revoke-delegate-stx","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"public","args":[{"name":"first-burn-height","type":"uint128"},{"name":"prepare-cycle-length","type":"uint128"},{"name":"reward-cycle-length","type":"uint128"},{"name":"rejection-fraction","type":"uint128"},{"name":"begin-2-1-reward-cycle","type":"uint128"}],"name":"set-burnchain-parameters","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"public","args":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-cycle","type":"uint128"}],"name":"stack-aggregation-commit","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"public","args":[{"name":"extend-count","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}}],"name":"stack-extend","outputs":{"type":{"response":{"error":"int128","ok":{"tuple":[{"name":"stacker","type":"principal"},{"name":"unlock-burn-height","type":"uint128"}]}}}}},{"access":"public","args":[{"name":"increase-by","type":"uint128"}],"name":"stack-increase","outputs":{"type":{"response":{"error":"int128","ok":{"tuple":[{"name":"stacker","type":"principal"},{"name":"total-locked","type":"uint128"}]}}}}},{"access":"public","args":[{"name":"amount-ustx","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"start-burn-ht","type":"uint128"},{"name":"lock-period","type":"uint128"}],"name":"stack-stx","outputs":{"type":{"response":{"error":"int128","ok":{"tuple":[{"name":"lock-amount","type":"uint128"},{"name":"stacker","type":"principal"},{"name":"unlock-burn-height","type":"uint128"}]}}}}},{"access":"read_only","args":[{"name":"height","type":"uint128"}],"name":"burn-height-to-reward-cycle","outputs":{"type":"uint128"}},{"access":"read_only","args":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"amount-ustx","type":"uint128"},{"name":"first-reward-cycle","type":"uint128"},{"name":"num-cycles","type":"uint128"}],"name":"can-stack-stx","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"read_only","args":[],"name":"check-caller-allowed","outputs":{"type":"bool"}},{"access":"read_only","args":[{"name":"version","type":{"buffer":{"length":1}}},{"name":"hashbytes","type":{"buffer":{"length":32}}}],"name":"check-pox-addr-hashbytes","outputs":{"type":"bool"}},{"access":"read_only","args":[{"name":"version","type":{"buffer":{"length":1}}}],"name":"check-pox-addr-version","outputs":{"type":"bool"}},{"access":"read_only","args":[{"name":"lock-period","type":"uint128"}],"name":"check-pox-lock-period","outputs":{"type":"bool"}},{"access":"read_only","args":[],"name":"current-pox-reward-cycle","outputs":{"type":"uint128"}},{"access":"read_only","args":[{"name":"sender","type":"principal"},{"name":"calling-contract","type":"principal"}],"name":"get-allowance-contract-callers","outputs":{"type":{"optional":{"tuple":[{"name":"until-burn-ht","type":{"optional":"uint128"}}]}}}},{"access":"read_only","args":[{"name":"stacker","type":"principal"}],"name":"get-check-delegation","outputs":{"type":{"optional":{"tuple":[{"name":"amount-ustx","type":"uint128"},{"name":"delegated-to","type":"principal"},{"name":"pox-addr","type":{"optional":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}}},{"name":"until-burn-ht","type":{"optional":"uint128"}}]}}}},{"access":"read_only","args":[{"name":"stacker","type":"principal"}],"name":"get-delegation-info","outputs":{"type":{"optional":{"tuple":[{"name":"amount-ustx","type":"uint128"},{"name":"delegated-to","type":"principal"},{"name":"pox-addr","type":{"optional":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}}},{"name":"until-burn-ht","type":{"optional":"uint128"}}]}}}},{"access":"read_only","args":[{"name":"reward-cycle","type":"uint128"}],"name":"get-num-reward-set-pox-addresses","outputs":{"type":"uint128"}},{"access":"read_only","args":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-cycle","type":"uint128"},{"name":"sender","type":"principal"}],"name":"get-partial-stacked-by-cycle","outputs":{"type":{"optional":{"tuple":[{"name":"stacked-amount","type":"uint128"}]}}}},{"access":"read_only","args":[],"name":"get-pox-info","outputs":{"type":{"response":{"error":"none","ok":{"tuple":[{"name":"current-rejection-votes","type":"uint128"},{"name":"first-burnchain-block-height","type":"uint128"},{"name":"min-amount-ustx","type":"uint128"},{"name":"prepare-cycle-length","type":"uint128"},{"name":"rejection-fraction","type":"uint128"},{"name":"reward-cycle-id","type":"uint128"},{"name":"reward-cycle-length","type":"uint128"},{"name":"total-liquid-supply-ustx","type":"uint128"}]}}}}},{"access":"read_only","args":[{"name":"stacker","type":"principal"},{"name":"reward-cycle","type":"uint128"}],"name":"get-pox-rejection","outputs":{"type":{"optional":{"tuple":[{"name":"amount","type":"uint128"}]}}}},{"access":"read_only","args":[{"name":"reward-cycle","type":"uint128"},{"name":"index","type":"uint128"}],"name":"get-reward-set-pox-address","outputs":{"type":{"optional":{"tuple":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"stacker","type":{"optional":"principal"}},{"name":"total-ustx","type":"uint128"}]}}}},{"access":"read_only","args":[{"name":"reward-cycle","type":"uint128"}],"name":"get-reward-set-size","outputs":{"type":"uint128"}},{"access":"read_only","args":[{"name":"stacker","type":"principal"}],"name":"get-stacker-info","outputs":{"type":{"optional":{"tuple":[{"name":"first-reward-cycle","type":"uint128"},{"name":"lock-period","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-set-indexes","type":{"list":{"length":12,"type":"uint128"}}}]}}}},{"access":"read_only","args":[],"name":"get-stacking-minimum","outputs":{"type":"uint128"}},{"access":"read_only","args":[{"name":"reward-cycle","type":"uint128"}],"name":"get-total-pox-rejection","outputs":{"type":"uint128"}},{"access":"read_only","args":[{"name":"reward-cycle","type":"uint128"}],"name":"get-total-ustx-stacked","outputs":{"type":"uint128"}},{"access":"read_only","args":[{"name":"reward-cycle","type":"uint128"}],"name":"is-pox-active","outputs":{"type":"bool"}},{"access":"read_only","args":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"amount-ustx","type":"uint128"},{"name":"first-reward-cycle","type":"uint128"},{"name":"num-cycles","type":"uint128"}],"name":"minimal-can-stack-stx","outputs":{"type":{"response":{"error":"int128","ok":"bool"}}}},{"access":"read_only","args":[],"name":"next-cycle-rejection-votes","outputs":{"type":"uint128"}},{"access":"read_only","args":[{"name":"cycle","type":"uint128"}],"name":"reward-cycle-to-burn-height","outputs":{"type":"uint128"}}],"fungible_tokens":[],"maps":[{"key":{"tuple":[{"name":"contract-caller","type":"principal"},{"name":"sender","type":"principal"}]},"name":"allowance-contract-callers","value":{"tuple":[{"name":"until-burn-ht","type":{"optional":"uint128"}}]}},{"key":{"tuple":[{"name":"stacker","type":"principal"}]},"name":"delegation-state","value":{"tuple":[{"name":"amount-ustx","type":"uint128"},{"name":"delegated-to","type":"principal"},{"name":"pox-addr","type":{"optional":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}}},{"name":"until-burn-ht","type":{"optional":"uint128"}}]}},{"key":{"tuple":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-cycle","type":"uint128"},{"name":"sender","type":"principal"}]},"name":"partial-stacked-by-cycle","value":{"tuple":[{"name":"stacked-amount","type":"uint128"}]}},{"key":{"tuple":[{"name":"index","type":"uint128"},{"name":"reward-cycle","type":"uint128"}]},"name":"reward-cycle-pox-address-list","value":{"tuple":[{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"stacker","type":{"optional":"principal"}},{"name":"total-ustx","type":"uint128"}]}},{"key":{"tuple":[{"name":"reward-cycle","type":"uint128"}]},"name":"reward-cycle-pox-address-list-len","value":{"tuple":[{"name":"len","type":"uint128"}]}},{"key":{"tuple":[{"name":"reward-cycle","type":"uint128"}]},"name":"reward-cycle-total-stacked","value":{"tuple":[{"name":"total-ustx","type":"uint128"}]}},{"key":{"tuple":[{"name":"reward-cycle","type":"uint128"}]},"name":"stacking-rejection","value":{"tuple":[{"name":"amount","type":"uint128"}]}},{"key":{"tuple":[{"name":"reward-cycle","type":"uint128"},{"name":"stacker","type":"principal"}]},"name":"stacking-rejectors","value":{"tuple":[{"name":"amount","type":"uint128"}]}},{"key":{"tuple":[{"name":"stacker","type":"principal"}]},"name":"stacking-state","value":{"tuple":[{"name":"first-reward-cycle","type":"uint128"},{"name":"lock-period","type":"uint128"},{"name":"pox-addr","type":{"tuple":[{"name":"hashbytes","type":{"buffer":{"length":32}}},{"name":"version","type":{"buffer":{"length":1}}}]}},{"name":"reward-set-indexes","type":{"list":{"length":12,"type":"uint128"}}}]}}],"non_fungible_tokens":[],"variables":[{"access":"constant","name":"ADDRESS_VERSION_NATIVE_P2TR","type":{"buffer":{"length":1}}},{"access":"constant","name":"ADDRESS_VERSION_NATIVE_P2WPKH","type":{"buffer":{"length":1}}},{"access":"constant","name":"ADDRESS_VERSION_NATIVE_P2WSH","type":{"buffer":{"length":1}}},{"access":"constant","name":"ADDRESS_VERSION_P2PKH","type":{"buffer":{"length":1}}},{"access":"constant","name":"ADDRESS_VERSION_P2SH","type":{"buffer":{"length":1}}},{"access":"constant","name":"ADDRESS_VERSION_P2WPKH","type":{"buffer":{"length":1}}},{"access":"constant","name":"ADDRESS_VERSION_P2WSH","type":{"buffer":{"length":1}}},{"access":"constant","name":"ERR_DELEGATION_EXPIRES_DURING_LOCK","type":"int128"},{"access":"constant","name":"ERR_DELEGATION_POX_ADDR_REQUIRED","type":"int128"},{"access":"constant","name":"ERR_DELEGATION_TOO_MUCH_LOCKED","type":"int128"},{"access":"constant","name":"ERR_INVALID_START_BURN_HEIGHT","type":"int128"},{"access":"constant","name":"ERR_NOT_ALLOWED","type":"int128"},{"access":"constant","name":"ERR_NOT_CURRENT_STACKER","type":"int128"},{"access":"constant","name":"ERR_STACKING_ALREADY_DELEGATED","type":"int128"},{"access":"constant","name":"ERR_STACKING_ALREADY_REJECTED","type":"int128"},{"access":"constant","name":"ERR_STACKING_ALREADY_STACKED","type":"int128"},{"access":"constant","name":"ERR_STACKING_CORRUPTED_STATE","type":"int128"},{"access":"constant","name":"ERR_STACKING_EXPIRED","type":"int128"},{"access":"constant","name":"ERR_STACKING_INSUFFICIENT_FUNDS","type":"int128"},{"access":"constant","name":"ERR_STACKING_INVALID_AMOUNT","type":"int128"},{"access":"constant","name":"ERR_STACKING_INVALID_LOCK_PERIOD","type":"int128"},{"access":"constant","name":"ERR_STACKING_INVALID_POX_ADDRESS","type":"int128"},{"access":"constant","name":"ERR_STACKING_NO_SUCH_PRINCIPAL","type":"int128"},{"access":"constant","name":"ERR_STACKING_PERMISSION_DENIED","type":"int128"},{"access":"constant","name":"ERR_STACKING_POX_ADDRESS_IN_USE","type":"int128"},{"access":"constant","name":"ERR_STACKING_STX_LOCKED","type":"int128"},{"access":"constant","name":"ERR_STACKING_THRESHOLD_NOT_MET","type":"int128"},{"access":"constant","name":"ERR_STACKING_UNREACHABLE","type":"int128"},{"access":"constant","name":"ERR_STACK_EXTEND_NOT_LOCKED","type":"int128"},{"access":"constant","name":"ERR_STACK_INCREASE_NOT_LOCKED","type":"int128"},{"access":"constant","name":"MAX_ADDRESS_VERSION","type":"uint128"},{"access":"constant","name":"MAX_ADDRESS_VERSION_BUFF_20","type":"uint128"},{"access":"constant","name":"MAX_ADDRESS_VERSION_BUFF_32","type":"uint128"},{"access":"constant","name":"MAX_POX_REWARD_CYCLES","type":"uint128"},{"access":"constant","name":"MIN_POX_REWARD_CYCLES","type":"uint128"},{"access":"constant","name":"POX_REJECTION_FRACTION","type":"uint128"},{"access":"constant","name":"PREPARE_CYCLE_LENGTH","type":"uint128"},{"access":"constant","name":"REWARD_CYCLE_LENGTH","type":"uint128"},{"access":"constant","name":"STACKING_THRESHOLD_100","type":"uint128"},{"access":"constant","name":"STACKING_THRESHOLD_25","type":"uint128"},{"access":"variable","name":"configured","type":"bool"},{"access":"variable","name":"first-2-1-reward-cycle","type":"uint128"},{"access":"variable","name":"first-burnchain-block-height","type":"uint128"},{"access":"variable","name":"pox-prepare-cycle-length","type":"uint128"},{"access":"variable","name":"pox-rejection-fraction","type":"uint128"},{"access":"variable","name":"pox-reward-cycle-length","type":"uint128"}]},"execution_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"microblock_hash":null,"microblock_parent_hash":null,"microblock_sequence":null,"raw_result":"0x0703","raw_tx":"0x80000000000400000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030200000000060205706f782d320000e7483b3b20506f5820746573746e657420636f6e7374616e74730a3b3b204d696e2f6d6178206e756d626572206f6620726577617264206379636c657320755354582063616e206265206c6f636b656420666f720a28646566696e652d636f6e7374616e74204d494e5f504f585f5245574152445f4359434c4553207531290a28646566696e652d636f6e7374616e74204d41585f504f585f5245574152445f4359434c455320753132290a0a3b3b2044656661756c74206c656e677468206f662074686520506f5820726567697374726174696f6e2077696e646f772c20696e206275726e636861696e20626c6f636b732e0a28646566696e652d636f6e7374616e7420505245504152455f4359434c455f4c454e47544820753530290a0a3b3b2044656661756c74206c656e677468206f662074686520506f5820726577617264206379636c652c20696e206275726e636861696e20626c6f636b732e0a28646566696e652d636f6e7374616e74205245574152445f4359434c455f4c454e475448207531303530290a0a3b3b2056616c69642076616c75657320666f72206275726e636861696e20616464726573732076657273696f6e732e0a3b3b20546865736520636f72726573706f6e6420746f20616464726573732068617368206d6f64657320696e20537461636b7320322e302e0a28646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f5032504b482030783030290a28646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f503253482030783031290a28646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f503257504b482030783032290a28646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f50325753482030783033290a0a3b3b20537461636b696e67207468726573686f6c64730a28646566696e652d636f6e7374616e7420535441434b494e475f5448524553484f4c445f3235207538303030290a28646566696e652d636f6e7374616e7420535441434b494e475f5448524553484f4c445f313030207532303030290a0a3b3b20546865202e706f782d3220636f6e74726163740a3b3b204572726f7220636f6465730a28646566696e652d636f6e7374616e74204552525f535441434b494e475f554e524541434841424c4520323535290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f434f525255505445445f535441544520323534290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f494e53554646494349454e545f46554e44532031290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f442032290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f414c52454144595f535441434b45442033290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f4e4f5f535543485f5052494e434950414c2034290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f455850495245442035290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f5354585f4c4f434b45442036290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f5045524d495353494f4e5f44454e4945442039290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f5448524553484f4c445f4e4f545f4d4554203131290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f504f585f414444524553535f494e5f555345203132290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f494e56414c49445f504f585f41444452455353203133290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f414c52454144595f52454a4543544544203137290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f494e56414c49445f414d4f554e54203138290a28646566696e652d636f6e7374616e74204552525f4e4f545f414c4c4f574544203139290a28646566696e652d636f6e7374616e74204552525f535441434b494e475f414c52454144595f44454c454741544544203230290a28646566696e652d636f6e7374616e74204552525f44454c45474154494f4e5f455850495245535f445552494e475f4c4f434b203231290a28646566696e652d636f6e7374616e74204552525f44454c45474154494f4e5f544f4f5f4d5543485f4c4f434b4544203232290a28646566696e652d636f6e7374616e74204552525f44454c45474154494f4e5f504f585f414444525f5245515549524544203233290a28646566696e652d636f6e7374616e74204552525f494e56414c49445f53544152545f4255524e5f484549474854203234290a28646566696e652d636f6e7374616e74204552525f4e4f545f43555252454e545f535441434b4552203235290a28646566696e652d636f6e7374616e74204552525f535441434b5f455854454e445f4e4f545f4c4f434b4544203236290a28646566696e652d636f6e7374616e74204552525f535441434b5f494e4352454153455f4e4f545f4c4f434b4544203237290a0a3b3b20506f582064697361626c696e67207468726573686f6c642028612070657263656e74290a28646566696e652d636f6e7374616e7420504f585f52454a454354494f4e5f4652414354494f4e20753235290a0a3b3b2056616c69642076616c75657320666f72206275726e636861696e20616464726573732076657273696f6e732e0a3b3b20546865736520666972737420666f757220636f72726573706f6e6420746f20616464726573732068617368206d6f64657320696e20537461636b7320322e312c0a3b3b20616e642061726520646566696e656420696e20706f782d6d61696e6e65742e636c617220616e6420706f782d746573746e65742e636c61722028736f20746865790a3b3b2063616e6e6f7420626520646566696e6564206865726520616761696e292e0a3b3b2028646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f5032504b482030783030290a3b3b2028646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f503253482030783031290a3b3b2028646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f503257504b482030783032290a3b3b2028646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f50325753482030783033290a28646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f4e41544956455f503257504b482030783034290a28646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f4e41544956455f50325753482030783035290a28646566696e652d636f6e7374616e7420414444524553535f56455253494f4e5f4e41544956455f503254522030783036290a3b3b204b65657020746865736520636f6e7374616e747320696e206c6f636b2d7374657020776974682074686520616464726573732076657273696f6e2062756666732061626f76650a3b3b204d6178696d756d2076616c7565206f6620616e20616464726573732076657273696f6e20617320612075696e740a28646566696e652d636f6e7374616e74204d41585f414444524553535f56455253494f4e207536290a3b3b204d6178696d756d2076616c7565206f6620616e20616464726573732076657273696f6e20746861742068617320612032302d62797465206861736862797465730a3b3b2028307830302c20307830312c20307830322c20307830332c20616e64203078303420686176652032302d6279746520686173686279746573290a28646566696e652d636f6e7374616e74204d41585f414444524553535f56455253494f4e5f425546465f3230207534290a3b3b204d6178696d756d2076616c7565206f6620616e20616464726573732076657273696f6e20746861742068617320612033322d62797465206861736862797465730a3b3b20283078303520616e64203078303620686176652033322d6279746520686173686279746573290a28646566696e652d636f6e7374616e74204d41585f414444524553535f56455253494f4e5f425546465f3332207536290a0a3b3b2044617461207661727320746861742073746f7265206120636f7079206f6620746865206275726e636861696e20636f6e66696775726174696f6e2e0a3b3b20496d706c656d656e74656420617320646174612d766172732c20736f207468617420646966666572656e7420636f6e66696775726174696f6e732063616e2062650a3b3b207573656420696e20652e672e2074657374206861726e65737365732e0a28646566696e652d646174612d76617220706f782d707265706172652d6379636c652d6c656e6774682075696e7420505245504152455f4359434c455f4c454e475448290a28646566696e652d646174612d76617220706f782d7265776172642d6379636c652d6c656e6774682075696e74205245574152445f4359434c455f4c454e475448290a28646566696e652d646174612d76617220706f782d72656a656374696f6e2d6672616374696f6e2075696e7420504f585f52454a454354494f4e5f4652414354494f4e290a28646566696e652d646174612d7661722066697273742d6275726e636861696e2d626c6f636b2d6865696768742075696e74207530290a28646566696e652d646174612d76617220636f6e6669677572656420626f6f6c2066616c7365290a28646566696e652d646174612d7661722066697273742d322d312d7265776172642d6379636c652075696e74207530290a0a3b3b20546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c6564206f6e63652c207768656e20697420626f6f74732075700a28646566696e652d7075626c696320287365742d6275726e636861696e2d706172616d6574657273202866697273742d6275726e2d6865696768742075696e74290a202020202020202020202020202020202020202020202020202020202020202020202020202020202028707265706172652d6379636c652d6c656e6774682075696e74290a2020202020202020202020202020202020202020202020202020202020202020202020202020202020287265776172642d6379636c652d6c656e6774682075696e74290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202872656a656374696f6e2d6672616374696f6e2075696e74290a202020202020202020202020202020202020202020202020202020202020202020202020202020202028626567696e2d322d312d7265776172642d6379636c652075696e7429290a2020202028626567696e0a202020202020202028617373657274732120286e6f7420287661722d67657420636f6e6669677572656429292028657272204552525f4e4f545f414c4c4f57454429290a2020202020202020287661722d7365742066697273742d6275726e636861696e2d626c6f636b2d6865696768742066697273742d6275726e2d686569676874290a2020202020202020287661722d73657420706f782d707265706172652d6379636c652d6c656e67746820707265706172652d6379636c652d6c656e677468290a2020202020202020287661722d73657420706f782d7265776172642d6379636c652d6c656e677468207265776172642d6379636c652d6c656e677468290a2020202020202020287661722d73657420706f782d72656a656374696f6e2d6672616374696f6e2072656a656374696f6e2d6672616374696f6e290a2020202020202020287661722d7365742066697273742d322d312d7265776172642d6379636c6520626567696e2d322d312d7265776172642d6379636c65290a2020202020202020287661722d73657420636f6e666967757265642074727565290a2020202020202020286f6b207472756529290a290a0a3b3b2054686520537461636b696e67206c6f636b2d757020737461746520616e64206173736f636961746564206d657461646174612e0a3b3b205265636f7264732061726520696e73657274656420696e746f2074686973206d6170207669612060737461636b2d737478602c206064656c65676174652d737461636b2d737478602c2060737461636b2d657874656e64600a3b3b20206064656c65676174652d737461636b2d657874656e646020616e64206275726e636861696e207472616e73616374696f6e7320666f7220696e766f6b696e672060737461636b2d737478602c206574632e0a3b3b205265636f7264732077696c6c2062652064656c657465642066726f6d2074686973206d6170207768656e206175746f2d756e6c6f636b73206172652070726f6365737365640a3b3b0a3b3b2054686973206d61702064652d6e6f726d616c697a657320736f6d652073746174652066726f6d2074686520607265776172642d6379636c652d706f782d616464726573732d6c69737460206d61700a3b3b2020616e64207468652060706f782d326020636f6e747261637420747269657320746f206b656570207468697320737461746520696e2073796e63207769746820746865207265776172642d6379636c650a3b3b202073746174652e20546865206d616a6f7220696e76617269616e7473206f6620746869732060737461636b696e672d737461746560206d6170206172653a0a3b3b2020202028312920616e7920656e74727920696e20607265776172642d6379636c652d706f782d616464726573732d6c6973746020776974682060736f6d6520737461636b65726020706f696e747320746f2061207265616c2060737461636b696e672d7374617465600a3b3b202020202832292060737461636b696e672d73746174652e7265776172642d7365742d696e646578657360206d6174636865732074686520696e646578206f66207468617420607265776172642d6379636c652d706f782d616464726573732d6c697374600a3b3b2020202028332920616c6c2060737461636b696e672d73746174652e7265776172642d7365742d696e646578657360206d617463682074686520696e646578206f6620746865697220726577617264206379636c6520656e74726965730a3b3b202020202834292060737461636b696e672d73746174652e706f782d6164647260206d61746368657320607265776172642d6379636c652d706f782d616464726573732d6c6973742e706f782d61646472600a3b3b20202020283529206966207365742c20286c656e207265776172642d7365742d696e646578657329203d3d206c6f636b2d706572696f640a3b3b2020202028362920287265776172642d6379636c652d746f2d6275726e2d68656967687420282b206c6f636b2d706572696f642066697273742d7265776172642d6379636c652929203d3d202867657420756e6c6f636b2d68656967687420287374782d6163636f756e7420737461636b657229290a3b3b2020546865736520696e76617269616e7473206f6e6c7920686f6c64207768696c6520606375722d7265776172642d6379636c65203c20282b206c6f636b2d706572696f642066697273742d7265776172642d6379636c6529600a3b3b0a28646566696e652d6d617020737461636b696e672d73746174650a202020207b20737461636b65723a207072696e636970616c207d0a202020207b0a20202020202020203b3b204465736372697074696f6e206f662074686520756e6465726c79696e67206275726e636861696e206164647265737320746861742077696c6c0a20202020202020203b3b207265636569766520506f5827656420746f6b656e732e205472616e736c6174696e67207468697320696e746f20616e20616464726573730a20202020202020203b3b20646570656e6473206f6e20746865206275726e636861696e206265696e6720757365642e20205768656e20426974636f696e2069730a20202020202020203b3b20746865206275726e636861696e2c20746869732067657473207472616e736c6174656420696e746f2061207032706b682c20703273682c0a20202020202020203b3b20703277706b682d703273682c2070327773682d703273682c20703277706b682c2070327773682c206f722070327472205554584f2c0a20202020202020203b3b20646570656e64696e67206f6e207468652076657273696f6e2e2020546865206068617368627974657360206669656c64202a6d7573742a2062650a20202020202020203b3b20656974686572203230206279746573206f722033322062797465732c20646570656e64696e67206f6e20746865206f75747075742e0a2020202020202020706f782d616464723a207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d2c0a20202020202020203b3b20686f77206c6f6e6720746865207553545820617265206c6f636b65642c20696e20726577617264206379636c65732e0a20202020202020206c6f636b2d706572696f643a2075696e742c0a20202020202020203b3b20726577617264206379636c65207768656e207265776172647320626567696e0a202020202020202066697273742d7265776172642d6379636c653a2075696e742c0a20202020202020203b3b20696e646578657320696e2065616368207265776172642d736574206173736f6369617465642077697468207468697320757365722e0a20202020202020203b3b20746865736520696e646578657320617265206f6e6c792076616c6964206c6f6f6b696e6720666f72776172642066726f6d0a20202020202020203b3b20206066697273742d7265776172642d6379636c65602028692e652e2c207468657920646f206e6f7420636f72726573706f6e640a20202020202020203b3b2020746f20656e747269657320696e2074686520726577617264207365742074686174206d61792068617665206265656e2066726f6d0a20202020202020203b3b202070726576696f757320737461636b2d7374782063616c6c732c206f72207072696f7220746f20616e20657874656e64290a20202020202020207265776172642d7365742d696e64657865733a20286c6973742031322075696e74290a202020207d0a290a0a3b3b2044656c65676174696f6e2072656c6174696f6e73686970730a28646566696e652d6d61702064656c65676174696f6e2d73746174650a202020207b20737461636b65723a207072696e636970616c207d0a202020207b200a2020202020202020616d6f756e742d757374783a2075696e742c20202020202020202020202020203b3b20686f77206d616e7920755354582064656c6567617465643f0a202020202020202064656c6567617465642d746f3a207072696e636970616c2c20202020202020203b3b2077686f206172652077652064656c65676174696e673f0a2020202020202020756e74696c2d6275726e2d68743a20286f7074696f6e616c2075696e74292c203b3b20686f77206c6f6e6720646f6573207468652064656c65676174696f6e206c6173743f0a20202020202020203b3b20646f6573207468652064656c6567617465205f6e6565645f20746f2075736520612073706563696669630a20202020202020203b3b20706f7820726563697069656e7420616464726573733f0a2020202020202020706f782d616464723a20286f7074696f6e616c207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d290a202020207d0a290a0a3b3b20616c6c6f77656420636f6e74726163742d63616c6c6572730a28646566696e652d6d617020616c6c6f77616e63652d636f6e74726163742d63616c6c6572730a202020207b2073656e6465723a207072696e636970616c2c20636f6e74726163742d63616c6c65723a207072696e636970616c207d0a202020207b20756e74696c2d6275726e2d68743a20286f7074696f6e616c2075696e7429207d290a0a3b3b20486f77206d616e7920755354582061726520737461636b656420696e206120676976656e20726577617264206379636c652e0a3b3b2055706461746564207768656e2061206e657720506f58206164647265737320697320726567697374657265642c206f72207768656e206d6f72652053545820617265206772616e7465640a3b3b20746f2069742e0a28646566696e652d6d6170207265776172642d6379636c652d746f74616c2d737461636b65640a202020207b207265776172642d6379636c653a2075696e74207d0a202020207b20746f74616c2d757374783a2075696e74207d0a290a0a3b3b20496e7465726e616c206d617020726561642062792074686520537461636b73206e6f646520746f2069746572617465207468726f75676820746865206c697374206f660a3b3b20506f582072657761726420616464726573736573206f6e2061207065722d7265776172642d6379636c652062617369732e0a28646566696e652d6d6170207265776172642d6379636c652d706f782d616464726573732d6c6973740a202020207b207265776172642d6379636c653a2075696e742c20696e6465783a2075696e74207d0a202020207b0a2020202020202020706f782d616464723a207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d2c0a2020202020202020746f74616c2d757374783a2075696e742c0a2020202020202020737461636b65723a20286f7074696f6e616c207072696e636970616c290a202020207d0a290a0a28646566696e652d6d6170207265776172642d6379636c652d706f782d616464726573732d6c6973742d6c656e0a202020207b207265776172642d6379636c653a2075696e74207d0a202020207b206c656e3a2075696e74207d0a290a0a3b3b20686f77206d75636820686173206265656e206c6f636b656420757020666f7220746869732061646472657373206265666f72650a3b3b202020636f6d6d697474696e673f0a3b3b2074686973206d617020616c6c6f777320737461636b65727320746f20737461636b20616d6f756e7473203c206d696e696d756d0a3b3b202020627920706179696e672074686520636f7374206f66206167677265676174696f6e20647572696e672074686520636f6d6d69740a28646566696e652d6d6170207061727469616c2d737461636b65642d62792d6379636c650a202020207b200a2020202020202020706f782d616464723a207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d2c0a20202020202020207265776172642d6379636c653a2075696e742c0a202020202020202073656e6465723a207072696e636970616c0a202020207d0a202020207b20737461636b65642d616d6f756e743a2075696e74207d0a290a0a3b3b20416d6f756e74206f66207553545820746861742072656a65637420506f582c20627920726577617264206379636c650a28646566696e652d6d617020737461636b696e672d72656a656374696f6e0a202020207b207265776172642d6379636c653a2075696e74207d0a202020207b20616d6f756e743a2075696e74207d0a290a0a3b3b2057686f2072656a656374656420696e20776869636820726577617264206379636c650a28646566696e652d6d617020737461636b696e672d72656a6563746f72730a202020207b20737461636b65723a207072696e636970616c2c207265776172642d6379636c653a2075696e74207d0a202020207b20616d6f756e743a2075696e74207d0a290a0a3b3b2047657474657220666f7220737461636b696e672d72656a6563746f72730a28646566696e652d726561642d6f6e6c7920286765742d706f782d72656a656374696f6e2028737461636b6572207072696e636970616c2920287265776172642d6379636c652075696e7429290a20202020286d61702d6765743f20737461636b696e672d72656a6563746f7273207b20737461636b65723a20737461636b65722c207265776172642d6379636c653a207265776172642d6379636c65207d29290a0a3b3b2048617320506f58206265656e2072656a656374656420696e2074686520676976656e20726577617264206379636c653f0a28646566696e652d726561642d6f6e6c79202869732d706f782d61637469766520287265776172642d6379636c652075696e7429290a20202020286c657420280a20202020202020202872656a6563742d766f746573200a2020202020202020202020202864656661756c742d746f0a2020202020202020202020202020202075300a202020202020202020202020202020202867657420616d6f756e7420286d61702d6765743f20737461636b696e672d72656a656374696f6e207b207265776172642d6379636c653a207265776172642d6379636c65207d292929290a20202020290a202020203b3b2028313030202a2072656a6563742d766f74657329202f207374782d6c69717569642d737570706c79203c20706f782d72656a656374696f6e2d6672616374696f6e202020200a20202020283c20282a20753130302072656a6563742d766f74657329200a20202020202020282a20287661722d67657420706f782d72656a656374696f6e2d6672616374696f6e29207374782d6c69717569642d737570706c792929290a290a0a3b3b205768617427732074686520726577617264206379636c65206e756d626572206f6620746865206275726e636861696e20626c6f636b206865696768743f0a3b3b2057696c6c2072756e74696d652d61626f727420696620686569676874206973206c657373207468616e20746865206669727374206275726e636861696e20626c6f636b20287468697320697320696e74656e74696f6e616c290a28646566696e652d726561642d6f6e6c7920286275726e2d6865696768742d746f2d7265776172642d6379636c6520286865696768742075696e742929200a20202020282f20282d2068656967687420287661722d6765742066697273742d6275726e636861696e2d626c6f636b2d686569676874292920287661722d67657420706f782d7265776172642d6379636c652d6c656e6774682929290a0a3b3b205768617427732074686520626c6f636b2068656967687420617420746865207374617274206f66206120676976656e20726577617264206379636c653f0a28646566696e652d726561642d6f6e6c7920287265776172642d6379636c652d746f2d6275726e2d68656967687420286379636c652075696e7429290a20202020282b20287661722d6765742066697273742d6275726e636861696e2d626c6f636b2d6865696768742920282a206379636c6520287661722d67657420706f782d7265776172642d6379636c652d6c656e677468292929290a0a3b3b20576861742773207468652063757272656e7420506f5820726577617264206379636c653f0a28646566696e652d726561642d6f6e6c79202863757272656e742d706f782d7265776172642d6379636c65290a20202020286275726e2d6865696768742d746f2d7265776172642d6379636c65206275726e2d626c6f636b2d68656967687429290a0a3b3b2047657420746865205f63757272656e745f20506f5820737461636b696e67207072696e636970616c20696e666f726d6174696f6e2e202049662074686520696e666f726d6174696f6e0a3b3b20697320657870697265642c206f722069662074686572652773206e65766572206265656e2073756368206120737461636b65722c207468656e2072657475726e73206e6f6e652e0a28646566696e652d726561642d6f6e6c7920286765742d737461636b65722d696e666f2028737461636b6572207072696e636970616c29290a20202020286d6174636820286d61702d6765743f20737461636b696e672d7374617465207b20737461636b65723a20737461636b6572207d290a2020202020202020737461636b696e672d696e666f0a20202020202020202020202028696620283c3d20282b20286765742066697273742d7265776172642d6379636c6520737461636b696e672d696e666f292028676574206c6f636b2d706572696f6420737461636b696e672d696e666f2929202863757272656e742d706f782d7265776172642d6379636c6529290a202020202020202020202020202020203b3b2070726573656e742c20627574206c6f636b2068617320657870697265640a202020202020202020202020202020206e6f6e650a202020202020202020202020202020203b3b2070726573656e742c20616e64206c6f636b20686173206e6f7420657870697265640a2020202020202020202020202020202028736f6d6520737461636b696e672d696e666f290a202020202020202020202020290a20202020202020203b3b206e6f20737461746520617420616c6c0a20202020202020206e6f6e650a2020202029290a0a28646566696e652d726561642d6f6e6c792028636865636b2d63616c6c65722d616c6c6f776564290a20202020286f72202869732d65712074782d73656e64657220636f6e74726163742d63616c6c6572290a2020202020202020286c657420282863616c6c65722d616c6c6f776564200a20202020202020202020202020202020203b3b206966206e6f7420696e207468652063616c6c6572206d61702c2072657475726e2066616c73650a202020202020202020202020202020202028756e777261702120286d61702d6765743f20616c6c6f77616e63652d636f6e74726163742d63616c6c6572730a2020202020202020202020202020202020202020202020202020202020202020202020207b2073656e6465723a2074782d73656e6465722c20636f6e74726163742d63616c6c65723a20636f6e74726163742d63616c6c6572207d290a202020202020202020202020202020202020202020202020202066616c736529290a20202020202020202020202020202028657870697265732d61740a20202020202020202020202020202020203b3b20696620756e74696c2d6275726e2d6874206e6f74207365742c207468656e2072657475726e2074727565202862656361757365206e6f20657870697279290a202020202020202020202020202020202028756e7772617021202867657420756e74696c2d6275726e2d68742063616c6c65722d616c6c6f7765642920747275652929290a202020202020202020203b3b206973207468652063616c6c657220616c6c6f77616e636520657870697265643f0a2020202020202020202028696620283e3d206275726e2d626c6f636b2d68656967687420657870697265732d6174290a202020202020202020202020202066616c73650a202020202020202020202020202074727565292929290a0a28646566696e652d726561642d6f6e6c7920286765742d636865636b2d64656c65676174696f6e2028737461636b6572207072696e636970616c29290a20202020286c657420282864656c65676174696f6e2d696e666f20287472792120286d61702d6765743f2064656c65676174696f6e2d7374617465207b20737461636b65723a20737461636b6572207d292929290a2020202020203b3b2064696420746865206578697374696e672064656c65676174696f6e206578706972653f0a20202020202028696620286d61746368202867657420756e74696c2d6275726e2d68742064656c65676174696f6e2d696e666f290a2020202020202020202020202020202020756e74696c2d6275726e2d687420283e206275726e2d626c6f636b2d68656967687420756e74696c2d6275726e2d6874290a202020202020202020202020202020202066616c7365290a202020202020202020203b3b20697420657870697265642c2072657475726e206e6f6e650a202020202020202020206e6f6e650a202020202020202020203b3b2064656c65676174696f6e206973206163746976650a2020202020202020202028736f6d652064656c65676174696f6e2d696e666f292929290a0a3b3b20476574207468652073697a65206f6620746865207265776172642073657420666f72206120726577617264206379636c652e0a3b3b204e6f74652074686174207468697320646f6573205f6e6f745f2072657475726e206475706c696361746520506f58206164647265737365732e0a3b3b204e6f74652074686174207468697320616c736f205f77696c6c5f2072657475726e20506f58206164647265737365732074686174206172652062656e656174680a3b3b20746865206d696e696d756d207468726573686f6c64202d2d20692e652e20746865207468726573686f6c642063616e20696e63726561736520616674657220696e73657274696f6e2e0a3b3b205573656420696e7465726e616c6c792062792074686520537461636b73206e6f64652c2077686963682066696c74657273206f75742074686520656e74726965730a3b3b20696e2074686973206d617020746f2073656c65637420506f5820616464726573736573207769746820656e6f756768205354582e0a28646566696e652d726561642d6f6e6c7920286765742d7265776172642d7365742d73697a6520287265776172642d6379636c652075696e7429290a202020202864656661756c742d746f0a202020202020202075300a202020202020202028676574206c656e20286d61702d6765743f207265776172642d6379636c652d706f782d616464726573732d6c6973742d6c656e207b207265776172642d6379636c653a207265776172642d6379636c65207d292929290a0a3b3b20486f77206d616e792072656a656374696f6e20766f7465732068617665207765206265656e20616363756d756c6174696e6720666f7220746865206e65787420626c6f636b0a28646566696e652d726561642d6f6e6c7920286e6578742d6379636c652d72656a656374696f6e2d766f746573290a202020202864656661756c742d746f0a202020202020202075300a20202020202020202867657420616d6f756e7420286d61702d6765743f20737461636b696e672d72656a656374696f6e207b207265776172642d6379636c653a20282b207531202863757272656e742d706f782d7265776172642d6379636c652929207d292929290a0a3b3b2041646420612073696e676c6520506f58206164647265737320746f20612073696e676c6520726577617264206379636c652e0a3b3b205573656420746f206275696c64207570206120736574206f66207065722d7265776172642d6379636c6520506f58206164647265737365732e0a3b3b204e6f20636865636b696e672077696c6c20626520646f6e65202d2d20646f6e27742063616c6c206966207468697320506f58206164647265737320697320616c7265616479207265676973746572656420696e207468697320726577617264206379636c65210a3b3b2052657475726e732074686520696e64657820696e746f2074686520726577617264206379636c6520746861742074686520506f5820616464726573732069732073746f72656420746f0a28646566696e652d707269766174652028617070656e642d7265776172642d6379636c652d706f782d616464722028706f782d6164647220287475706c65202876657273696f6e202862756666203129292028686173686279746573202862756666203332292929290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020287265776172642d6379636c652075696e74290a2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028616d6f756e742d757374782075696e74290a2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028737461636b657220286f7074696f6e616c207072696e636970616c2929290a20202020286c6574202828737a20286765742d7265776172642d7365742d73697a65207265776172642d6379636c652929290a2020202020202020286d61702d736574207265776172642d6379636c652d706f782d616464726573732d6c6973740a2020202020202020202020207b207265776172642d6379636c653a207265776172642d6379636c652c20696e6465783a20737a207d0a2020202020202020202020207b20706f782d616464723a20706f782d616464722c20746f74616c2d757374783a20616d6f756e742d757374782c20737461636b65723a20737461636b6572207d290a2020202020202020286d61702d736574207265776172642d6379636c652d706f782d616464726573732d6c6973742d6c656e0a2020202020202020202020207b207265776172642d6379636c653a207265776172642d6379636c65207d0a2020202020202020202020207b206c656e3a20282b20753120737a29207d290a20202020737a29290a0a3b3b20486f77206d616e7920755354582061726520737461636b65643f0a28646566696e652d726561642d6f6e6c7920286765742d746f74616c2d757374782d737461636b656420287265776172642d6379636c652075696e7429290a202020202864656661756c742d746f0a202020202020202075300a20202020202020202867657420746f74616c2d7573747820286d61702d6765743f207265776172642d6379636c652d746f74616c2d737461636b6564207b207265776172642d6379636c653a207265776172642d6379636c65207d2929290a290a0a3b3b2043616c6c656420696e7465726e616c6c7920627920746865206e6f646520746f2069746572617465207468726f75676820746865206c697374206f6620506f582061646472657373657320696e207468697320726577617264206379636c652e0a3b3b2052657475726e7320286f7074696f6e616c20287475706c652028706f782d61646472203c706f782d616464726573733e292028746f74616c2d75737478203c75696e743e2929290a28646566696e652d726561642d6f6e6c7920286765742d7265776172642d7365742d706f782d6164647265737320287265776172642d6379636c652075696e74292028696e6465782075696e7429290a20202020286d61702d6765743f207265776172642d6379636c652d706f782d616464726573732d6c697374207b207265776172642d6379636c653a207265776172642d6379636c652c20696e6465783a20696e646578207d29290a0a28646566696e652d707269766174652028666f6c642d756e6c6f636b2d7265776172642d6379636c6520287365742d696e6465782075696e74290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202028646174612d7265732028726573706f6e7365207b206379636c653a2075696e742c0a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202066697273742d756e6c6f636b65642d6379636c653a2075696e742c0a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020737461636b65723a207072696e636970616c0a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020207d20696e742929290a20202020286c65742028286461746120287472792120646174612d72657329290a20202020202020202020286379636c652028676574206379636c65206461746129290a202020202020202020202866697273742d756e6c6f636b65642d6379636c6520286765742066697273742d756e6c6f636b65642d6379636c6520646174612929290a2020202020202020203b3b2069662063757272656e742d6379636c65206861736e277420726561636865642066697273742d756e6c6f636b65642d6379636c652c206a75737420636f6e74696e756520746f206e65787420697465720a20202020202020202028617373657274732120283e3d206379636c652066697273742d756e6c6f636b65642d6379636c652920286f6b20286d657267652064617461207b206379636c653a20282b207531206379636c6529207d2929290a202020202020202020286c65742028286379636c652d656e7472792028756e777261702d70616e696320286d61702d6765743f207265776172642d6379636c652d706f782d616464726573732d6c697374207b207265776172642d6379636c653a206379636c652c20696e6465783a207365742d696e646578207d2929290a202020202020202020202020202020286379636c652d656e7472792d75202867657420737461636b6572206379636c652d656e74727929290a202020202020202020202020202020286379636c652d656e7472792d746f74616c2d75737478202867657420746f74616c2d75737478206379636c652d656e74727929290a202020202020202020202020202020286379636c652d6c6173742d656e7472792d697820282d2028676574206c656e2028756e777261702d70616e696320286d61702d6765743f207265776172642d6379636c652d706f782d616464726573732d6c6973742d6c656e207b207265776172642d6379636c653a206379636c65207d2929292075312929290a202020202020202020202020286173736572747321202869732d6571206379636c652d656e7472792d752028736f6d65202867657420737461636b657220646174612929292028657272204552525f535441434b494e475f434f525255505445445f535441544529290a20202020202020202020202028696620286e6f74202869732d6571206379636c652d6c6173742d656e7472792d6978207365742d696e64657829290a202020202020202020202020202020203b3b20646f206120226d6f7665222069662074686520656e74727920746f2072656d6f76652069736e2774206c6173740a20202020202020202020202020202020286c65742028286d6f76652d656e7472792028756e777261702d70616e696320286d61702d6765743f207265776172642d6379636c652d706f782d616464726573732d6c697374207b207265776172642d6379636c653a206379636c652c20696e6465783a206379636c652d6c6173742d656e7472792d6978207d292929290a2020202020202020202020202020202020202020286d61702d736574207265776172642d6379636c652d706f782d616464726573732d6c6973740a20202020202020202020202020202020202020202020202020202020207b207265776172642d6379636c653a206379636c652c20696e6465783a207365742d696e646578207d0a20202020202020202020202020202020202020202020202020202020206d6f76652d656e747279290a2020202020202020202020202020202020202020286d61746368202867657420737461636b6572206d6f76652d656e74727929206d6f7665642d737461636b65720a2020202020202020202020202020202020202020203b3b20696620746865206d6f76656420656e7472792068616420616e206173736f63696174656420737461636b65722c20757064617465206974732073746174650a202020202020202020202020202020202020202020286c65742028286d6f7665642d73746174652028756e777261702d70616e696320286d61702d6765743f20737461636b696e672d7374617465207b20737461636b65723a206d6f7665642d737461636b6572207d2929290a2020202020202020202020202020202020202020202020202020203b3b2063616c63756c6174652074686520696e64657820696e746f20746865207265776172642d7365742d696e6465786573207468617420606379636c65602069732061740a202020202020202020202020202020202020202020202020202020286d6f7665642d6379636c652d696e64657820282d206379636c6520286765742066697273742d7265776172642d6379636c65206d6f7665642d73746174652929290a202020202020202020202020202020202020202020202020202020286d6f7665642d7265776172642d6c6973742028676574207265776172642d7365742d696e6465786573206d6f7665642d737461746529290a2020202020202020202020202020202020202020202020202020203b3b207265776172642d7365742d696e64657865735b6d6f7665642d6379636c652d696e6465785d203d207365742d696e6465782076696120736c6963652c20617070656e642c20636f6e6361742e0a202020202020202020202020202020202020202020202020202020287570646174652d6c6973742028756e777261702d70616e696320287265706c6163652d6174206d6f7665642d7265776172642d6c697374206d6f7665642d6379636c652d696e646578207365742d696e646578292929290a2020202020202020202020202020202020202020202020202020286d61702d73657420737461636b696e672d7374617465207b20737461636b65723a206d6f7665642d737461636b6572207d0a2020202020202020202020202020202020202020202020202020202020202020202020286d65726765206d6f7665642d7374617465207b207265776172642d7365742d696e64657865733a207570646174652d6c697374207d2929290a2020202020202020202020202020202020202020203b3b206f74686572776973652c20776520646f6e74206e65656420746f2075706461746520737461636b696e672d7374617465206166746572206d6f76650a2020202020202020202020202020202020202020207472756529290a202020202020202020202020202020203b3b206966206e6f74206d6f76696e672c206a757374206e6f6f700a2020202020202020202020202020202074727565290a2020202020202020202020203b3b20696e20616c6c2063617365732c207765206e6f77206e65656420746f2064656c65746520746865206c617374206c69737420656e7472790a202020202020202020202020286d61702d64656c657465207265776172642d6379636c652d706f782d616464726573732d6c697374207b207265776172642d6379636c653a206379636c652c20696e6465783a206379636c652d6c6173742d656e7472792d6978207d290a202020202020202020202020286d61702d736574207265776172642d6379636c652d706f782d616464726573732d6c6973742d6c656e207b207265776172642d6379636c653a206379636c65207d207b206c656e3a206379636c652d6c6173742d656e7472792d6978207d290a2020202020202020202020203b3b2066696e616c6c792c2075706461746520607265776172642d6379636c652d746f74616c2d737461636b6564600a202020202020202020202020286d61702d736574207265776172642d6379636c652d746f74616c2d737461636b6564207b207265776172642d6379636c653a206379636c65207d0a202020202020202020202020202020207b20746f74616c2d757374783a20282d202867657420746f74616c2d757374782028756e777261702d70616e696320286d61702d6765743f207265776172642d6379636c652d746f74616c2d737461636b6564207b207265776172642d6379636c653a206379636c65207d2929290a2020202020202020202020202020202020202020202020202020202020202020206379636c652d656e7472792d746f74616c2d7573747829207d290a202020202020202020202020286f6b20286d657267652064617461207b206379636c653a20282b207531206379636c65297d2029292929290a0a3b3b2054686973206d6574686f642069732063616c6c65642062792074686520537461636b7320626c6f636b2070726f636573736f72206469726563746c7920696e206f7264657220746f2068616e646c652074686520636f6e7472616374207374617465206d75746174696f6e730a3b3b20206173736f636961746564207769746820616e206561726c7920756e6c6f636b2e20546869732063616e206f6e6c7920626520696e766f6b65642062792074686520626c6f636b2070726f636573736f723a20697420697320707269766174652c20616e64206e6f206d6574686f64730a3b3b202066726f6d207468697320636f6e747261637420696e766f6b652069742e0a28646566696e652d70726976617465202868616e646c652d756e6c6f636b202875736572207072696e636970616c292028616d6f756e742d6c6f636b65642075696e742920286379636c652d746f2d756e6c6f636b2075696e7429290a20202020286c6574202828757365722d737461636b696e672d73746174652028756e777261702d70616e696320286d61702d6765743f20737461636b696e672d7374617465207b20737461636b65723a2075736572207d2929290a202020202020202020202866697273742d6379636c652d6c6f636b656420286765742066697273742d7265776172642d6379636c6520757365722d737461636b696e672d737461746529290a20202020202020202020287265776172642d7365742d696e64657865732028676574207265776172642d7365742d696e646578657320757365722d737461636b696e672d73746174652929290a20202020202020203b3b2069746572617465206f766572206561636820726577617264207365742074686520757365722069732061206d656d626572206f662c20616e642072656d6f7665207468656d2066726f6d2074686520736574732e206f6e6c79206170706c7920746f207265776172642073657473206166746572206379636c652d746f2d756e6c6f636b2e0a202020202020202028747279212028666f6c6420666f6c642d756e6c6f636b2d7265776172642d6379636c65207265776172642d7365742d696e646578657320286f6b207b206379636c653a2066697273742d6379636c652d6c6f636b65642c2066697273742d756e6c6f636b65642d6379636c653a206379636c652d746f2d756e6c6f636b2c20737461636b65723a2075736572207d2929290a20202020202020203b3b204e6f77207468617420776527766520636c65616e656420757020616c6c20746865207265776172642073657420656e747269657320666f722074686520757365722c2064656c657465207468652075736572277320737461636b696e672d73746174650a2020202020202020286d61702d64656c65746520737461636b696e672d7374617465207b20737461636b65723a2075736572207d290a2020202020202020286f6b20747275652929290a0a3b3b20416464206120506f58206164647265737320746f2074686520606379636c652d696e646578602d746820726577617264206379636c652c20696620606379636c652d696e64657860206973206265747765656e203020616e642074686520676976656e206e756d2d6379636c657320286578636c7573697665292e0a3b3b20417267756d656e74732061726520676976656e2061732061207475706c652c20736f20746869732066756e6374696f6e2063616e2062652028666f6c646564202e2e29276564206f6e746f2061206c697374206f662069747320617267756d656e74732e0a3b3b2055736564206279206164642d706f782d616464722d746f2d7265776172642d6379636c65732e0a3b3b204e6f20636865636b696e6720697320646f6e652e0a3b3b205468652072657475726e6564207475706c65206973207468652073616d6520617320696e7075747465642060706172616d73602c206275742074686520606960206669656c6420697320696e6372656d656e7465642069660a3b3b202074686520706f782d616464722077617320616464656420746f2074686520676976656e206379636c652e200a28646566696e652d7072697661746520286164642d706f782d616464722d746f2d6974682d7265776172642d6379636c6520286379636c652d696e6465782075696e74292028706172616d7320287475706c65200a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028706f782d6164647220287475706c65202876657273696f6e202862756666203129292028686173686279746573202862756666203332292929290a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020287265776172642d7365742d696e646578657320286c6973742031322075696e7429290a2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202866697273742d7265776172642d6379636c652075696e74290a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020286e756d2d6379636c65732075696e74290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028737461636b657220286f7074696f6e616c207072696e636970616c29290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028616d6f756e742d757374782075696e74290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028692075696e74292929290a20202020286c65742028287265776172642d6379636c6520282b20286765742066697273742d7265776172642d6379636c6520706172616d73292028676574206920706172616d732929290a20202020202020202020286e756d2d6379636c65732028676574206e756d2d6379636c657320706172616d7329290a2020202020202020202028692028676574206920706172616d7329290a20202020202020202020287265776172642d7365742d696e6465782028696620283c2069206e756d2d6379636c6573290a202020202020202020202020286c6574202828746f74616c2d7573747820286765742d746f74616c2d757374782d737461636b6564207265776172642d6379636c6529290a202020202020202020202020202020202020287265776172642d696e6465780a202020202020202020202020202020202020202020203b3b207265636f726420686f77206d616e792075535458207468697320706f782d616464722077696c6c20737461636b20666f7220696e2074686520676976656e20726577617264206379636c650a2020202020202020202020202020202020202020202028617070656e642d7265776172642d6379636c652d706f782d616464720a2020202020202020202020202020202020202020202020202867657420706f782d6164647220706172616d73290a2020202020202020202020202020202020202020202020207265776172642d6379636c650a2020202020202020202020202020202020202020202020202867657420616d6f756e742d7573747820706172616d73290a2020202020202020202020202020202020202020202020202867657420737461636b657220706172616d73290a2020202020202020202020202020202020202020202020202929290a2020202020202020202020202020202020203b3b207570646174652072756e6e696e6720746f74616c0a202020202020202020202020202020202020286d61702d736574207265776172642d6379636c652d746f74616c2d737461636b65640a2020202020202020202020202020202020202020207b207265776172642d6379636c653a207265776172642d6379636c65207d0a2020202020202020202020202020202020202020207b20746f74616c2d757374783a20282b202867657420616d6f756e742d7573747820706172616d732920746f74616c2d7573747829207d290a20202020202020202020202020202020202028736f6d65207265776172642d696e64657829290a2020202020202020202020206e6f6e6529290a20202020202020202020286e6578742d692028696620283c2069206e756d2d6379636c65732920282b20692075312920692929290a202020207b0a2020202020202020706f782d616464723a202867657420706f782d6164647220706172616d73292c0a202020202020202066697273742d7265776172642d6379636c653a20286765742066697273742d7265776172642d6379636c6520706172616d73292c0a20202020202020206e756d2d6379636c65733a206e756d2d6379636c65732c0a2020202020202020616d6f756e742d757374783a202867657420616d6f756e742d7573747820706172616d73292c0a2020202020202020737461636b65723a202867657420737461636b657220706172616d73292c0a20202020202020207265776172642d7365742d696e64657865733a20286d61746368200a2020202020202020202020207265776172642d7365742d696e646578206e65772028756e777261702d70616e6963202861732d6d61782d6c656e3f2028617070656e642028676574207265776172642d7365742d696e646578657320706172616d7329206e6577292075313229290a20202020202020202020202028676574207265776172642d7365742d696e646578657320706172616d7329292c0a2020202020202020693a206e6578742d690a202020207d29290a0a3b3b20416464206120506f58206164647265737320746f206120676976656e2073657175656e6365206f6620726577617264206379636c65206c697374732e0a3b3b204120506f5820616464726573732063616e20626520616464656420746f206174206d6f737420313220636f6e7365637574697665206379636c65732e0a3b3b204e6f20636865636b696e6720697320646f6e652e0a28646566696e652d7072697661746520286164642d706f782d616464722d746f2d7265776172642d6379636c65732028706f782d6164647220287475706c65202876657273696f6e202862756666203129292028686173686279746573202862756666203332292929290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202866697273742d7265776172642d6379636c652075696e74290a2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020286e756d2d6379636c65732075696e74290a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028616d6f756e742d757374782075696e74290a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028737461636b6572207072696e636970616c29290a2020286c65742028286379636c652d696e646578657320286c697374207530207531207532207533207534207535207536207537207538207539207531302075313129290a202020202020202028726573756c74732028666f6c64206164642d706f782d616464722d746f2d6974682d7265776172642d6379636c65206379636c652d696e6465786573200a202020202020202020202020202020202020202020202020207b20706f782d616464723a20706f782d616464722c2066697273742d7265776172642d6379636c653a2066697273742d7265776172642d6379636c652c206e756d2d6379636c65733a206e756d2d6379636c65732c200a2020202020202020202020202020202020202020202020202020207265776172642d7365742d696e64657865733a20286c697374292c20616d6f756e742d757374783a20616d6f756e742d757374782c20693a2075302c20737461636b65723a2028736f6d6520737461636b657229207d29290a2020202020202020287265776172642d7365742d696e64657865732028676574207265776172642d7365742d696e646578657320726573756c74732929290a202020203b3b20466f72207361666574792c2061646420757020746865206e756d626572206f662074696d657320286164642d7072696e636970616c2d746f2d6974682d7265776172642d6379636c65292072657475726e7320312e0a202020203b3b204974205f73686f756c645f20626520657175616c20746f206e756d2d6379636c65732e0a20202020286173736572747321202869732d6571206e756d2d6379636c65732028676574206920726573756c747329292028657272204552525f535441434b494e475f554e524541434841424c4529290a20202020286173736572747321202869732d6571206e756d2d6379636c657320286c656e207265776172642d7365742d696e646578657329292028657272204552525f535441434b494e475f554e524541434841424c4529290a20202020286f6b207265776172642d7365742d696e64657865732929290a0a28646566696e652d7072697661746520286164642d706f782d7061727469616c2d737461636b65642d746f2d6974682d6379636c650a2020202020202020202020202020202020286379636c652d696e6465782075696e74290a202020202020202020202020202020202028706172616d73207b20706f782d616464723a207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d2c0a2020202020202020202020202020202020202020202020202020207265776172642d6379636c653a2075696e742c0a2020202020202020202020202020202020202020202020202020206e756d2d6379636c65733a2075696e742c0a202020202020202020202020202020202020202020202020202020616d6f756e742d757374783a2075696e74207d29290a2020286c6574202828706f782d6164647220202020202867657420706f782d616464722020202020706172616d7329290a2020202020202020286e756d2d6379636c657320202028676574206e756d2d6379636c6573202020706172616d7329290a2020202020202020287265776172642d6379636c652028676574207265776172642d6379636c6520706172616d7329290a202020202020202028616d6f756e742d7573747820202867657420616d6f756e742d757374782020706172616d732929290a20202020286c657420282863757272656e742d616d6f756e740a20202020202020202020202864656661756c742d746f2075300a202020202020202020202020202867657420737461636b65642d616d6f756e740a202020202020202020202020202020202020286d61702d6765743f207061727469616c2d737461636b65642d62792d6379636c65207b2073656e6465723a2074782d73656e6465722c20706f782d616464723a20706f782d616464722c207265776172642d6379636c653a207265776172642d6379636c65207d29292929290a20202020202028696620283e3d206379636c652d696e646578206e756d2d6379636c6573290a202020202020202020203b3b20646f206e6f742061646420746f206379636c6573203e3d206379636c652d696e6465780a2020202020202020202066616c73650a202020202020202020203b3b206f74686572776973652c2061646420746f20746865207061727469616c2d737461636b65642d62792d6379636c650a20202020202020202020286d61702d736574207061727469616c2d737461636b65642d62792d6379636c650a202020202020202020202020202020202020207b2073656e6465723a2074782d73656e6465722c20706f782d616464723a20706f782d616464722c207265776172642d6379636c653a207265776172642d6379636c65207d0a202020202020202020202020202020202020207b20737461636b65642d616d6f756e743a20282b20616d6f756e742d757374782063757272656e742d616d6f756e7429207d29290a2020202020203b3b2070726f6475636520746865206e65787420706172616d73207475706c650a2020202020207b20706f782d616464723a20706f782d616464722c0a20202020202020207265776172642d6379636c653a20282b207531207265776172642d6379636c65292c0a20202020202020206e756d2d6379636c65733a206e756d2d6379636c65732c0a2020202020202020616d6f756e742d757374783a20616d6f756e742d75737478207d2929290a0a3b3b20416464206120506f58206164647265737320746f206120676976656e2073657175656e6365206f66207061727469616c20726577617264206379636c65206c697374732e0a3b3b204120506f5820616464726573732063616e20626520616464656420746f206174206d6f737420313220636f6e7365637574697665206379636c65732e0a3b3b204e6f20636865636b696e6720697320646f6e652e0a28646566696e652d7072697661746520286164642d706f782d7061727469616c2d737461636b65642028706f782d6164647220287475706c65202876657273696f6e202862756666203129292028686173686279746573202862756666203332292929290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202866697273742d7265776172642d6379636c652075696e74290a2020202020202020202020202020202020202020202020202020202020202020202020202020202020286e756d2d6379636c65732075696e74290a202020202020202020202020202020202020202020202020202020202020202020202020202020202028616d6f756e742d757374782075696e7429290a2020286c65742028286379636c652d696e646578657320286c69737420753020753120753220753320753420753520753620753720753820753920753130207531312929290a2020202028666f6c64206164642d706f782d7061727469616c2d737461636b65642d746f2d6974682d6379636c65206379636c652d696e6465786573200a202020202020202020207b20706f782d616464723a20706f782d616464722c207265776172642d6379636c653a2066697273742d7265776172642d6379636c652c206e756d2d6379636c65733a206e756d2d6379636c65732c20616d6f756e742d757374783a20616d6f756e742d75737478207d290a202020207472756529290a0a3b3b205768617420697320746865206d696e696d756d206e756d626572206f66207553545820746f20626520737461636b656420696e2074686520676976656e20726577617264206379636c653f0a3b3b205573656420696e7465726e616c6c792062792074686520537461636b73206e6f64652c20616e642076697369626c65207075626c69636c792e0a28646566696e652d726561642d6f6e6c7920286765742d737461636b696e672d6d696e696d756d290a20202020282f207374782d6c69717569642d737570706c7920535441434b494e475f5448524553484f4c445f323529290a0a3b3b204973207468652061646472657373206d6f64652076616c696420666f72206120506f5820616464726573733f0a28646566696e652d726561642d6f6e6c792028636865636b2d706f782d616464722d76657273696f6e202876657273696f6e20286275666620312929290a20202020283c3d2028627566662d746f2d75696e742d62652076657273696f6e29204d41585f414444524553535f56455253494f4e29290a0a3b3b20497320746869732062756666657220746865207269676874206c656e67746820666f722074686520676976656e20506f5820616464726573733f0a28646566696e652d726561642d6f6e6c792028636865636b2d706f782d616464722d686173686279746573202876657273696f6e2028627566662031292920286861736862797465732028627566662033322929290a2020202028696620283c3d2028627566662d746f2d75696e742d62652076657273696f6e29204d41585f414444524553535f56455253494f4e5f425546465f3230290a20202020202020202869732d657120286c656e206861736862797465732920753230290a202020202020202028696620283c3d2028627566662d746f2d75696e742d62652076657273696f6e29204d41585f414444524553535f56455253494f4e5f425546465f3332290a2020202020202020202020202869732d657120286c656e206861736862797465732920753332290a20202020202020202020202066616c73652929290a0a3b3b2049732074686520676976656e206c6f636b20706572696f642076616c69643f0a28646566696e652d726561642d6f6e6c792028636865636b2d706f782d6c6f636b2d706572696f6420286c6f636b2d706572696f642075696e742929200a2020202028616e6420283e3d206c6f636b2d706572696f64204d494e5f504f585f5245574152445f4359434c455329200a202020202020202020283c3d206c6f636b2d706572696f64204d41585f504f585f5245574152445f4359434c45532929290a0a3b3b204576616c756174652069662061207061727469636970616e742063616e20737461636b20616e20616d6f756e74206f662053545820666f72206120676976656e20706572696f642e0a3b3b2054686973206d6574686f642069732064657369676e6564206173206120726561642d6f6e6c79206d6574686f6420736f20746861742069742063616e2062652075736564206173200a3b3b206120736574206f6620677561726420636f6e646974696f6e7320616e6420616c736f206173206120726561642d6f6e6c79205250432063616c6c20746861742063616e2062650a3b3b20706572666f726d6564206265666f726568616e642e0a28646566696e652d726561642d6f6e6c79202863616e2d737461636b2d7374782028706f782d6164647220287475706c65202876657273696f6e202862756666203129292028686173686279746573202862756666203332292929290a2020202020202020202020202020202020202020202020202020202020202020202028616d6f756e742d757374782075696e74290a202020202020202020202020202020202020202020202020202020202020202020202866697273742d7265776172642d6379636c652075696e74290a20202020202020202020202020202020202020202020202020202020202020202020286e756d2d6379636c65732075696e7429290a202028626567696e0a202020203b3b206d696e696d756d2075535458206d757374206265206d65740a2020202028617373657274732120283c3d20286765742d737461636b696e672d6d696e696d756d2920616d6f756e742d75737478290a202020202020202020202020202028657272204552525f535441434b494e475f5448524553484f4c445f4e4f545f4d455429290a0a20202020286d696e696d616c2d63616e2d737461636b2d73747820706f782d6164647220616d6f756e742d757374782066697273742d7265776172642d6379636c65206e756d2d6379636c65732929290a0a3b3b204576616c756174652069662061207061727469636970616e742063616e20737461636b20616e20616d6f756e74206f662053545820666f72206120676976656e20706572696f642e0a3b3b2054686973206d6574686f642069732064657369676e6564206173206120726561642d6f6e6c79206d6574686f6420736f20746861742069742063616e2062652075736564206173200a3b3b206120736574206f6620677561726420636f6e646974696f6e7320616e6420616c736f206173206120726561642d6f6e6c79205250432063616c6c20746861742063616e2062650a3b3b20706572666f726d6564206265666f726568616e642e0a28646566696e652d726561642d6f6e6c7920286d696e696d616c2d63616e2d737461636b2d737478200a2020202020202020202020202020202020202028706f782d6164647220287475706c65202876657273696f6e202862756666203129292028686173686279746573202862756666203332292929290a2020202020202020202020202020202020202028616d6f756e742d757374782075696e74290a202020202020202020202020202020202020202866697273742d7265776172642d6379636c652075696e74290a20202020202020202020202020202020202020286e756d2d6379636c65732075696e7429290a202028626567696e0a202020203b3b20616d6f756e74206d7573742062652076616c69640a2020202028617373657274732120283e20616d6f756e742d75737478207530290a202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f414d4f554e5429290a0a202020203b3b2073656e646572207072696e636970616c206d757374206e6f7420686176652072656a656374656420696e2074686973207570636f6d696e6720726577617264206379636c650a20202020286173736572747321202869732d6e6f6e6520286765742d706f782d72656a656374696f6e2074782d73656e6465722066697273742d7265776172642d6379636c6529290a202020202020202020202020202028657272204552525f535441434b494e475f414c52454144595f52454a454354454429290a0a202020203b3b206c6f636b20706572696f64206d75737420626520696e2061636365707461626c652072616e67652e0a202020202861737365727473212028636865636b2d706f782d6c6f636b2d706572696f64206e756d2d6379636c6573290a202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f4429290a0a202020203b3b20616464726573732076657273696f6e206d7573742062652076616c69640a202020202861737365727473212028636865636b2d706f782d616464722d76657273696f6e20286765742076657273696f6e20706f782d6164647229290a202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f504f585f4144445245535329290a0a202020203b3b206164647265737320686173686279746573206d7573742062652076616c696420666f72207468652076657273696f6e0a202020202861737365727473212028636865636b2d706f782d616464722d68617368627974657320286765742076657273696f6e20706f782d616464722920286765742068617368627974657320706f782d6164647229290a202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f504f585f4144445245535329290a0a20202020286f6b20747275652929290a0a3b3b205265766f6b6520636f6e74726163742d63616c6c657220617574686f72697a6174696f6e20746f2063616c6c20737461636b696e67206d6574686f64730a28646566696e652d7075626c69632028646973616c6c6f772d636f6e74726163742d63616c6c6572202863616c6c6572207072696e636970616c29290a202028626567696e200a20202020286173736572747321202869732d65712074782d73656e64657220636f6e74726163742d63616c6c6572290a202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a20202020286f6b20286d61702d64656c65746520616c6c6f77616e63652d636f6e74726163742d63616c6c657273207b2073656e6465723a2074782d73656e6465722c20636f6e74726163742d63616c6c65723a2063616c6c6572207d292929290a0a3b3b2047697665206120636f6e74726163742d63616c6c657220617574686f72697a6174696f6e20746f2063616c6c20737461636b696e67206d6574686f64730a3b3b20206e6f726d616c6c792c20737461636b696e67206d6574686f6473206d6179206f6e6c7920626520696e766f6b6564206279205f6469726563745f207472616e73616374696f6e730a3b3b20202028692e652e2c207468652074782d73656e6465722069737375657320612064697265637420636f6e74726163742d63616c6c20746f2074686520737461636b696e67206d6574686f6473290a3b3b202062792069737375696e6720616e20616c6c6f77616e63652c207468652074782d73656e646572206d61792063616c6c207468726f7567682074686520616c6c6f77656420636f6e74726163740a28646566696e652d7075626c69632028616c6c6f772d636f6e74726163742d63616c6c6572202863616c6c6572207072696e636970616c292028756e74696c2d6275726e2d687420286f7074696f6e616c2075696e742929290a202028626567696e0a20202020286173736572747321202869732d65712074782d73656e64657220636f6e74726163742d63616c6c6572290a202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a20202020286f6b20286d61702d73657420616c6c6f77616e63652d636f6e74726163742d63616c6c6572730a2020202020202020202020202020207b2073656e6465723a2074782d73656e6465722c20636f6e74726163742d63616c6c65723a2063616c6c6572207d0a2020202020202020202020202020207b20756e74696c2d6275726e2d68743a20756e74696c2d6275726e2d6874207d292929290a0a3b3b204c6f636b20757020736f6d65207553545820666f7220737461636b696e672120204e6f746520746861742074686520676976656e20616d6f756e74206865726520697320696e206d6963726f2d535458202875535458292e0a3b3b20546865205354582077696c6c206265206c6f636b656420666f722074686520676976656e206e756d626572206f6620726577617264206379636c657320286c6f636b2d706572696f64292e0a3b3b2054686973206973207468652073656c662d7365727669636520696e746572666163652e202074782d73656e6465722077696c6c2062652074686520537461636b65722e0a3b3b0a3b3b202a2054686520676976656e20737461636b65722063616e6e6f742063757272656e746c7920626520737461636b696e672e0a3b3b202a20596f752077696c6c206e65656420746865206d696e696d756d2075535458207468726573686f6c642e2020546869732077696c6c2062652064657465726d696e656420627920286765742d737461636b696e672d6d696e696d756d290a3b3b206174207468652074696d652074686973206d6574686f642069732063616c6c65642e0a3b3b202a20596f75206d6179206e65656420746f20696e6372656173652074686520616d6f756e74206f662075535458206c6f636b6564207570206c617465722c2073696e636520746865206d696e696d756d2075535458207468726573686f6c640a3b3b206d617920696e637265617365206265747765656e20726577617264206379636c65732e0a3b3b202a2054686520537461636b65722077696c6c2072656365697665207265776172647320696e2074686520726577617264206379636c6520666f6c6c6f77696e67206073746172742d6275726e2d6874602e0a3b3b20496d706f7274616e746c792c206073746172742d6275726e2d687460206d6179206e6f74206265206675727468657220696e746f2074686520667574757265207468616e20746865206e65787420726577617264206379636c652c0a3b3b20616e6420696e206d6f73742063617365732073686f756c642062652073657420746f207468652063757272656e74206275726e20626c6f636b206865696768742e0a3b3b0a3b3b2054686520746f6b656e732077696c6c20756e6c6f636b20616e642062652072657475726e656420746f2074686520537461636b6572202874782d73656e64657229206175746f6d61746963616c6c792e0a28646566696e652d7075626c69632028737461636b2d7374782028616d6f756e742d757374782075696e74290a202020202020202020202020202020202020202020202020202028706f782d6164647220287475706c65202876657273696f6e202862756666203129292028686173686279746573202862756666203332292929290a20202020202020202020202020202020202020202020202020202873746172742d6275726e2d68742075696e74290a2020202020202020202020202020202020202020202020202020286c6f636b2d706572696f642075696e7429290a202020203b3b207468697320737461636b6572277320666972737420726577617264206379636c6520697320746865205f6e6578745f20726577617264206379636c650a20202020286c657420282866697273742d7265776172642d6379636c6520282b207531202863757272656e742d706f782d7265776172642d6379636c652929290a20202020202020202020287370656369666965642d7265776172642d6379636c6520282b20753120286275726e2d6865696768742d746f2d7265776172642d6379636c652073746172742d6275726e2d6874292929290a2020202020203b3b207468652073746172742d6275726e2d6874206d75737420726573756c7420696e20746865206e65787420726577617264206379636c652c20646f206e6f7420616c6c6f7720737461636b6572730a2020202020203b3b2020746f2022706f73742d64617465222074686569722060737461636b2d73747860207472616e73616374696f6e0a202020202020286173736572747321202869732d65712066697273742d7265776172642d6379636c65207370656369666965642d7265776172642d6379636c65290a2020202020202020202020202020202028657272204552525f494e56414c49445f53544152545f4255524e5f48454947485429290a0a2020202020203b3b206d7573742062652063616c6c6564206469726563746c79206279207468652074782d73656e646572206f7220627920616e20616c6c6f77656420636f6e74726163742d63616c6c65720a2020202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a2020202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a0a2020202020203b3b2074782d73656e646572207072696e636970616c206d757374206e6f7420626520737461636b696e670a202020202020286173736572747321202869732d6e6f6e6520286765742d737461636b65722d696e666f2074782d73656e64657229290a202020202020202028657272204552525f535441434b494e475f414c52454144595f535441434b454429290a0a2020202020203b3b2074782d73656e646572206d757374206e6f742062652064656c65676174696e670a202020202020286173736572747321202869732d6e6f6e6520286765742d636865636b2d64656c65676174696f6e2074782d73656e64657229290a202020202020202028657272204552525f535441434b494e475f414c52454144595f44454c45474154454429290a0a2020202020203b3b2074686520537461636b6572206d75737420686176652073756666696369656e7420756e6c6f636b65642066756e64730a20202020202028617373657274732120283e3d20287374782d6765742d62616c616e63652074782d73656e6465722920616d6f756e742d75737478290a202020202020202028657272204552525f535441434b494e475f494e53554646494349454e545f46554e445329290a0a2020202020203b3b20656e73757265207468617420737461636b696e672063616e20626520706572666f726d65640a2020202020202874727921202863616e2d737461636b2d73747820706f782d6164647220616d6f756e742d757374782066697273742d7265776172642d6379636c65206c6f636b2d706572696f6429290a0a2020202020203b3b2072656769737465722074686520506f58206164647265737320776974682074686520616d6f756e7420737461636b65640a202020202020286c65742028287265776172642d7365742d696e646578657320287472792120286164642d706f782d616464722d746f2d7265776172642d6379636c657320706f782d616464722066697273742d7265776172642d6379636c65206c6f636b2d706572696f6420616d6f756e742d757374782074782d73656e646572292929290a202020202020202020203b3b2061646420737461636b6572207265636f72640a202020202020202020286d61702d73657420737461636b696e672d73746174650a20202020202020202020207b20737461636b65723a2074782d73656e646572207d0a20202020202020202020207b20706f782d616464723a20706f782d616464722c0a202020202020202020202020207265776172642d7365742d696e64657865733a207265776172642d7365742d696e64657865732c0a2020202020202020202020202066697273742d7265776172642d6379636c653a2066697273742d7265776172642d6379636c652c0a202020202020202020202020206c6f636b2d706572696f643a206c6f636b2d706572696f64207d290a0a202020202020202020203b3b2072657475726e20746865206c6f636b2d757020696e666f726d6174696f6e2c20736f20746865206e6f64652063616e2061637475616c6c79206361727279206f757420746865206c6f636b2e200a20202020202020202020286f6b207b20737461636b65723a2074782d73656e6465722c206c6f636b2d616d6f756e743a20616d6f756e742d757374782c20756e6c6f636b2d6275726e2d6865696768743a20287265776172642d6379636c652d746f2d6275726e2d68656967687420282b2066697273742d7265776172642d6379636c65206c6f636b2d706572696f642929207d292929290a0a28646566696e652d7075626c696320287265766f6b652d64656c65676174652d737478290a202028626567696e0a202020203b3b206d7573742062652063616c6c6564206469726563746c79206279207468652074782d73656e646572206f7220627920616e20616c6c6f77656420636f6e74726163742d63616c6c65720a202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a20202020286f6b20286d61702d64656c6574652064656c65676174696f6e2d7374617465207b20737461636b65723a2074782d73656e646572207d292929290a0a3b3b2044656c656761746520746f206064656c65676174652d746f6020746865206162696c69747920746f20737461636b2066726f6d206120676976656e20616464726573732e0a3b3b202054686973206d6574686f64205f646f6573206e6f745f206c6f636b207468652066756e64732c207261746865722c20697420616c6c6f7773207468652064656c65676174650a3b3b2020746f2069737375652074686520737461636b696e67206c6f636b2e0a3b3b205468652063616c6c6572207370656369666965733a0a3b3b2020202a20616d6f756e742d757374783a2074686520746f74616c20616d6f756e74206f662075737478207468652064656c6567617465206d617920626520616c6c6f77656420746f206c6f636b0a3b3b2020202a20756e74696c2d6275726e2d68743a20616e206f7074696f6e616c206275726e2068656967687420617420776869636820746869732064656c65676174696f6e2065787069726174696f6e0a3b3b2020202a20706f782d616464723a20616e206f7074696f6e616c206164647265737320746f20776869636820616e792072657761726473202a6d7573742a2062652073656e740a28646566696e652d7075626c6963202864656c65676174652d7374782028616d6f756e742d757374782075696e74290a20202020202020202020202020202020202020202020202020202020202864656c65676174652d746f207072696e636970616c290a202020202020202020202020202020202020202020202020202020202028756e74696c2d6275726e2d687420286f7074696f6e616c2075696e7429290a202020202020202020202020202020202020202020202020202020202028706f782d6164647220286f7074696f6e616c207b2076657273696f6e3a2028627566662031292c0a2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020206861736862797465733a20286275666620333229207d2929290a2020202028626567696e0a2020202020203b3b206d7573742062652063616c6c6564206469726563746c79206279207468652074782d73656e646572206f7220627920616e20616c6c6f77656420636f6e74726163742d63616c6c65720a2020202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a2020202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a0a2020202020203b3b2064656c65676174652d737478206e6f206c6f6e676572207265717569726573207468652064656c656761746f7220746f206e6f742063757272656e746c790a2020202020203b3b2020626520737461636b696e672e0a0a2020202020203b3b20706f782d616464722c20696620676976656e2c206d7573742062652076616c69640a202020202020286d6174636820706f782d616464720a202020202020202020616464726573730a2020202020202020202020202861737365727473212028636865636b2d706f782d616464722d76657273696f6e20286765742076657273696f6e206164647265737329290a2020202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f504f585f4144445245535329290a20202020202020202074727565290a0a2020202020203b3b2074782d73656e646572206d757374206e6f742062652064656c65676174696e670a202020202020286173736572747321202869732d6e6f6e6520286765742d636865636b2d64656c65676174696f6e2074782d73656e64657229290a202020202020202028657272204552525f535441434b494e475f414c52454144595f44454c45474154454429290a0a2020202020203b3b206164642064656c65676174696f6e207265636f72640a202020202020286d61702d7365742064656c65676174696f6e2d73746174650a20202020202020207b20737461636b65723a2074782d73656e646572207d0a20202020202020207b20616d6f756e742d757374783a20616d6f756e742d757374782c0a2020202020202020202064656c6567617465642d746f3a2064656c65676174652d746f2c0a20202020202020202020756e74696c2d6275726e2d68743a20756e74696c2d6275726e2d68742c0a20202020202020202020706f782d616464723a20706f782d61646472207d290a0a202020202020286f6b20747275652929290a0a3b3b20436f6d6d6974207061727469616c6c7920737461636b6564205354582e0a3b3b2020205468697320616c6c6f7773206120737461636b65722f64656c656761746520746f206c6f636b20666577657220535458207468616e20746865206d696e696d616c207468726573686f6c6420696e206d756c7469706c65207472616e73616374696f6e732c0a3b3b202020736f206c6f6e672061733a20312e2054686520706f782d61646472206973207468652073616d652e0a3b3b202020202020202020202020202020322e20546869732022636f6d6d697422207472616e73616374696f6e2069732063616c6c6564205f6265666f72655f2074686520506f5820616e63686f7220626c6f636b2e0a3b3b2020205468697320656e73757265732074686174206561636820656e74727920696e2074686520726577617264207365742072657475726e656420746f2074686520737461636b732d6e6f64652069732067726561746572207468616e20746865207468726573686f6c642c0a3b3b20202062757420646f6573206e6f74207265717569726520697420626520616c6c206c6f636b65642075702077697468696e20612073696e676c65207472616e73616374696f6e0a28646566696e652d7075626c69632028737461636b2d6167677265676174696f6e2d636f6d6d69742028706f782d61646472207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d290a2020202020202020202020202020202020202020202020202020202020202020202020202020202020287265776172642d6379636c652075696e7429290a2020286c65742028287061727469616c2d737461636b65640a2020202020202020203b3b20666574636820746865207061727469616c20636f6d6d69746d656e74730a20202020202020202028756e777261702120286d61702d6765743f207061727469616c2d737461636b65642d62792d6379636c65207b20706f782d616464723a20706f782d616464722c2073656e6465723a2074782d73656e6465722c207265776172642d6379636c653a207265776172642d6379636c65207d290a20202020202020202020202020202020202028657272204552525f535441434b494e475f4e4f5f535543485f5052494e434950414c292929290a202020203b3b206d7573742062652063616c6c6564206469726563746c79206279207468652074782d73656e646572206f7220627920616e20616c6c6f77656420636f6e74726163742d63616c6c65720a202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a20202020286c6574202828616d6f756e742d75737478202867657420737461636b65642d616d6f756e74207061727469616c2d737461636b65642929290a2020202020202874727921202863616e2d737461636b2d73747820706f782d6164647220616d6f756e742d75737478207265776172642d6379636c6520753129290a2020202020203b3b206164642074686520706f78206164647220746f2074686520726577617264206379636c650a202020202020286164642d706f782d616464722d746f2d6974682d7265776172642d6379636c650a2020202020202075300a202020202020207b20706f782d616464723a20706f782d616464722c0a20202020202020202066697273742d7265776172642d6379636c653a207265776172642d6379636c652c0a2020202020202020206e756d2d6379636c65733a2075312c0a2020202020202020207265776172642d7365742d696e64657865733a20286c697374292c0a202020202020202020737461636b65723a206e6f6e652c0a202020202020202020616d6f756e742d757374783a20616d6f756e742d757374782c0a202020202020202020693a207530207d290a2020202020203b3b20646f6e2774207570646174652074686520737461636b696e672d7374617465206d61702c0a2020202020203b3b202062656361757365206974205f616c7265616479206861735f207468697320737461636b657227732073746174650a2020202020203b3b20646f6e2774206c6f636b20746865205354582c2062656361757365207468652053545820697320616c7265616479206c6f636b65640a2020202020203b3b0a2020202020203b3b20636c65617220746865207061727469616c2d737461636b65642073746174650a202020202020286d61702d64656c657465207061727469616c2d737461636b65642d62792d6379636c65207b20706f782d616464723a20706f782d616464722c2073656e6465723a2074782d73656e6465722c207265776172642d6379636c653a207265776172642d6379636c65207d290a202020202020286f6b2074727565292929290a0a3b3b20417320612064656c65676174652c20737461636b2074686520676976656e207072696e636970616c277320535458207573696e67207061727469616c2d737461636b65642d62792d6379636c650a3b3b204f6e6365207468652064656c65676174652068617320737461636b6564203e206d696e696d756d2c207468652064656c65676174652073686f756c642063616c6c20737461636b2d6167677265676174696f6e2d636f6d6d69740a28646566696e652d7075626c6963202864656c65676174652d737461636b2d7374782028737461636b6572207072696e636970616c290a202020202020202020202020202020202020202020202020202020202020202020202028616d6f756e742d757374782075696e74290a202020202020202020202020202020202020202020202020202020202020202020202028706f782d61646472207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d290a20202020202020202020202020202020202020202020202020202020202020202020202873746172742d6275726e2d68742075696e74290a2020202020202020202020202020202020202020202020202020202020202020202020286c6f636b2d706572696f642075696e7429290a202020203b3b207468697320737461636b6572277320666972737420726577617264206379636c6520697320746865205f6e6578745f20726577617264206379636c650a20202020286c657420282866697273742d7265776172642d6379636c6520282b207531202863757272656e742d706f782d7265776172642d6379636c652929290a20202020202020202020287370656369666965642d7265776172642d6379636c6520282b20753120286275726e2d6865696768742d746f2d7265776172642d6379636c652073746172742d6275726e2d68742929290a2020202020202020202028756e6c6f636b2d6275726e2d68656967687420287265776172642d6379636c652d746f2d6275726e2d68656967687420282b202863757272656e742d706f782d7265776172642d6379636c6529207531206c6f636b2d706572696f64292929290a2020202020203b3b207468652073746172742d6275726e2d6874206d75737420726573756c7420696e20746865206e65787420726577617264206379636c652c20646f206e6f7420616c6c6f7720737461636b6572730a2020202020203b3b2020746f2022706f73742d64617465222074686569722060737461636b2d73747860207472616e73616374696f6e0a202020202020286173736572747321202869732d65712066697273742d7265776172642d6379636c65207370656369666965642d7265776172642d6379636c65290a2020202020202020202020202020202028657272204552525f494e56414c49445f53544152545f4255524e5f48454947485429290a0a2020202020203b3b206d7573742062652063616c6c6564206469726563746c79206279207468652074782d73656e646572206f7220627920616e20616c6c6f77656420636f6e74726163742d63616c6c65720a2020202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a0a2020202020203b3b20737461636b6572206d75737420686176652064656c65676174656420746f207468652063616c6c65720a202020202020286c657420282864656c65676174696f6e2d696e666f2028756e777261702120286765742d636865636b2d64656c65676174696f6e20737461636b6572292028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e494544292929290a20202020202020203b3b206d75737420686176652064656c65676174656420746f2074782d73656e6465720a2020202020202020286173736572747321202869732d657120286765742064656c6567617465642d746f2064656c65676174696f6e2d696e666f292074782d73656e646572290a20202020202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a20202020202020203b3b206d75737420686176652064656c65676174656420656e6f756768207374780a202020202020202028617373657274732120283e3d202867657420616d6f756e742d757374782064656c65676174696f6e2d696e666f2920616d6f756e742d75737478290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f544f4f5f4d5543485f4c4f434b454429290a20202020202020203b3b20696620706f782d61646472206973207365742c206d75737420626520657175616c20746f20706f782d616464720a202020202020202028617373657274732120286d61746368202867657420706f782d616464722064656c65676174696f6e2d696e666f290a202020202020202020202020202020202020202020202020207370656369666965642d706f782d61646472202869732d657120706f782d61646472207370656369666965642d706f782d61646472290a2020202020202020202020202020202020202020202020202074727565290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f504f585f414444525f524551554952454429290a20202020202020203b3b2064656c65676174696f6e206d757374206e6f7420657870697265206265666f7265206c6f636b20706572696f640a202020202020202028617373657274732120286d61746368202867657420756e74696c2d6275726e2d68742064656c65676174696f6e2d696e666f290a20202020202020202020202020202020202020202020202020756e74696c2d6275726e2d687420283e3d20756e74696c2d6275726e2d68740a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020756e6c6f636b2d6275726e2d686569676874290a2020202020202020202020202020202020202020202074727565290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f455850495245535f445552494e475f4c4f434b2929290a0a2020202020203b3b20737461636b6572207072696e636970616c206d757374206e6f7420626520737461636b696e670a202020202020286173736572747321202869732d6e6f6e6520286765742d737461636b65722d696e666f20737461636b657229290a202020202020202028657272204552525f535441434b494e475f414c52454144595f535441434b454429290a0a2020202020203b3b2074686520537461636b6572206d75737420686176652073756666696369656e7420756e6c6f636b65642066756e64730a20202020202028617373657274732120283e3d20287374782d6765742d62616c616e636520737461636b65722920616d6f756e742d75737478290a202020202020202028657272204552525f535441434b494e475f494e53554646494349454e545f46554e445329290a0a2020202020203b3b20656e73757265207468617420737461636b696e672063616e20626520706572666f726d65640a202020202020287472792120286d696e696d616c2d63616e2d737461636b2d73747820706f782d6164647220616d6f756e742d757374782066697273742d7265776172642d6379636c65206c6f636b2d706572696f6429290a0a2020202020203b3b2072656769737465722074686520506f58206164647265737320776974682074686520616d6f756e7420737461636b656420766961207061727469616c20737461636b696e670a2020202020203b3b2020206265666f72652069742063616e20626520696e636c7564656420696e2074686520726577617264207365742c2074686973206d75737420626520636f6d6d6974746564210a202020202020286164642d706f782d7061727469616c2d737461636b656420706f782d616464722066697273742d7265776172642d6379636c65206c6f636b2d706572696f6420616d6f756e742d75737478290a0a2020202020203b3b2061646420737461636b6572207265636f72640a202020202020286d61702d73657420737461636b696e672d73746174650a20202020202020207b20737461636b65723a20737461636b6572207d0a20202020202020207b20706f782d616464723a20706f782d616464722c0a2020202020202020202066697273742d7265776172642d6379636c653a2066697273742d7265776172642d6379636c652c0a202020202020202020207265776172642d7365742d696e64657865733a20286c697374292c0a202020202020202020206c6f636b2d706572696f643a206c6f636b2d706572696f64207d290a0a2020202020203b3b2072657475726e20746865206c6f636b2d757020696e666f726d6174696f6e2c20736f20746865206e6f64652063616e2061637475616c6c79206361727279206f757420746865206c6f636b2e200a202020202020286f6b207b20737461636b65723a20737461636b65722c0a2020202020202020202020206c6f636b2d616d6f756e743a20616d6f756e742d757374782c0a202020202020202020202020756e6c6f636b2d6275726e2d6865696768743a20756e6c6f636b2d6275726e2d686569676874207d2929290a0a3b3b2052656a65637420537461636b696e6720666f72207468697320726577617264206379636c652e0a3b3b2074782d73656e64657220766f74657320616c6c20697473207553545820666f722072656a656374696f6e2e0a3b3b204e6f7465207468617420756e6c696b6520506f582c2072656a656374696e6720506f5820646f6573206e6f74206c6f636b207468652074782d73656e64657227730a3b3b20746f6b656e732e2020506f582072656a656374696f6e2061637473206c696b65206120636f696e20766f74652e0a28646566696e652d7075626c6963202872656a6563742d706f78290a20202020286c657420280a20202020202020202862616c616e636520287374782d6765742d62616c616e63652074782d73656e64657229290a202020202020202028766f74652d7265776172642d6379636c6520282b207531202863757272656e742d706f782d7265776172642d6379636c652929290a20202020290a0a202020203b3b2074782d73656e646572207072696e636970616c206d757374206e6f7420686176652072656a656374656420696e2074686973207570636f6d696e6720726577617264206379636c650a20202020286173736572747321202869732d6e6f6e6520286765742d706f782d72656a656374696f6e2074782d73656e64657220766f74652d7265776172642d6379636c6529290a202020202020202028657272204552525f535441434b494e475f414c52454144595f52454a454354454429290a0a202020203b3b2074782d73656e6465722063616e2774206265206120737461636b65720a20202020286173736572747321202869732d6e6f6e6520286765742d737461636b65722d696e666f2074782d73656e64657229290a202020202020202028657272204552525f535441434b494e475f414c52454144595f535441434b454429290a0a202020203b3b20766f746520666f722072656a656374696f6e0a20202020286d61702d73657420737461636b696e672d72656a656374696f6e0a20202020202020207b207265776172642d6379636c653a20766f74652d7265776172642d6379636c65207d0a20202020202020207b20616d6f756e743a20282b20286e6578742d6379636c652d72656a656374696f6e2d766f746573292062616c616e636529207d0a20202020290a0a202020203b3b206d61726b20766f7465640a20202020286d61702d73657420737461636b696e672d72656a6563746f72730a20202020202020207b20737461636b65723a2074782d73656e6465722c207265776172642d6379636c653a20766f74652d7265776172642d6379636c65207d0a20202020202020207b20616d6f756e743a2062616c616e6365207d0a20202020290a0a20202020286f6b207472756529290a290a0a3b3b205573656420666f7220506f5820706172616d657465727320646973636f766572790a28646566696e652d726561642d6f6e6c7920286765742d706f782d696e666f290a20202020286f6b207b0a20202020202020206d696e2d616d6f756e742d757374783a20286765742d737461636b696e672d6d696e696d756d292c0a20202020202020207265776172642d6379636c652d69643a202863757272656e742d706f782d7265776172642d6379636c65292c0a2020202020202020707265706172652d6379636c652d6c656e6774683a20287661722d67657420706f782d707265706172652d6379636c652d6c656e677468292c0a202020202020202066697273742d6275726e636861696e2d626c6f636b2d6865696768743a20287661722d6765742066697273742d6275726e636861696e2d626c6f636b2d686569676874292c0a20202020202020207265776172642d6379636c652d6c656e6774683a20287661722d67657420706f782d7265776172642d6379636c652d6c656e677468292c0a202020202020202072656a656374696f6e2d6672616374696f6e3a20287661722d67657420706f782d72656a656374696f6e2d6672616374696f6e292c0a202020202020202063757272656e742d72656a656374696f6e2d766f7465733a20286e6578742d6379636c652d72656a656374696f6e2d766f746573292c0a2020202020202020746f74616c2d6c69717569642d737570706c792d757374783a207374782d6c69717569642d737570706c792c0a202020207d290a290a0a28646566696e652d707269766174652028696e6372656173652d7265776172642d6379636c652d656e747279200a202020202020202020202020202020202020287265776172642d6379636c652d696e6465782075696e74290a202020202020202020202020202020202020287570646174657320286f7074696f6e616c207b2066697273742d6379636c653a2075696e742c207265776172642d6379636c653a2075696e742c20737461636b65723a207072696e636970616c2c206164642d616d6f756e743a2075696e74207d2929290a20202020286c657420282864617461202874727921207570646174657329290a202020202020202020202866697273742d6379636c6520286765742066697273742d6379636c65206461746129290a20202020202020202020287265776172642d6379636c652028676574207265776172642d6379636c6520646174612929290a2020202028696620283e2066697273742d6379636c65207265776172642d6379636c65290a20202020202020203b3b206e6f74206174206669727374206379636c6520746f2070726f63657373207965740a202020202020202028736f6d65207b2066697273742d6379636c653a2066697273742d6379636c652c207265776172642d6379636c653a20282b207531207265776172642d6379636c65292c20737461636b65723a202867657420737461636b65722064617461292c206164642d616d6f756e743a2028676574206164642d616d6f756e74206461746129207d290a2020202020202020286c65742028286578697374696e672d656e7472792028756e777261702d70616e696320286d61702d6765743f207265776172642d6379636c652d706f782d616464726573732d6c697374207b207265776172642d6379636c653a207265776172642d6379636c652c20696e6465783a207265776172642d6379636c652d696e646578207d2929290a2020202020202020202020202020286578697374696e672d746f74616c2028756e777261702d70616e696320286d61702d6765743f207265776172642d6379636c652d746f74616c2d737461636b6564207b207265776172642d6379636c653a207265776172642d6379636c65207d2929290a202020202020202020202020202028746f74616c2d7573747820282b202867657420746f74616c2d75737478206578697374696e672d746f74616c292028676574206164642d616d6f756e742064617461292929290a2020202020202020202020203b3b20737461636b6572206d757374206d617463680a202020202020202020202020286173736572747321202869732d6571202867657420737461636b6572206578697374696e672d656e747279292028736f6d65202867657420737461636b65722064617461292929206e6f6e65290a2020202020202020202020203b3b207570646174652074686520706f782d61646472657373206c6973740a202020202020202020202020286d61702d736574207265776172642d6379636c652d706f782d616464726573732d6c6973740a2020202020202020202020202020202020202020207b207265776172642d6379636c653a207265776172642d6379636c652c20696e6465783a207265776172642d6379636c652d696e646578207d0a2020202020202020202020202020202020202020207b20706f782d616464723a202867657420706f782d61646472206578697374696e672d656e747279292c0a2020202020202020202020202020202020202020202020746f74616c2d757374783a20746f74616c2d757374782c0a2020202020202020202020202020202020202020202020737461636b65723a2028736f6d65202867657420737461636b657220646174612929207d290a2020202020202020202020203b3b207570646174652074686520746f74616c0a202020202020202020202020286d61702d736574207265776172642d6379636c652d746f74616c2d737461636b6564200a2020202020202020202020202020202020202020207b207265776172642d6379636c653a207265776172642d6379636c65207d0a2020202020202020202020202020202020202020207b20746f74616c2d757374783a20746f74616c2d75737478207d290a20202020202020202020202028736f6d65207b2066697273742d6379636c653a2066697273742d6379636c652c0a20202020202020202020202020202020202020207265776172642d6379636c653a20282b207531207265776172642d6379636c65292c0a2020202020202020202020202020202020202020737461636b65723a202867657420737461636b65722064617461292c0a20202020202020202020202020202020202020206164642d616d6f756e743a2028676574206164642d616d6f756e74206461746129207d29292929290a0a28646566696e652d7075626c69632028737461636b2d696e6372656173652028696e6372656173652d62792075696e7429290a202020286c6574202828737461636b65722d696e666f20287374782d6163636f756e742074782d73656e64657229290a20202020202020202028616d6f756e742d737461636b65642028676574206c6f636b656420737461636b65722d696e666f29290a20202020202020202028616d6f756e742d756e6c6f636b6564202867657420756e6c6f636b656420737461636b65722d696e666f29290a20202020202020202028756e6c6f636b2d686569676874202867657420756e6c6f636b2d68656967687420737461636b65722d696e666f29290a20202020202020202028756e6c6f636b2d696e2d6379636c6520286275726e2d6865696768742d746f2d7265776172642d6379636c6520756e6c6f636b2d68656967687429290a202020202020202020286375722d6379636c65202863757272656e742d706f782d7265776172642d6379636c6529290a2020202020202020202866697273742d696e637265617365642d6379636c6520282b206375722d6379636c6520753129290a20202020202020202028737461636b65722d73746174652028756e777261702120286d61702d6765743f20737461636b696e672d7374617465200a2020202020202020202020202020202020202020202020202020202020202020202020202020202020207b20737461636b65723a2074782d73656e646572207d290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202028657272204552525f535441434b5f455854454e445f4e4f545f4c4f434b4544292929290a20202020202028617373657274732120283e20616d6f756e742d737461636b6564207530290a2020202020202020202020202020202028657272204552525f535441434b5f455854454e445f4e4f545f4c4f434b454429290a20202020202028617373657274732120283e3d20696e6372656173652d6279207531290a2020202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f414d4f554e5429290a20202020202028617373657274732120283e3d20616d6f756e742d756e6c6f636b656420696e6372656173652d6279290a2020202020202020202020202020202028657272204552525f535441434b494e475f494e53554646494349454e545f46554e445329290a2020202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a2020202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a2020202020203b3b20737461636b6572206d757374206265206469726563746c7920737461636b696e670a20202020202028617373657274732120283e20286c656e2028676574207265776172642d7365742d696e646578657320737461636b65722d73746174652929207530290a2020202020202020202020202020202028657272204552525f535441434b494e475f414c52454144595f44454c45474154454429290a2020202020203b3b2075706461746520726577617264206379636c6520616d6f756e74730a202020202020286173736572747321202869732d736f6d652028666f6c6420696e6372656173652d7265776172642d6379636c652d656e747279200a20202020202020202020202028676574207265776172642d7365742d696e646578657320737461636b65722d7374617465290a20202020202020202020202028736f6d65207b2066697273742d6379636c653a2066697273742d696e637265617365642d6379636c652c0a20202020202020202020202020202020202020207265776172642d6379636c653a20286765742066697273742d7265776172642d6379636c6520737461636b65722d7374617465292c0a2020202020202020202020202020202020202020737461636b65723a2074782d73656e6465722c0a20202020202020202020202020202020202020206164642d616d6f756e743a20696e6372656173652d6279207d2929290a20202020202020202020202028657272204552525f535441434b494e475f554e524541434841424c4529290a2020202020203b3b204e4f54453a20737461636b696e672d7374617465206d617020697320756e6368616e6765643a206974206e6f206c6f6e67657220747261636b7320616d6f756e742d737461636b656420696e20506f582d320a202020202020286f6b207b20737461636b65723a2074782d73656e6465722c20746f74616c2d6c6f636b65643a20282b20616d6f756e742d737461636b656420696e6372656173652d6279297d2929290a0a3b3b20457874656e6420616e2061637469766520737461636b696e67206c6f636b2e0a3b3b202a4e657720696e20537461636b7320322e312a0a3b3b2054686973206d6574686f6420657874656e647320746865206074782d73656e6465726027732063757272656e74206c6f636b757020666f7220616e206164646974696f6e616c2060657874656e642d636f756e74600a3b3b20202020616e64206173736f6369617465732060706f782d616464726020776974682074686520726577617264730a28646566696e652d7075626c69632028737461636b2d657874656e642028657874656e642d636f756e742075696e74290a202020202020202020202020202020202020202020202020202020202028706f782d61646472207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d29290a202020286c6574202828737461636b65722d696e666f20287374782d6163636f756e742074782d73656e64657229290a20202020202020202028737461636b65722d737461746520286765742d737461636b65722d696e666f2074782d73656e64657229290a20202020202020202028616d6f756e742d757374782028676574206c6f636b656420737461636b65722d696e666f29290a20202020202020202028756e6c6f636b2d686569676874202867657420756e6c6f636b2d68656967687420737461636b65722d696e666f29290a202020202020202020286375722d6379636c65202863757272656e742d706f782d7265776172642d6379636c6529290a20202020202020202028756e6c6f636b2d696e2d6379636c6520286275726e2d6865696768742d746f2d7265776172642d6379636c6520756e6c6f636b2d68656967687429290a2020202020202020203b3b20696620746865206163636f756e7420756e6c6f636b73202a647572696e672a2074686973206379636c65202873686f756c64206f6e6c79206f6363757220647572696e672074657374696e67292c0a2020202020202020203b3b207365742066697273742d657874656e642d6379636c6520746f20746865206e657874206379636c652e0a2020202020202020202866697273742d657874656e642d6379636c652028696620283e20282b206375722d6379636c652075312920756e6c6f636b2d696e2d6379636c65290a202020202020202020202020202020202020202020202020202020202020202020202020282b206375722d6379636c652075312920756e6c6f636b2d696e2d6379636c6529290a2020202020202020203b3b206d61696e7461696e696e672076616c696420737461636b696e672d737461746520656e747269657320726571756972657320636865636b696e670a2020202020202020203b3b20207768657468657220746865726520697320616e206578697374696e6720656e74727920666f722074686520737461636b657220696e207468652073746174650a2020202020202020203b3b207468697320776f756c642062652074686520636173652069662074686520737461636b657220697320657874656e64696e672061206c6f636b75702066726f6d20506f582d310a2020202020202020203b3b2020746f20506f582d320a2020202020202020202866697273742d7265776172642d6379636c6520286d6174636820286765742066697273742d7265776172642d6379636c6520737461636b65722d7374617465290a2020202020202020202020202020202020202020202020202020202020202020202020202020203b3b20696620776527766520737461636b656420696e20506f58322c207468656e206d6178286375722d6379636c652c20737461636b65722d73746174652e66697273742d7265776172642d6379636c65292069732076616c69640a2020202020202020202020202020202020202020202020202020202020202020202020202020206f6c642d66697273742d6379636c652028696620283e206375722d6379636c65206f6c642d66697273742d6379636c6529206375722d6379636c65206f6c642d66697273742d6379636c65290a2020202020202020202020202020202020202020202020202020202020202020202020202020203b3b206f74686572776973652c207468657265206172656e277420506f583220656e747269657320756e74696c2066697273742d657874656e642d6379636c650a20202020202020202020202020202020202020202020202020202020202020202020202020202066697273742d657874656e642d6379636c652929290a0a202020203b3b206d7573742062652063616c6c6564207769746820706f73697469766520657874656e642d636f756e740a2020202028617373657274732120283e3d20657874656e642d636f756e74207531290a202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f4429290a0a20202020286c65742028286c6173742d657874656e642d6379636c652020282d20282b2066697273742d657874656e642d6379636c6520657874656e642d636f756e742920753129290a20202020202020202020286c6f636b2d706572696f6420282b20753120282d206c6173742d657874656e642d6379636c652066697273742d7265776172642d6379636c652929290a20202020202020202020286e65772d756e6c6f636b2d687420287265776172642d6379636c652d746f2d6275726e2d68656967687420282b207531206c6173742d657874656e642d6379636c65292929290a0a2020202020203b3b206669727374206379636c65206d757374206265206166746572207468652063757272656e74206379636c650a20202020202028617373657274732120283e2066697273742d657874656e642d6379636c65206375722d6379636c65292028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f4429290a2020202020203b3b206c6f636b20706572696f64206d75737420626520706f7369746976650a20202020202028617373657274732120283e206c6f636b2d706572696f64207530292028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f4429290a0a2020202020203b3b206d7573742062652063616c6c6564206469726563746c79206279207468652074782d73656e646572206f7220627920616e20616c6c6f77656420636f6e74726163742d63616c6c65720a2020202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a2020202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a0a2020202020203b3b2074782d73656e646572206d757374206265206c6f636b65640a20202020202028617373657274732120283e20616d6f756e742d75737478207530290a202020202020202028657272204552525f535441434b5f455854454e445f4e4f545f4c4f434b454429290a0a2020202020203b3b2074782d73656e646572206d757374206e6f742062652064656c65676174696e670a202020202020286173736572747321202869732d6e6f6e6520286765742d636865636b2d64656c65676174696f6e2074782d73656e64657229290a202020202020202028657272204552525f535441434b494e475f414c52454144595f44454c45474154454429290a0a2020202020203b3b207374616e646172642063616e2d737461636b2d73747820636865636b730a2020202020202874727921202863616e2d737461636b2d73747820706f782d6164647220616d6f756e742d757374782066697273742d657874656e642d6379636c65206c6f636b2d706572696f6429290a0a2020202020203b3b2072656769737465722074686520506f58206164647265737320776974682074686520616d6f756e7420737461636b65640a2020202020203b3b202020666f7220746865206e6577206379636c65730a202020202020286c6574202828657874656e6465642d7265776172642d7365742d696e646578657320287472792120286164642d706f782d616464722d746f2d7265776172642d6379636c657320706f782d616464722066697273742d657874656e642d6379636c6520657874656e642d636f756e7420616d6f756e742d757374782074782d73656e6465722929290a202020202020202020202020287265776172642d7365742d696e646578657320286d6174636820737461636b65722d73746174650a2020202020202020202020202020202020202020202020202020202020202020202020202020203b3b20696620746865726527732061637469766520737461636b65722073746174652c207765206e65656420746f20657874656e6420746865206578697374696e67207265776172642d7365742d696e64657865730a2020202020202020202020202020202020202020202020202020202020202020202020202020206f6c642d737461746520286c65742028286375722d6379636c652d696e64657820282d2066697273742d7265776172642d6379636c6520286765742066697273742d7265776172642d6379636c65206f6c642d73746174652929290a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020286f6c642d696e64657865732028676574207265776172642d7365742d696e6465786573206f6c642d737461746529290a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203b3b206275696c6420696e646578206c6973742062792074616b696e6720746865206f6c642d696e6465786573207374617274696e672066726f6d20637572206379636c650a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020203b3b2020616e6420616464696e6720746865206e657720696e646578657320746f2069742e2074686973207761792c2074686520696e6465782069732076616c6964207374617274696e672066726f6d207468652063757272656e74206379636c650a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020286e65772d6c6973742028636f6e636174202864656661756c742d746f20286c697374292028736c696365206f6c642d696e6465786573206375722d6379636c652d696e64657820286c656e206f6c642d696e64657865732929290a2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020657874656e6465642d7265776172642d7365742d696e64657865732929290a202020202020202020202020202020202020202020202020202020202020202020202020202020202020202028756e777261702d70616e6963202861732d6d61782d6c656e3f206e65772d6c697374207531322929290a202020202020202020202020202020202020202020202020202020202020202020202020202020657874656e6465642d7265776172642d7365742d696e64657865732929290a202020202020202020203b3b2075706461746520737461636b6572207265636f72640a20202020202020202020286d61702d73657420737461636b696e672d73746174650a2020202020202020202020207b20737461636b65723a2074782d73656e646572207d0a2020202020202020202020207b20706f782d616464723a20706f782d616464722c0a20202020202020202020202020207265776172642d7365742d696e64657865733a207265776172642d7365742d696e64657865732c0a202020202020202020202020202066697273742d7265776172642d6379636c653a2066697273742d7265776172642d6379636c652c0a20202020202020202020202020206c6f636b2d706572696f643a206c6f636b2d706572696f64207d290a0a20202020202020203b3b2072657475726e206c6f636b2d757020696e666f726d6174696f6e0a2020202020202020286f6b207b20737461636b65723a2074782d73656e6465722c20756e6c6f636b2d6275726e2d6865696768743a206e65772d756e6c6f636b2d6874207d29292929290a0a3b3b20417320612064656c656761746f722c20696e63726561736520616e2061637469766520737461636b696e67206c6f636b2c2069737375696e67206120227061727469616c20636f6d6d69746d656e742220666f72207468650a3b3b202020696e63726561736564206379636c65732e0a3b3b202a4e657720696e20537461636b7320322e312a0a3b3b2054686973206d6574686f6420696e637265617365732060737461636b65726027732063757272656e74206c6f636b757020616e64207061727469616c6c7920636f6d6d69747320746865206164646974696f6e616c0a3b3b20202053545820746f2060706f782d61646472600a28646566696e652d7075626c6963202864656c65676174652d737461636b2d696e6372656173650a202020202020202020202020202020202020202028737461636b6572207072696e636970616c290a202020202020202020202020202020202020202028706f782d61646472207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d290a202020202020202020202020202020202020202028696e6372656173652d62792075696e7429290a20202020286c6574202828737461636b65722d696e666f20287374782d6163636f756e7420737461636b657229290a20202020202020202020286578697374696e672d6c6f636b2028676574206c6f636b656420737461636b65722d696e666f29290a2020202020202020202028617661696c61626c652d737478202867657420756e6c6f636b656420737461636b65722d696e666f29290a2020202020202020202028756e6c6f636b2d686569676874202867657420756e6c6f636b2d68656967687420737461636b65722d696e666f2929290a0a20202020203b3b206d7573742062652063616c6c6564207769746820706f7369746976652060696e6372656173652d6279600a202020202028617373657274732120283e3d20696e6372656173652d6279207531290a20202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f414d4f554e5429290a0a2020202020286c6574202828756e6c6f636b2d696e2d6379636c6520286275726e2d6865696768742d746f2d7265776172642d6379636c6520756e6c6f636b2d68656967687429290a2020202020202020202020286375722d6379636c65202863757272656e742d706f782d7265776172642d6379636c6529290a20202020202020202020202866697273742d696e6372656173652d6379636c6520282b206375722d6379636c6520753129290a2020202020202020202020286c6173742d696e6372656173652d6379636c6520282d20756e6c6f636b2d696e2d6379636c6520753129290a2020202020202020202020286379636c652d636f756e742028747279212028696620283c3d2066697273742d696e6372656173652d6379636c65206c6173742d696e6372656173652d6379636c65290a20202020202020202020202020202020202020202020202020202020202020202020286f6b20282b20753120282d206c6173742d696e6372656173652d6379636c652066697273742d696e6372656173652d6379636c652929290a2020202020202020202020202020202020202020202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f44292929290a2020202020202020202020286e65772d746f74616c2d6c6f636b656420282b20696e6372656173652d6279206578697374696e672d6c6f636b29290a202020202020202020202028737461636b65722d7374617465200a2020202020202020202020202020202028756e777261702120286d61702d6765743f20737461636b696e672d7374617465207b20737461636b65723a20737461636b6572207d290a202020202020202020202020202020202028657272204552525f535441434b5f494e4352454153455f4e4f545f4c4f434b4544292929290a0a2020202020203b3b206d7573742062652063616c6c6564206469726563746c79206279207468652074782d73656e646572206f7220627920616e20616c6c6f77656420636f6e74726163742d63616c6c65720a2020202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a0a2020202020203b3b20737461636b6572206d7573742062652063757272656e746c79206c6f636b65640a20202020202028617373657274732120283e206578697374696e672d6c6f636b207530290a202020202020202028657272204552525f535441434b5f494e4352454153455f4e4f545f4c4f434b454429290a0a2020202020203b3b20737461636b6572206d757374206861766520656e6f7567682073747820746f206c6f636b0a20202020202028617373657274732120283e3d20617661696c61626c652d73747820696e6372656173652d6279290a202020202020202028657272204552525f535441434b494e475f494e53554646494349454e545f46554e445329290a0a2020202020203b3b20737461636b6572206d75737420686176652064656c65676174656420746f207468652063616c6c65720a202020202020286c657420282864656c65676174696f6e2d696e666f2028756e777261702120286765742d636865636b2d64656c65676174696f6e20737461636b6572292028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e4945442929290a2020202020202020202020202864656c6567617465642d746f20286765742064656c6567617465642d746f2064656c65676174696f6e2d696e666f29290a2020202020202020202020202864656c6567617465642d616d6f756e74202867657420616d6f756e742d757374782064656c65676174696f6e2d696e666f29290a2020202020202020202020202864656c6567617465642d706f782d61646472202867657420706f782d616464722064656c65676174696f6e2d696e666f29290a2020202020202020202020202864656c6567617465642d756e74696c202867657420756e74696c2d6275726e2d68742064656c65676174696f6e2d696e666f2929290a20202020202020203b3b206d75737420686176652064656c65676174656420746f2074782d73656e6465720a2020202020202020286173736572747321202869732d65712064656c6567617465642d746f2074782d73656e646572290a20202020202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a20202020202020203b3b206d75737420686176652064656c65676174656420656e6f756768207374780a202020202020202028617373657274732120283e3d2064656c6567617465642d616d6f756e74206e65772d746f74616c2d6c6f636b6564290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f544f4f5f4d5543485f4c4f434b454429290a20202020202020203b3b20696620706f782d61646472206973207365742c206d75737420626520657175616c20746f20706f782d616464720a202020202020202028617373657274732120286d617463682064656c6567617465642d706f782d616464720a202020202020202020202020202020202020202020202020207370656369666965642d706f782d61646472202869732d657120706f782d61646472207370656369666965642d706f782d61646472290a2020202020202020202020202020202020202020202020202074727565290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f504f585f414444525f524551554952454429290a20202020202020203b3b2064656c65676174696f6e206d757374206e6f7420657870697265206265666f7265206c6f636b20706572696f640a202020202020202028617373657274732120286d617463682064656c6567617465642d756e74696c0a202020202020202020202020202020202020202020202020756e74696c2d6275726e2d68740a20202020202020202020202020202020202020202020202020202020283e3d20756e74696c2d6275726e2d687420756e6c6f636b2d686569676874290a20202020202020202020202020202020202020202020202074727565290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f455850495245535f445552494e475f4c4f434b2929290a0a2020202020203b3b2064656c656761746520737461636b696e6720646f6573206d696e696d616c2d63616e2d737461636b2d7374780a202020202020287472792120286d696e696d616c2d63616e2d737461636b2d73747820706f782d61646472206e65772d746f74616c2d6c6f636b65642066697273742d696e6372656173652d6379636c6520282b20753120282d206c6173742d696e6372656173652d6379636c652066697273742d696e6372656173652d6379636c65292929290a0a2020202020203b3b2072656769737465722074686520506f58206164647265737320776974682074686520616d6f756e7420737461636b656420766961207061727469616c20737461636b696e670a2020202020203b3b2020206265666f72652069742063616e20626520696e636c7564656420696e2074686520726577617264207365742c2074686973206d75737420626520636f6d6d6974746564210a202020202020286164642d706f782d7061727469616c2d737461636b656420706f782d616464722066697273742d696e6372656173652d6379636c65206379636c652d636f756e7420696e6372656173652d6279290a0a2020202020203b3b20737461636b696e672d737461746520697320756e6368616e6765642c20736f206e6f206e65656420746f207570646174650a0a2020202020203b3b2072657475726e20746865206c6f636b2d757020696e666f726d6174696f6e2c20736f20746865206e6f64652063616e2061637475616c6c79206361727279206f757420746865206c6f636b2e200a202020202020286f6b207b20737461636b65723a20737461636b65722c20746f74616c2d6c6f636b65643a206e65772d746f74616c2d6c6f636b65647d292929290a0a3b3b20417320612064656c656761746f722c20657874656e6420616e2061637469766520737461636b696e67206c6f636b2c2069737375696e67206120227061727469616c20636f6d6d69746d656e742220666f72207468650a3b3b202020657874656e6465642d746f206379636c65732e0a3b3b202a4e657720696e20537461636b7320322e312a0a3b3b2054686973206d6574686f6420657874656e64732060737461636b65726027732063757272656e74206c6f636b757020666f7220616e206164646974696f6e616c2060657874656e642d636f756e74600a3b3b20202020616e64207061727469616c6c7920636f6d6d6974732074686f7365206e6577206379636c657320746f2060706f782d61646472600a28646566696e652d7075626c6963202864656c65676174652d737461636b2d657874656e640a202020202020202020202020202020202020202028737461636b6572207072696e636970616c290a202020202020202020202020202020202020202028706f782d61646472207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d290a202020202020202020202020202020202020202028657874656e642d636f756e742075696e7429290a20202020286c6574202828737461636b65722d696e666f20287374782d6163636f756e7420737461636b657229290a2020202020202020202028737461636b65722d737461746520286765742d737461636b65722d696e666f20737461636b657229290a2020202020202020202028616d6f756e742d757374782028676574206c6f636b656420737461636b65722d696e666f29290a2020202020202020202028756e6c6f636b2d686569676874202867657420756e6c6f636b2d68656967687420737461636b65722d696e666f29290a2020202020202020202028756e6c6f636b2d696e2d6379636c6520286275726e2d6865696768742d746f2d7265776172642d6379636c6520756e6c6f636b2d68656967687429290a202020202020202020203b3b20696620746865206163636f756e7420756e6c6f636b73202a647572696e672a2074686973206379636c65202873686f756c64206f6e6c79206f6363757220647572696e672074657374696e67292c0a202020202020202020203b3b207365742066697273742d657874656e642d6379636c6520746f20746865206e657874206379636c652e0a20202020202020202020286375722d6379636c65202863757272656e742d706f782d7265776172642d6379636c6529290a202020202020202020202866697273742d657874656e642d6379636c652028696620283e20282b206375722d6379636c652075312920756e6c6f636b2d696e2d6379636c65290a20202020202020202020202020202020202020202020202020202020202020202020202020282b206375722d6379636c652075312920756e6c6f636b2d696e2d6379636c6529290a202020202020202020203b3b2075706461746520737461636b6572207265636f72640a202020202020202020203b3b206d61696e7461696e696e672076616c696420737461636b696e672d737461746520656e747269657320726571756972657320636865636b696e670a202020202020202020203b3b20207768657468657220746865726520697320616e206578697374696e6720656e74727920666f722074686520737461636b657220696e207468652073746174650a202020202020202020203b3b207468697320776f756c642062652074686520636173652069662074686520737461636b657220697320657874656e64696e672061206c6f636b75702066726f6d20506f582d310a202020202020202020203b3b2020746f20506f582d320a202020202020202020202866697273742d7265776172642d6379636c6520286d6174636820286765742066697273742d7265776172642d6379636c6520737461636b65722d7374617465290a2020202020202020202020202020202020202020202020202020202020202020202020202020203b3b20696620737461636b657220737461636b656420696e20506f58322c207468656e206d6178286375722d6379636c652c20737461636b65722d73746174652e66697273742d7265776172642d6379636c65292069732076616c69640a2020202020202020202020202020202020202020202020202020202020202020202020202020206f6c642d66697273742d6379636c652028696620283e206375722d6379636c65206f6c642d66697273742d6379636c6529206375722d6379636c65206f6c642d66697273742d6379636c65290a2020202020202020202020202020202020202020202020202020202020202020202020202020203b3b206f74686572776973652c207468657265206172656e277420506f583220656e747269657320756e74696c2066697273742d657874656e642d6379636c650a20202020202020202020202020202020202020202020202020202020202020202020202020202066697273742d657874656e642d6379636c652929290a0a20202020203b3b206d7573742062652063616c6c6564207769746820706f73697469766520657874656e642d636f756e740a202020202028617373657274732120283e3d20657874656e642d636f756e74207531290a20202020202020202020202020202028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f4429290a0a2020202020286c65742028286c6173742d657874656e642d6379636c652020282d20282b2066697273742d657874656e642d6379636c6520657874656e642d636f756e742920753129290a2020202020202020202020286c6f636b2d706572696f6420282b20753120282d206c6173742d657874656e642d6379636c652066697273742d7265776172642d6379636c652929290a2020202020202020202020286e65772d756e6c6f636b2d687420287265776172642d6379636c652d746f2d6275726e2d68656967687420282b207531206c6173742d657874656e642d6379636c65292929290a0a2020202020203b3b206669727374206379636c65206d757374206265206166746572207468652063757272656e74206379636c650a20202020202028617373657274732120283e2066697273742d657874656e642d6379636c65206375722d6379636c65292028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f4429290a2020202020203b3b206c6f636b20706572696f64206d75737420626520706f7369746976650a20202020202028617373657274732120283e206c6f636b2d706572696f64207530292028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f4429290a0a2020202020203b3b206d7573742062652063616c6c6564206469726563746c79206279207468652074782d73656e646572206f7220627920616e20616c6c6f77656420636f6e74726163742d63616c6c65720a2020202020202861737365727473212028636865636b2d63616c6c65722d616c6c6f776564290a202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a0a2020202020203b3b20636865636b2076616c6964206c6f636b20706572696f640a2020202020202861737365727473212028636865636b2d706f782d6c6f636b2d706572696f64206c6f636b2d706572696f64290a202020202020202028657272204552525f535441434b494e475f494e56414c49445f4c4f434b5f504552494f4429290a0a2020202020203b3b20737461636b6572206d7573742062652063757272656e746c79206c6f636b65640a20202020202028617373657274732120283e20616d6f756e742d75737478207530290a202020202020202028657272204552525f535441434b5f455854454e445f4e4f545f4c4f434b454429290a0a2020202020203b3b20737461636b6572206d75737420686176652064656c65676174656420746f207468652063616c6c65720a202020202020286c657420282864656c65676174696f6e2d696e666f2028756e777261702120286765742d636865636b2d64656c65676174696f6e20737461636b6572292028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e494544292929290a20202020202020203b3b206d75737420686176652064656c65676174656420746f2074782d73656e6465720a2020202020202020286173736572747321202869732d657120286765742064656c6567617465642d746f2064656c65676174696f6e2d696e666f292074782d73656e646572290a20202020202020202020202020202020202028657272204552525f535441434b494e475f5045524d495353494f4e5f44454e49454429290a20202020202020203b3b206d75737420686176652064656c65676174656420656e6f756768207374780a202020202020202028617373657274732120283e3d202867657420616d6f756e742d757374782064656c65676174696f6e2d696e666f2920616d6f756e742d75737478290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f544f4f5f4d5543485f4c4f434b454429290a20202020202020203b3b20696620706f782d61646472206973207365742c206d75737420626520657175616c20746f20706f782d616464720a202020202020202028617373657274732120286d61746368202867657420706f782d616464722064656c65676174696f6e2d696e666f290a202020202020202020202020202020202020202020202020207370656369666965642d706f782d61646472202869732d657120706f782d61646472207370656369666965642d706f782d61646472290a2020202020202020202020202020202020202020202020202074727565290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f504f585f414444525f524551554952454429290a20202020202020203b3b2064656c65676174696f6e206d757374206e6f7420657870697265206265666f7265206c6f636b20706572696f640a202020202020202028617373657274732120286d61746368202867657420756e74696c2d6275726e2d68742064656c65676174696f6e2d696e666f290a20202020202020202020202020202020202020202020202020756e74696c2d6275726e2d687420283e3d20756e74696c2d6275726e2d68740a202020202020202020202020202020202020202020202020202020202020202020202020202020202020206e65772d756e6c6f636b2d6874290a2020202020202020202020202020202020202020202074727565290a20202020202020202020202020202020202028657272204552525f44454c45474154494f4e5f455850495245535f445552494e475f4c4f434b2929290a0a2020202020203b3b2064656c656761746520737461636b696e6720646f6573206d696e696d616c2d63616e2d737461636b2d7374780a202020202020287472792120286d696e696d616c2d63616e2d737461636b2d73747820706f782d6164647220616d6f756e742d757374782066697273742d657874656e642d6379636c65206c6f636b2d706572696f6429290a0a2020202020203b3b2072656769737465722074686520506f58206164647265737320776974682074686520616d6f756e7420737461636b656420766961207061727469616c20737461636b696e670a2020202020203b3b2020206265666f72652069742063616e20626520696e636c7564656420696e2074686520726577617264207365742c2074686973206d75737420626520636f6d6d6974746564210a202020202020286164642d706f782d7061727469616c2d737461636b656420706f782d616464722066697273742d657874656e642d6379636c6520657874656e642d636f756e7420616d6f756e742d75737478290a0a202020202020286d61702d73657420737461636b696e672d73746174650a20202020202020207b20737461636b65723a20737461636b6572207d0a20202020202020207b20706f782d616464723a20706f782d616464722c0a202020202020202020207265776172642d7365742d696e64657865733a20286c697374292c0a2020202020202020202066697273742d7265776172642d6379636c653a2066697273742d7265776172642d6379636c652c0a202020202020202020206c6f636b2d706572696f643a206c6f636b2d706572696f64207d290a0a2020202020203b3b2072657475726e20746865206c6f636b2d757020696e666f726d6174696f6e2c20736f20746865206e6f64652063616e2061637475616c6c79206361727279206f757420746865206c6f636b2e200a202020202020286f6b207b20737461636b65723a20737461636b65722c0a202020202020202020202020756e6c6f636b2d6275726e2d6865696768743a206e65772d756e6c6f636b2d6874207d292929290a0a3b3b2047657420746865205f63757272656e745f20506f5820737461636b696e672064656c65676174696f6e20696e666f726d6174696f6e20666f72206120737461636b65722e202049662074686520696e666f726d6174696f6e0a3b3b20697320657870697265642c206f722069662074686572652773206e65766572206265656e2073756368206120737461636b65722c207468656e2072657475726e73206e6f6e652e0a3b3b202a4e657720696e20537461636b7320322e312a0a28646566696e652d726561642d6f6e6c7920286765742d64656c65676174696f6e2d696e666f2028737461636b6572207072696e636970616c29290a20202020286765742d636865636b2d64656c65676174696f6e20737461636b6572290a290a0a3b3b2047657420746865206275726e20686569676874206174207768696368206120706172746963756c617220636f6e747261637420697320616c6c6f77656420746f20737461636b20666f72206120706172746963756c6172207072696e636970616c2e0a3b3b202a4e657720696e20537461636b7320322e312a0a3b3b2052657475726e732028736f6d652028736f6d6520582929206966205820697320746865206275726e206865696768742061742077686963682074686520616c6c6f77616e6365207465726d696e617465730a3b3b2052657475726e732028736f6d65206e6f6e6529206966207468652063616c6c657220697320616c6c6f77656420696e646566696e6974656c790a3b3b2052657475726e73206e6f6e65206966207468657265206973206e6f20616c6c6f77616e6365207265636f72640a28646566696e652d726561642d6f6e6c7920286765742d616c6c6f77616e63652d636f6e74726163742d63616c6c657273202873656e646572207072696e636970616c29202863616c6c696e672d636f6e7472616374207072696e636970616c29290a20202020286d61702d6765743f20616c6c6f77616e63652d636f6e74726163742d63616c6c657273207b2073656e6465723a2073656e6465722c20636f6e74726163742d63616c6c65723a2063616c6c696e672d636f6e7472616374207d290a290a0a3b3b20486f77206d616e7920506f582061646472657373657320696e207468697320726577617264206379636c653f0a3b3b202a4e657720696e20537461636b7320322e312a0a28646566696e652d726561642d6f6e6c7920286765742d6e756d2d7265776172642d7365742d706f782d61646472657373657320287265776172642d6379636c652075696e7429290a20202020286d6174636820286d61702d6765743f207265776172642d6379636c652d706f782d616464726573732d6c6973742d6c656e207b207265776172642d6379636c653a207265776172642d6379636c65207d290a20202020202020206e756d2d61646472730a20202020202020202020202028676574206c656e206e756d2d6164647273290a202020202020202075300a20202020290a290a0a3b3b20486f77206d616e7920755354582068617665206265656e206c6f636b656420757020666f722074686973206164647265737320736f206661722c206265666f7265207468652064656c656761746f7220636f6d6d697473207468656d3f0a3b3b202a4e657720696e20537461636b7320322e312a0a28646566696e652d726561642d6f6e6c7920286765742d7061727469616c2d737461636b65642d62792d6379636c652028706f782d61646472207b2076657273696f6e3a2028627566662031292c206861736862797465733a20286275666620333229207d2920287265776172642d6379636c652075696e7429202873656e646572207072696e636970616c29290a20202020286d61702d6765743f207061727469616c2d737461636b65642d62792d6379636c65207b20706f782d616464723a20706f782d616464722c207265776172642d6379636c653a207265776172642d6379636c652c2073656e6465723a2073656e646572207d290a290a0a3b3b20486f7720616e792075535458206861766520766f74656420746f2072656a65637420506f5820696e206120676976656e20726577617264206379636c653f0a3b3b202a4e657720696e20537461636b7320322e312a0a28646566696e652d726561642d6f6e6c7920286765742d746f74616c2d706f782d72656a656374696f6e20287265776172642d6379636c652075696e7429290a20202020286d6174636820286d61702d6765743f20737461636b696e672d72656a656374696f6e207b207265776172642d6379636c653a207265776172642d6379636c65207d290a202020202020202072656a65637465640a2020202020202020202020202867657420616d6f756e742072656a6563746564290a202020202020202075300a20202020290a290a0a","status":"success","tx_index":1,"txid":"0xe04e8b4eeabb6268d5be6d276e4c1da960449c1c8c13a68afa274d3c276b1083","decoded_tx":{"tx_id":"0xe04e8b4eeabb6268d5be6d276e4c1da960449c1c8c13a68afa274d3c276b1083","version":128,"chain_id":0,"auth":{"type_id":4,"origin_condition":{"hash_mode":0,"signer":{"address_version":26,"address_hash_bytes":"0x0000000000000000000000000000000000000000","address":"ST000000000000000000002AMW42H"},"nonce":"0","tx_fee":"0","key_encoding":1,"signature":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}},"anchor_mode":3,"post_condition_mode":2,"post_conditions":[],"post_conditions_buffer":"0x0200000000","payload":{"type_id":6,"clarity_version":2,"contract_name":"pox-2","code_body":";; PoX testnet constants\n;; Min/max number of reward cycles uSTX can be locked for\n(define-constant MIN_POX_REWARD_CYCLES u1)\n(define-constant MAX_POX_REWARD_CYCLES u12)\n\n;; Default length of the PoX registration window, in burnchain blocks.\n(define-constant PREPARE_CYCLE_LENGTH u50)\n\n;; Default length of the PoX reward cycle, in burnchain blocks.\n(define-constant REWARD_CYCLE_LENGTH u1050)\n\n;; Valid values for burnchain address versions.\n;; These correspond to address hash modes in Stacks 2.0.\n(define-constant ADDRESS_VERSION_P2PKH 0x00)\n(define-constant ADDRESS_VERSION_P2SH 0x01)\n(define-constant ADDRESS_VERSION_P2WPKH 0x02)\n(define-constant ADDRESS_VERSION_P2WSH 0x03)\n\n;; Stacking thresholds\n(define-constant STACKING_THRESHOLD_25 u8000)\n(define-constant STACKING_THRESHOLD_100 u2000)\n\n;; The .pox-2 contract\n;; Error codes\n(define-constant ERR_STACKING_UNREACHABLE 255)\n(define-constant ERR_STACKING_CORRUPTED_STATE 254)\n(define-constant ERR_STACKING_INSUFFICIENT_FUNDS 1)\n(define-constant ERR_STACKING_INVALID_LOCK_PERIOD 2)\n(define-constant ERR_STACKING_ALREADY_STACKED 3)\n(define-constant ERR_STACKING_NO_SUCH_PRINCIPAL 4)\n(define-constant ERR_STACKING_EXPIRED 5)\n(define-constant ERR_STACKING_STX_LOCKED 6)\n(define-constant ERR_STACKING_PERMISSION_DENIED 9)\n(define-constant ERR_STACKING_THRESHOLD_NOT_MET 11)\n(define-constant ERR_STACKING_POX_ADDRESS_IN_USE 12)\n(define-constant ERR_STACKING_INVALID_POX_ADDRESS 13)\n(define-constant ERR_STACKING_ALREADY_REJECTED 17)\n(define-constant ERR_STACKING_INVALID_AMOUNT 18)\n(define-constant ERR_NOT_ALLOWED 19)\n(define-constant ERR_STACKING_ALREADY_DELEGATED 20)\n(define-constant ERR_DELEGATION_EXPIRES_DURING_LOCK 21)\n(define-constant ERR_DELEGATION_TOO_MUCH_LOCKED 22)\n(define-constant ERR_DELEGATION_POX_ADDR_REQUIRED 23)\n(define-constant ERR_INVALID_START_BURN_HEIGHT 24)\n(define-constant ERR_NOT_CURRENT_STACKER 25)\n(define-constant ERR_STACK_EXTEND_NOT_LOCKED 26)\n(define-constant ERR_STACK_INCREASE_NOT_LOCKED 27)\n\n;; PoX disabling threshold (a percent)\n(define-constant POX_REJECTION_FRACTION u25)\n\n;; Valid values for burnchain address versions.\n;; These first four correspond to address hash modes in Stacks 2.1,\n;; and are defined in pox-mainnet.clar and pox-testnet.clar (so they\n;; cannot be defined here again).\n;; (define-constant ADDRESS_VERSION_P2PKH 0x00)\n;; (define-constant ADDRESS_VERSION_P2SH 0x01)\n;; (define-constant ADDRESS_VERSION_P2WPKH 0x02)\n;; (define-constant ADDRESS_VERSION_P2WSH 0x03)\n(define-constant ADDRESS_VERSION_NATIVE_P2WPKH 0x04)\n(define-constant ADDRESS_VERSION_NATIVE_P2WSH 0x05)\n(define-constant ADDRESS_VERSION_NATIVE_P2TR 0x06)\n;; Keep these constants in lock-step with the address version buffs above\n;; Maximum value of an address version as a uint\n(define-constant MAX_ADDRESS_VERSION u6)\n;; Maximum value of an address version that has a 20-byte hashbytes\n;; (0x00, 0x01, 0x02, 0x03, and 0x04 have 20-byte hashbytes)\n(define-constant MAX_ADDRESS_VERSION_BUFF_20 u4)\n;; Maximum value of an address version that has a 32-byte hashbytes\n;; (0x05 and 0x06 have 32-byte hashbytes)\n(define-constant MAX_ADDRESS_VERSION_BUFF_32 u6)\n\n;; Data vars that store a copy of the burnchain configuration.\n;; Implemented as data-vars, so that different configurations can be\n;; used in e.g. test harnesses.\n(define-data-var pox-prepare-cycle-length uint PREPARE_CYCLE_LENGTH)\n(define-data-var pox-reward-cycle-length uint REWARD_CYCLE_LENGTH)\n(define-data-var pox-rejection-fraction uint POX_REJECTION_FRACTION)\n(define-data-var first-burnchain-block-height uint u0)\n(define-data-var configured bool false)\n(define-data-var first-2-1-reward-cycle uint u0)\n\n;; This function can only be called once, when it boots up\n(define-public (set-burnchain-parameters (first-burn-height uint)\n (prepare-cycle-length uint)\n (reward-cycle-length uint)\n (rejection-fraction uint)\n (begin-2-1-reward-cycle uint))\n (begin\n (asserts! (not (var-get configured)) (err ERR_NOT_ALLOWED))\n (var-set first-burnchain-block-height first-burn-height)\n (var-set pox-prepare-cycle-length prepare-cycle-length)\n (var-set pox-reward-cycle-length reward-cycle-length)\n (var-set pox-rejection-fraction rejection-fraction)\n (var-set first-2-1-reward-cycle begin-2-1-reward-cycle)\n (var-set configured true)\n (ok true))\n)\n\n;; The Stacking lock-up state and associated metadata.\n;; Records are inserted into this map via `stack-stx`, `delegate-stack-stx`, `stack-extend`\n;; `delegate-stack-extend` and burnchain transactions for invoking `stack-stx`, etc.\n;; Records will be deleted from this map when auto-unlocks are processed\n;;\n;; This map de-normalizes some state from the `reward-cycle-pox-address-list` map\n;; and the `pox-2` contract tries to keep this state in sync with the reward-cycle\n;; state. The major invariants of this `stacking-state` map are:\n;; (1) any entry in `reward-cycle-pox-address-list` with `some stacker` points to a real `stacking-state`\n;; (2) `stacking-state.reward-set-indexes` matches the index of that `reward-cycle-pox-address-list`\n;; (3) all `stacking-state.reward-set-indexes` match the index of their reward cycle entries\n;; (4) `stacking-state.pox-addr` matches `reward-cycle-pox-address-list.pox-addr`\n;; (5) if set, (len reward-set-indexes) == lock-period\n;; (6) (reward-cycle-to-burn-height (+ lock-period first-reward-cycle)) == (get unlock-height (stx-account stacker))\n;; These invariants only hold while `cur-reward-cycle < (+ lock-period first-reward-cycle)`\n;;\n(define-map stacking-state\n { stacker: principal }\n {\n ;; Description of the underlying burnchain address that will\n ;; receive PoX'ed tokens. Translating this into an address\n ;; depends on the burnchain being used. When Bitcoin is\n ;; the burnchain, this gets translated into a p2pkh, p2sh,\n ;; p2wpkh-p2sh, p2wsh-p2sh, p2wpkh, p2wsh, or p2tr UTXO,\n ;; depending on the version. The `hashbytes` field *must* be\n ;; either 20 bytes or 32 bytes, depending on the output.\n pox-addr: { version: (buff 1), hashbytes: (buff 32) },\n ;; how long the uSTX are locked, in reward cycles.\n lock-period: uint,\n ;; reward cycle when rewards begin\n first-reward-cycle: uint,\n ;; indexes in each reward-set associated with this user.\n ;; these indexes are only valid looking forward from\n ;; `first-reward-cycle` (i.e., they do not correspond\n ;; to entries in the reward set that may have been from\n ;; previous stack-stx calls, or prior to an extend)\n reward-set-indexes: (list 12 uint)\n }\n)\n\n;; Delegation relationships\n(define-map delegation-state\n { stacker: principal }\n { \n amount-ustx: uint, ;; how many uSTX delegated?\n delegated-to: principal, ;; who are we delegating?\n until-burn-ht: (optional uint), ;; how long does the delegation last?\n ;; does the delegate _need_ to use a specific\n ;; pox recipient address?\n pox-addr: (optional { version: (buff 1), hashbytes: (buff 32) })\n }\n)\n\n;; allowed contract-callers\n(define-map allowance-contract-callers\n { sender: principal, contract-caller: principal }\n { until-burn-ht: (optional uint) })\n\n;; How many uSTX are stacked in a given reward cycle.\n;; Updated when a new PoX address is registered, or when more STX are granted\n;; to it.\n(define-map reward-cycle-total-stacked\n { reward-cycle: uint }\n { total-ustx: uint }\n)\n\n;; Internal map read by the Stacks node to iterate through the list of\n;; PoX reward addresses on a per-reward-cycle basis.\n(define-map reward-cycle-pox-address-list\n { reward-cycle: uint, index: uint }\n {\n pox-addr: { version: (buff 1), hashbytes: (buff 32) },\n total-ustx: uint,\n stacker: (optional principal)\n }\n)\n\n(define-map reward-cycle-pox-address-list-len\n { reward-cycle: uint }\n { len: uint }\n)\n\n;; how much has been locked up for this address before\n;; committing?\n;; this map allows stackers to stack amounts < minimum\n;; by paying the cost of aggregation during the commit\n(define-map partial-stacked-by-cycle\n { \n pox-addr: { version: (buff 1), hashbytes: (buff 32) },\n reward-cycle: uint,\n sender: principal\n }\n { stacked-amount: uint }\n)\n\n;; Amount of uSTX that reject PoX, by reward cycle\n(define-map stacking-rejection\n { reward-cycle: uint }\n { amount: uint }\n)\n\n;; Who rejected in which reward cycle\n(define-map stacking-rejectors\n { stacker: principal, reward-cycle: uint }\n { amount: uint }\n)\n\n;; Getter for stacking-rejectors\n(define-read-only (get-pox-rejection (stacker principal) (reward-cycle uint))\n (map-get? stacking-rejectors { stacker: stacker, reward-cycle: reward-cycle }))\n\n;; Has PoX been rejected in the given reward cycle?\n(define-read-only (is-pox-active (reward-cycle uint))\n (let (\n (reject-votes \n (default-to\n u0\n (get amount (map-get? stacking-rejection { reward-cycle: reward-cycle }))))\n )\n ;; (100 * reject-votes) / stx-liquid-supply < pox-rejection-fraction \n (< (* u100 reject-votes) \n (* (var-get pox-rejection-fraction) stx-liquid-supply)))\n)\n\n;; What's the reward cycle number of the burnchain block height?\n;; Will runtime-abort if height is less than the first burnchain block (this is intentional)\n(define-read-only (burn-height-to-reward-cycle (height uint)) \n (/ (- height (var-get first-burnchain-block-height)) (var-get pox-reward-cycle-length)))\n\n;; What's the block height at the start of a given reward cycle?\n(define-read-only (reward-cycle-to-burn-height (cycle uint))\n (+ (var-get first-burnchain-block-height) (* cycle (var-get pox-reward-cycle-length))))\n\n;; What's the current PoX reward cycle?\n(define-read-only (current-pox-reward-cycle)\n (burn-height-to-reward-cycle burn-block-height))\n\n;; Get the _current_ PoX stacking principal information. If the information\n;; is expired, or if there's never been such a stacker, then returns none.\n(define-read-only (get-stacker-info (stacker principal))\n (match (map-get? stacking-state { stacker: stacker })\n stacking-info\n (if (<= (+ (get first-reward-cycle stacking-info) (get lock-period stacking-info)) (current-pox-reward-cycle))\n ;; present, but lock has expired\n none\n ;; present, and lock has not expired\n (some stacking-info)\n )\n ;; no state at all\n none\n ))\n\n(define-read-only (check-caller-allowed)\n (or (is-eq tx-sender contract-caller)\n (let ((caller-allowed \n ;; if not in the caller map, return false\n (unwrap! (map-get? allowance-contract-callers\n { sender: tx-sender, contract-caller: contract-caller })\n false))\n (expires-at\n ;; if until-burn-ht not set, then return true (because no expiry)\n (unwrap! (get until-burn-ht caller-allowed) true)))\n ;; is the caller allowance expired?\n (if (>= burn-block-height expires-at)\n false\n true))))\n\n(define-read-only (get-check-delegation (stacker principal))\n (let ((delegation-info (try! (map-get? delegation-state { stacker: stacker }))))\n ;; did the existing delegation expire?\n (if (match (get until-burn-ht delegation-info)\n until-burn-ht (> burn-block-height until-burn-ht)\n false)\n ;; it expired, return none\n none\n ;; delegation is active\n (some delegation-info))))\n\n;; Get the size of the reward set for a reward cycle.\n;; Note that this does _not_ return duplicate PoX addresses.\n;; Note that this also _will_ return PoX addresses that are beneath\n;; the minimum threshold -- i.e. the threshold can increase after insertion.\n;; Used internally by the Stacks node, which filters out the entries\n;; in this map to select PoX addresses with enough STX.\n(define-read-only (get-reward-set-size (reward-cycle uint))\n (default-to\n u0\n (get len (map-get? reward-cycle-pox-address-list-len { reward-cycle: reward-cycle }))))\n\n;; How many rejection votes have we been accumulating for the next block\n(define-read-only (next-cycle-rejection-votes)\n (default-to\n u0\n (get amount (map-get? stacking-rejection { reward-cycle: (+ u1 (current-pox-reward-cycle)) }))))\n\n;; Add a single PoX address to a single reward cycle.\n;; Used to build up a set of per-reward-cycle PoX addresses.\n;; No checking will be done -- don't call if this PoX address is already registered in this reward cycle!\n;; Returns the index into the reward cycle that the PoX address is stored to\n(define-private (append-reward-cycle-pox-addr (pox-addr (tuple (version (buff 1)) (hashbytes (buff 32))))\n (reward-cycle uint)\n (amount-ustx uint)\n (stacker (optional principal)))\n (let ((sz (get-reward-set-size reward-cycle)))\n (map-set reward-cycle-pox-address-list\n { reward-cycle: reward-cycle, index: sz }\n { pox-addr: pox-addr, total-ustx: amount-ustx, stacker: stacker })\n (map-set reward-cycle-pox-address-list-len\n { reward-cycle: reward-cycle }\n { len: (+ u1 sz) })\n sz))\n\n;; How many uSTX are stacked?\n(define-read-only (get-total-ustx-stacked (reward-cycle uint))\n (default-to\n u0\n (get total-ustx (map-get? reward-cycle-total-stacked { reward-cycle: reward-cycle })))\n)\n\n;; Called internally by the node to iterate through the list of PoX addresses in this reward cycle.\n;; Returns (optional (tuple (pox-addr <pox-address>) (total-ustx <uint>)))\n(define-read-only (get-reward-set-pox-address (reward-cycle uint) (index uint))\n (map-get? reward-cycle-pox-address-list { reward-cycle: reward-cycle, index: index }))\n\n(define-private (fold-unlock-reward-cycle (set-index uint)\n (data-res (response { cycle: uint,\n first-unlocked-cycle: uint,\n stacker: principal\n } int)))\n (let ((data (try! data-res))\n (cycle (get cycle data))\n (first-unlocked-cycle (get first-unlocked-cycle data)))\n ;; if current-cycle hasn't reached first-unlocked-cycle, just continue to next iter\n (asserts! (>= cycle first-unlocked-cycle) (ok (merge data { cycle: (+ u1 cycle) })))\n (let ((cycle-entry (unwrap-panic (map-get? reward-cycle-pox-address-list { reward-cycle: cycle, index: set-index })))\n (cycle-entry-u (get stacker cycle-entry))\n (cycle-entry-total-ustx (get total-ustx cycle-entry))\n (cycle-last-entry-ix (- (get len (unwrap-panic (map-get? reward-cycle-pox-address-list-len { reward-cycle: cycle }))) u1)))\n (asserts! (is-eq cycle-entry-u (some (get stacker data))) (err ERR_STACKING_CORRUPTED_STATE))\n (if (not (is-eq cycle-last-entry-ix set-index))\n ;; do a \"move\" if the entry to remove isn't last\n (let ((move-entry (unwrap-panic (map-get? reward-cycle-pox-address-list { reward-cycle: cycle, index: cycle-last-entry-ix }))))\n (map-set reward-cycle-pox-address-list\n { reward-cycle: cycle, index: set-index }\n move-entry)\n (match (get stacker move-entry) moved-stacker\n ;; if the moved entry had an associated stacker, update its state\n (let ((moved-state (unwrap-panic (map-get? stacking-state { stacker: moved-stacker })))\n ;; calculate the index into the reward-set-indexes that `cycle` is at\n (moved-cycle-index (- cycle (get first-reward-cycle moved-state)))\n (moved-reward-list (get reward-set-indexes moved-state))\n ;; reward-set-indexes[moved-cycle-index] = set-index via slice, append, concat.\n (update-list (unwrap-panic (replace-at moved-reward-list moved-cycle-index set-index))))\n (map-set stacking-state { stacker: moved-stacker }\n (merge moved-state { reward-set-indexes: update-list })))\n ;; otherwise, we dont need to update stacking-state after move\n true))\n ;; if not moving, just noop\n true)\n ;; in all cases, we now need to delete the last list entry\n (map-delete reward-cycle-pox-address-list { reward-cycle: cycle, index: cycle-last-entry-ix })\n (map-set reward-cycle-pox-address-list-len { reward-cycle: cycle } { len: cycle-last-entry-ix })\n ;; finally, update `reward-cycle-total-stacked`\n (map-set reward-cycle-total-stacked { reward-cycle: cycle }\n { total-ustx: (- (get total-ustx (unwrap-panic (map-get? reward-cycle-total-stacked { reward-cycle: cycle })))\n cycle-entry-total-ustx) })\n (ok (merge data { cycle: (+ u1 cycle)} )))))\n\n;; This method is called by the Stacks block processor directly in order to handle the contract state mutations\n;; associated with an early unlock. This can only be invoked by the block processor: it is private, and no methods\n;; from this contract invoke it.\n(define-private (handle-unlock (user principal) (amount-locked uint) (cycle-to-unlock uint))\n (let ((user-stacking-state (unwrap-panic (map-get? stacking-state { stacker: user })))\n (first-cycle-locked (get first-reward-cycle user-stacking-state))\n (reward-set-indexes (get reward-set-indexes user-stacking-state)))\n ;; iterate over each reward set the user is a member of, and remove them from the sets. only apply to reward sets after cycle-to-unlock.\n (try! (fold fold-unlock-reward-cycle reward-set-indexes (ok { cycle: first-cycle-locked, first-unlocked-cycle: cycle-to-unlock, stacker: user })))\n ;; Now that we've cleaned up all the reward set entries for the user, delete the user's stacking-state\n (map-delete stacking-state { stacker: user })\n (ok true)))\n\n;; Add a PoX address to the `cycle-index`-th reward cycle, if `cycle-index` is between 0 and the given num-cycles (exclusive).\n;; Arguments are given as a tuple, so this function can be (folded ..)'ed onto a list of its arguments.\n;; Used by add-pox-addr-to-reward-cycles.\n;; No checking is done.\n;; The returned tuple is the same as inputted `params`, but the `i` field is incremented if\n;; the pox-addr was added to the given cycle. \n(define-private (add-pox-addr-to-ith-reward-cycle (cycle-index uint) (params (tuple \n (pox-addr (tuple (version (buff 1)) (hashbytes (buff 32))))\n (reward-set-indexes (list 12 uint))\n (first-reward-cycle uint)\n (num-cycles uint)\n (stacker (optional principal))\n (amount-ustx uint)\n (i uint))))\n (let ((reward-cycle (+ (get first-reward-cycle params) (get i params)))\n (num-cycles (get num-cycles params))\n (i (get i params))\n (reward-set-index (if (< i num-cycles)\n (let ((total-ustx (get-total-ustx-stacked reward-cycle))\n (reward-index\n ;; record how many uSTX this pox-addr will stack for in the given reward cycle\n (append-reward-cycle-pox-addr\n (get pox-addr params)\n reward-cycle\n (get amount-ustx params)\n (get stacker params)\n )))\n ;; update running total\n (map-set reward-cycle-total-stacked\n { reward-cycle: reward-cycle }\n { total-ustx: (+ (get amount-ustx params) total-ustx) })\n (some reward-index))\n none))\n (next-i (if (< i num-cycles) (+ i u1) i)))\n {\n pox-addr: (get pox-addr params),\n first-reward-cycle: (get first-reward-cycle params),\n num-cycles: num-cycles,\n amount-ustx: (get amount-ustx params),\n stacker: (get stacker params),\n reward-set-indexes: (match \n reward-set-index new (unwrap-panic (as-max-len? (append (get reward-set-indexes params) new) u12))\n (get reward-set-indexes params)),\n i: next-i\n }))\n\n;; Add a PoX address to a given sequence of reward cycle lists.\n;; A PoX address can be added to at most 12 consecutive cycles.\n;; No checking is done.\n(define-private (add-pox-addr-to-reward-cycles (pox-addr (tuple (version (buff 1)) (hashbytes (buff 32))))\n (first-reward-cycle uint)\n (num-cycles uint)\n (amount-ustx uint)\n (stacker principal))\n (let ((cycle-indexes (list u0 u1 u2 u3 u4 u5 u6 u7 u8 u9 u10 u11))\n (results (fold add-pox-addr-to-ith-reward-cycle cycle-indexes \n { pox-addr: pox-addr, first-reward-cycle: first-reward-cycle, num-cycles: num-cycles, \n reward-set-indexes: (list), amount-ustx: amount-ustx, i: u0, stacker: (some stacker) }))\n (reward-set-indexes (get reward-set-indexes results)))\n ;; For safety, add up the number of times (add-principal-to-ith-reward-cycle) returns 1.\n ;; It _should_ be equal to num-cycles.\n (asserts! (is-eq num-cycles (get i results)) (err ERR_STACKING_UNREACHABLE))\n (asserts! (is-eq num-cycles (len reward-set-indexes)) (err ERR_STACKING_UNREACHABLE))\n (ok reward-set-indexes)))\n\n(define-private (add-pox-partial-stacked-to-ith-cycle\n (cycle-index uint)\n (params { pox-addr: { version: (buff 1), hashbytes: (buff 32) },\n reward-cycle: uint,\n num-cycles: uint,\n amount-ustx: uint }))\n (let ((pox-addr (get pox-addr params))\n (num-cycles (get num-cycles params))\n (reward-cycle (get reward-cycle params))\n (amount-ustx (get amount-ustx params)))\n (let ((current-amount\n (default-to u0\n (get stacked-amount\n (map-get? partial-stacked-by-cycle { sender: tx-sender, pox-addr: pox-addr, reward-cycle: reward-cycle })))))\n (if (>= cycle-index num-cycles)\n ;; do not add to cycles >= cycle-index\n false\n ;; otherwise, add to the partial-stacked-by-cycle\n (map-set partial-stacked-by-cycle\n { sender: tx-sender, pox-addr: pox-addr, reward-cycle: reward-cycle }\n { stacked-amount: (+ amount-ustx current-amount) }))\n ;; produce the next params tuple\n { pox-addr: pox-addr,\n reward-cycle: (+ u1 reward-cycle),\n num-cycles: num-cycles,\n amount-ustx: amount-ustx })))\n\n;; Add a PoX address to a given sequence of partial reward cycle lists.\n;; A PoX address can be added to at most 12 consecutive cycles.\n;; No checking is done.\n(define-private (add-pox-partial-stacked (pox-addr (tuple (version (buff 1)) (hashbytes (buff 32))))\n (first-reward-cycle uint)\n (num-cycles uint)\n (amount-ustx uint))\n (let ((cycle-indexes (list u0 u1 u2 u3 u4 u5 u6 u7 u8 u9 u10 u11)))\n (fold add-pox-partial-stacked-to-ith-cycle cycle-indexes \n { pox-addr: pox-addr, reward-cycle: first-reward-cycle, num-cycles: num-cycles, amount-ustx: amount-ustx })\n true))\n\n;; What is the minimum number of uSTX to be stacked in the given reward cycle?\n;; Used internally by the Stacks node, and visible publicly.\n(define-read-only (get-stacking-minimum)\n (/ stx-liquid-supply STACKING_THRESHOLD_25))\n\n;; Is the address mode valid for a PoX address?\n(define-read-only (check-pox-addr-version (version (buff 1)))\n (<= (buff-to-uint-be version) MAX_ADDRESS_VERSION))\n\n;; Is this buffer the right length for the given PoX address?\n(define-read-only (check-pox-addr-hashbytes (version (buff 1)) (hashbytes (buff 32)))\n (if (<= (buff-to-uint-be version) MAX_ADDRESS_VERSION_BUFF_20)\n (is-eq (len hashbytes) u20)\n (if (<= (buff-to-uint-be version) MAX_ADDRESS_VERSION_BUFF_32)\n (is-eq (len hashbytes) u32)\n false)))\n\n;; Is the given lock period valid?\n(define-read-only (check-pox-lock-period (lock-period uint)) \n (and (>= lock-period MIN_POX_REWARD_CYCLES) \n (<= lock-period MAX_POX_REWARD_CYCLES)))\n\n;; Evaluate if a participant can stack an amount of STX for a given period.\n;; This method is designed as a read-only method so that it can be used as \n;; a set of guard conditions and also as a read-only RPC call that can be\n;; performed beforehand.\n(define-read-only (can-stack-stx (pox-addr (tuple (version (buff 1)) (hashbytes (buff 32))))\n (amount-ustx uint)\n (first-reward-cycle uint)\n (num-cycles uint))\n (begin\n ;; minimum uSTX must be met\n (asserts! (<= (get-stacking-minimum) amount-ustx)\n (err ERR_STACKING_THRESHOLD_NOT_MET))\n\n (minimal-can-stack-stx pox-addr amount-ustx first-reward-cycle num-cycles)))\n\n;; Evaluate if a participant can stack an amount of STX for a given period.\n;; This method is designed as a read-only method so that it can be used as \n;; a set of guard conditions and also as a read-only RPC call that can be\n;; performed beforehand.\n(define-read-only (minimal-can-stack-stx \n (pox-addr (tuple (version (buff 1)) (hashbytes (buff 32))))\n (amount-ustx uint)\n (first-reward-cycle uint)\n (num-cycles uint))\n (begin\n ;; amount must be valid\n (asserts! (> amount-ustx u0)\n (err ERR_STACKING_INVALID_AMOUNT))\n\n ;; sender principal must not have rejected in this upcoming reward cycle\n (asserts! (is-none (get-pox-rejection tx-sender first-reward-cycle))\n (err ERR_STACKING_ALREADY_REJECTED))\n\n ;; lock period must be in acceptable range.\n (asserts! (check-pox-lock-period num-cycles)\n (err ERR_STACKING_INVALID_LOCK_PERIOD))\n\n ;; address version must be valid\n (asserts! (check-pox-addr-version (get version pox-addr))\n (err ERR_STACKING_INVALID_POX_ADDRESS))\n\n ;; address hashbytes must be valid for the version\n (asserts! (check-pox-addr-hashbytes (get version pox-addr) (get hashbytes pox-addr))\n (err ERR_STACKING_INVALID_POX_ADDRESS))\n\n (ok true)))\n\n;; Revoke contract-caller authorization to call stacking methods\n(define-public (disallow-contract-caller (caller principal))\n (begin \n (asserts! (is-eq tx-sender contract-caller)\n (err ERR_STACKING_PERMISSION_DENIED))\n (ok (map-delete allowance-contract-callers { sender: tx-sender, contract-caller: caller }))))\n\n;; Give a contract-caller authorization to call stacking methods\n;; normally, stacking methods may only be invoked by _direct_ transactions\n;; (i.e., the tx-sender issues a direct contract-call to the stacking methods)\n;; by issuing an allowance, the tx-sender may call through the allowed contract\n(define-public (allow-contract-caller (caller principal) (until-burn-ht (optional uint)))\n (begin\n (asserts! (is-eq tx-sender contract-caller)\n (err ERR_STACKING_PERMISSION_DENIED))\n (ok (map-set allowance-contract-callers\n { sender: tx-sender, contract-caller: caller }\n { until-burn-ht: until-burn-ht }))))\n\n;; Lock up some uSTX for stacking! Note that the given amount here is in micro-STX (uSTX).\n;; The STX will be locked for the given number of reward cycles (lock-period).\n;; This is the self-service interface. tx-sender will be the Stacker.\n;;\n;; * The given stacker cannot currently be stacking.\n;; * You will need the minimum uSTX threshold. This will be determined by (get-stacking-minimum)\n;; at the time this method is called.\n;; * You may need to increase the amount of uSTX locked up later, since the minimum uSTX threshold\n;; may increase between reward cycles.\n;; * The Stacker will receive rewards in the reward cycle following `start-burn-ht`.\n;; Importantly, `start-burn-ht` may not be further into the future than the next reward cycle,\n;; and in most cases should be set to the current burn block height.\n;;\n;; The tokens will unlock and be returned to the Stacker (tx-sender) automatically.\n(define-public (stack-stx (amount-ustx uint)\n (pox-addr (tuple (version (buff 1)) (hashbytes (buff 32))))\n (start-burn-ht uint)\n (lock-period uint))\n ;; this stacker's first reward cycle is the _next_ reward cycle\n (let ((first-reward-cycle (+ u1 (current-pox-reward-cycle)))\n (specified-reward-cycle (+ u1 (burn-height-to-reward-cycle start-burn-ht))))\n ;; the start-burn-ht must result in the next reward cycle, do not allow stackers\n ;; to \"post-date\" their `stack-stx` transaction\n (asserts! (is-eq first-reward-cycle specified-reward-cycle)\n (err ERR_INVALID_START_BURN_HEIGHT))\n\n ;; must be called directly by the tx-sender or by an allowed contract-caller\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n\n ;; tx-sender principal must not be stacking\n (asserts! (is-none (get-stacker-info tx-sender))\n (err ERR_STACKING_ALREADY_STACKED))\n\n ;; tx-sender must not be delegating\n (asserts! (is-none (get-check-delegation tx-sender))\n (err ERR_STACKING_ALREADY_DELEGATED))\n\n ;; the Stacker must have sufficient unlocked funds\n (asserts! (>= (stx-get-balance tx-sender) amount-ustx)\n (err ERR_STACKING_INSUFFICIENT_FUNDS))\n\n ;; ensure that stacking can be performed\n (try! (can-stack-stx pox-addr amount-ustx first-reward-cycle lock-period))\n\n ;; register the PoX address with the amount stacked\n (let ((reward-set-indexes (try! (add-pox-addr-to-reward-cycles pox-addr first-reward-cycle lock-period amount-ustx tx-sender))))\n ;; add stacker record\n (map-set stacking-state\n { stacker: tx-sender }\n { pox-addr: pox-addr,\n reward-set-indexes: reward-set-indexes,\n first-reward-cycle: first-reward-cycle,\n lock-period: lock-period })\n\n ;; return the lock-up information, so the node can actually carry out the lock. \n (ok { stacker: tx-sender, lock-amount: amount-ustx, unlock-burn-height: (reward-cycle-to-burn-height (+ first-reward-cycle lock-period)) }))))\n\n(define-public (revoke-delegate-stx)\n (begin\n ;; must be called directly by the tx-sender or by an allowed contract-caller\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n (ok (map-delete delegation-state { stacker: tx-sender }))))\n\n;; Delegate to `delegate-to` the ability to stack from a given address.\n;; This method _does not_ lock the funds, rather, it allows the delegate\n;; to issue the stacking lock.\n;; The caller specifies:\n;; * amount-ustx: the total amount of ustx the delegate may be allowed to lock\n;; * until-burn-ht: an optional burn height at which this delegation expiration\n;; * pox-addr: an optional address to which any rewards *must* be sent\n(define-public (delegate-stx (amount-ustx uint)\n (delegate-to principal)\n (until-burn-ht (optional uint))\n (pox-addr (optional { version: (buff 1),\n hashbytes: (buff 32) })))\n (begin\n ;; must be called directly by the tx-sender or by an allowed contract-caller\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n\n ;; delegate-stx no longer requires the delegator to not currently\n ;; be stacking.\n\n ;; pox-addr, if given, must be valid\n (match pox-addr\n address\n (asserts! (check-pox-addr-version (get version address))\n (err ERR_STACKING_INVALID_POX_ADDRESS))\n true)\n\n ;; tx-sender must not be delegating\n (asserts! (is-none (get-check-delegation tx-sender))\n (err ERR_STACKING_ALREADY_DELEGATED))\n\n ;; add delegation record\n (map-set delegation-state\n { stacker: tx-sender }\n { amount-ustx: amount-ustx,\n delegated-to: delegate-to,\n until-burn-ht: until-burn-ht,\n pox-addr: pox-addr })\n\n (ok true)))\n\n;; Commit partially stacked STX.\n;; This allows a stacker/delegate to lock fewer STX than the minimal threshold in multiple transactions,\n;; so long as: 1. The pox-addr is the same.\n;; 2. This \"commit\" transaction is called _before_ the PoX anchor block.\n;; This ensures that each entry in the reward set returned to the stacks-node is greater than the threshold,\n;; but does not require it be all locked up within a single transaction\n(define-public (stack-aggregation-commit (pox-addr { version: (buff 1), hashbytes: (buff 32) })\n (reward-cycle uint))\n (let ((partial-stacked\n ;; fetch the partial commitments\n (unwrap! (map-get? partial-stacked-by-cycle { pox-addr: pox-addr, sender: tx-sender, reward-cycle: reward-cycle })\n (err ERR_STACKING_NO_SUCH_PRINCIPAL))))\n ;; must be called directly by the tx-sender or by an allowed contract-caller\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n (let ((amount-ustx (get stacked-amount partial-stacked)))\n (try! (can-stack-stx pox-addr amount-ustx reward-cycle u1))\n ;; add the pox addr to the reward cycle\n (add-pox-addr-to-ith-reward-cycle\n u0\n { pox-addr: pox-addr,\n first-reward-cycle: reward-cycle,\n num-cycles: u1,\n reward-set-indexes: (list),\n stacker: none,\n amount-ustx: amount-ustx,\n i: u0 })\n ;; don't update the stacking-state map,\n ;; because it _already has_ this stacker's state\n ;; don't lock the STX, because the STX is already locked\n ;;\n ;; clear the partial-stacked state\n (map-delete partial-stacked-by-cycle { pox-addr: pox-addr, sender: tx-sender, reward-cycle: reward-cycle })\n (ok true))))\n\n;; As a delegate, stack the given principal's STX using partial-stacked-by-cycle\n;; Once the delegate has stacked > minimum, the delegate should call stack-aggregation-commit\n(define-public (delegate-stack-stx (stacker principal)\n (amount-ustx uint)\n (pox-addr { version: (buff 1), hashbytes: (buff 32) })\n (start-burn-ht uint)\n (lock-period uint))\n ;; this stacker's first reward cycle is the _next_ reward cycle\n (let ((first-reward-cycle (+ u1 (current-pox-reward-cycle)))\n (specified-reward-cycle (+ u1 (burn-height-to-reward-cycle start-burn-ht)))\n (unlock-burn-height (reward-cycle-to-burn-height (+ (current-pox-reward-cycle) u1 lock-period))))\n ;; the start-burn-ht must result in the next reward cycle, do not allow stackers\n ;; to \"post-date\" their `stack-stx` transaction\n (asserts! (is-eq first-reward-cycle specified-reward-cycle)\n (err ERR_INVALID_START_BURN_HEIGHT))\n\n ;; must be called directly by the tx-sender or by an allowed contract-caller\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n\n ;; stacker must have delegated to the caller\n (let ((delegation-info (unwrap! (get-check-delegation stacker) (err ERR_STACKING_PERMISSION_DENIED))))\n ;; must have delegated to tx-sender\n (asserts! (is-eq (get delegated-to delegation-info) tx-sender)\n (err ERR_STACKING_PERMISSION_DENIED))\n ;; must have delegated enough stx\n (asserts! (>= (get amount-ustx delegation-info) amount-ustx)\n (err ERR_DELEGATION_TOO_MUCH_LOCKED))\n ;; if pox-addr is set, must be equal to pox-addr\n (asserts! (match (get pox-addr delegation-info)\n specified-pox-addr (is-eq pox-addr specified-pox-addr)\n true)\n (err ERR_DELEGATION_POX_ADDR_REQUIRED))\n ;; delegation must not expire before lock period\n (asserts! (match (get until-burn-ht delegation-info)\n until-burn-ht (>= until-burn-ht\n unlock-burn-height)\n true)\n (err ERR_DELEGATION_EXPIRES_DURING_LOCK)))\n\n ;; stacker principal must not be stacking\n (asserts! (is-none (get-stacker-info stacker))\n (err ERR_STACKING_ALREADY_STACKED))\n\n ;; the Stacker must have sufficient unlocked funds\n (asserts! (>= (stx-get-balance stacker) amount-ustx)\n (err ERR_STACKING_INSUFFICIENT_FUNDS))\n\n ;; ensure that stacking can be performed\n (try! (minimal-can-stack-stx pox-addr amount-ustx first-reward-cycle lock-period))\n\n ;; register the PoX address with the amount stacked via partial stacking\n ;; before it can be included in the reward set, this must be committed!\n (add-pox-partial-stacked pox-addr first-reward-cycle lock-period amount-ustx)\n\n ;; add stacker record\n (map-set stacking-state\n { stacker: stacker }\n { pox-addr: pox-addr,\n first-reward-cycle: first-reward-cycle,\n reward-set-indexes: (list),\n lock-period: lock-period })\n\n ;; return the lock-up information, so the node can actually carry out the lock. \n (ok { stacker: stacker,\n lock-amount: amount-ustx,\n unlock-burn-height: unlock-burn-height })))\n\n;; Reject Stacking for this reward cycle.\n;; tx-sender votes all its uSTX for rejection.\n;; Note that unlike PoX, rejecting PoX does not lock the tx-sender's\n;; tokens. PoX rejection acts like a coin vote.\n(define-public (reject-pox)\n (let (\n (balance (stx-get-balance tx-sender))\n (vote-reward-cycle (+ u1 (current-pox-reward-cycle)))\n )\n\n ;; tx-sender principal must not have rejected in this upcoming reward cycle\n (asserts! (is-none (get-pox-rejection tx-sender vote-reward-cycle))\n (err ERR_STACKING_ALREADY_REJECTED))\n\n ;; tx-sender can't be a stacker\n (asserts! (is-none (get-stacker-info tx-sender))\n (err ERR_STACKING_ALREADY_STACKED))\n\n ;; vote for rejection\n (map-set stacking-rejection\n { reward-cycle: vote-reward-cycle }\n { amount: (+ (next-cycle-rejection-votes) balance) }\n )\n\n ;; mark voted\n (map-set stacking-rejectors\n { stacker: tx-sender, reward-cycle: vote-reward-cycle }\n { amount: balance }\n )\n\n (ok true))\n)\n\n;; Used for PoX parameters discovery\n(define-read-only (get-pox-info)\n (ok {\n min-amount-ustx: (get-stacking-minimum),\n reward-cycle-id: (current-pox-reward-cycle),\n prepare-cycle-length: (var-get pox-prepare-cycle-length),\n first-burnchain-block-height: (var-get first-burnchain-block-height),\n reward-cycle-length: (var-get pox-reward-cycle-length),\n rejection-fraction: (var-get pox-rejection-fraction),\n current-rejection-votes: (next-cycle-rejection-votes),\n total-liquid-supply-ustx: stx-liquid-supply,\n })\n)\n\n(define-private (increase-reward-cycle-entry \n (reward-cycle-index uint)\n (updates (optional { first-cycle: uint, reward-cycle: uint, stacker: principal, add-amount: uint })))\n (let ((data (try! updates))\n (first-cycle (get first-cycle data))\n (reward-cycle (get reward-cycle data)))\n (if (> first-cycle reward-cycle)\n ;; not at first cycle to process yet\n (some { first-cycle: first-cycle, reward-cycle: (+ u1 reward-cycle), stacker: (get stacker data), add-amount: (get add-amount data) })\n (let ((existing-entry (unwrap-panic (map-get? reward-cycle-pox-address-list { reward-cycle: reward-cycle, index: reward-cycle-index })))\n (existing-total (unwrap-panic (map-get? reward-cycle-total-stacked { reward-cycle: reward-cycle })))\n (total-ustx (+ (get total-ustx existing-total) (get add-amount data))))\n ;; stacker must match\n (asserts! (is-eq (get stacker existing-entry) (some (get stacker data))) none)\n ;; update the pox-address list\n (map-set reward-cycle-pox-address-list\n { reward-cycle: reward-cycle, index: reward-cycle-index }\n { pox-addr: (get pox-addr existing-entry),\n total-ustx: total-ustx,\n stacker: (some (get stacker data)) })\n ;; update the total\n (map-set reward-cycle-total-stacked \n { reward-cycle: reward-cycle }\n { total-ustx: total-ustx })\n (some { first-cycle: first-cycle,\n reward-cycle: (+ u1 reward-cycle),\n stacker: (get stacker data),\n add-amount: (get add-amount data) })))))\n\n(define-public (stack-increase (increase-by uint))\n (let ((stacker-info (stx-account tx-sender))\n (amount-stacked (get locked stacker-info))\n (amount-unlocked (get unlocked stacker-info))\n (unlock-height (get unlock-height stacker-info))\n (unlock-in-cycle (burn-height-to-reward-cycle unlock-height))\n (cur-cycle (current-pox-reward-cycle))\n (first-increased-cycle (+ cur-cycle u1))\n (stacker-state (unwrap! (map-get? stacking-state \n { stacker: tx-sender })\n (err ERR_STACK_EXTEND_NOT_LOCKED))))\n (asserts! (> amount-stacked u0)\n (err ERR_STACK_EXTEND_NOT_LOCKED))\n (asserts! (>= increase-by u1)\n (err ERR_STACKING_INVALID_AMOUNT))\n (asserts! (>= amount-unlocked increase-by)\n (err ERR_STACKING_INSUFFICIENT_FUNDS))\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n ;; stacker must be directly stacking\n (asserts! (> (len (get reward-set-indexes stacker-state)) u0)\n (err ERR_STACKING_ALREADY_DELEGATED))\n ;; update reward cycle amounts\n (asserts! (is-some (fold increase-reward-cycle-entry \n (get reward-set-indexes stacker-state)\n (some { first-cycle: first-increased-cycle,\n reward-cycle: (get first-reward-cycle stacker-state),\n stacker: tx-sender,\n add-amount: increase-by })))\n (err ERR_STACKING_UNREACHABLE))\n ;; NOTE: stacking-state map is unchanged: it no longer tracks amount-stacked in PoX-2\n (ok { stacker: tx-sender, total-locked: (+ amount-stacked increase-by)})))\n\n;; Extend an active stacking lock.\n;; *New in Stacks 2.1*\n;; This method extends the `tx-sender`'s current lockup for an additional `extend-count`\n;; and associates `pox-addr` with the rewards\n(define-public (stack-extend (extend-count uint)\n (pox-addr { version: (buff 1), hashbytes: (buff 32) }))\n (let ((stacker-info (stx-account tx-sender))\n (stacker-state (get-stacker-info tx-sender))\n (amount-ustx (get locked stacker-info))\n (unlock-height (get unlock-height stacker-info))\n (cur-cycle (current-pox-reward-cycle))\n (unlock-in-cycle (burn-height-to-reward-cycle unlock-height))\n ;; if the account unlocks *during* this cycle (should only occur during testing),\n ;; set first-extend-cycle to the next cycle.\n (first-extend-cycle (if (> (+ cur-cycle u1) unlock-in-cycle)\n (+ cur-cycle u1) unlock-in-cycle))\n ;; maintaining valid stacking-state entries requires checking\n ;; whether there is an existing entry for the stacker in the state\n ;; this would be the case if the stacker is extending a lockup from PoX-1\n ;; to PoX-2\n (first-reward-cycle (match (get first-reward-cycle stacker-state)\n ;; if we've stacked in PoX2, then max(cur-cycle, stacker-state.first-reward-cycle) is valid\n old-first-cycle (if (> cur-cycle old-first-cycle) cur-cycle old-first-cycle)\n ;; otherwise, there aren't PoX2 entries until first-extend-cycle\n first-extend-cycle)))\n\n ;; must be called with positive extend-count\n (asserts! (>= extend-count u1)\n (err ERR_STACKING_INVALID_LOCK_PERIOD))\n\n (let ((last-extend-cycle (- (+ first-extend-cycle extend-count) u1))\n (lock-period (+ u1 (- last-extend-cycle first-reward-cycle)))\n (new-unlock-ht (reward-cycle-to-burn-height (+ u1 last-extend-cycle))))\n\n ;; first cycle must be after the current cycle\n (asserts! (> first-extend-cycle cur-cycle) (err ERR_STACKING_INVALID_LOCK_PERIOD))\n ;; lock period must be positive\n (asserts! (> lock-period u0) (err ERR_STACKING_INVALID_LOCK_PERIOD))\n\n ;; must be called directly by the tx-sender or by an allowed contract-caller\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n\n ;; tx-sender must be locked\n (asserts! (> amount-ustx u0)\n (err ERR_STACK_EXTEND_NOT_LOCKED))\n\n ;; tx-sender must not be delegating\n (asserts! (is-none (get-check-delegation tx-sender))\n (err ERR_STACKING_ALREADY_DELEGATED))\n\n ;; standard can-stack-stx checks\n (try! (can-stack-stx pox-addr amount-ustx first-extend-cycle lock-period))\n\n ;; register the PoX address with the amount stacked\n ;; for the new cycles\n (let ((extended-reward-set-indexes (try! (add-pox-addr-to-reward-cycles pox-addr first-extend-cycle extend-count amount-ustx tx-sender)))\n (reward-set-indexes (match stacker-state\n ;; if there's active stacker state, we need to extend the existing reward-set-indexes\n old-state (let ((cur-cycle-index (- first-reward-cycle (get first-reward-cycle old-state)))\n (old-indexes (get reward-set-indexes old-state))\n ;; build index list by taking the old-indexes starting from cur cycle\n ;; and adding the new indexes to it. this way, the index is valid starting from the current cycle\n (new-list (concat (default-to (list) (slice old-indexes cur-cycle-index (len old-indexes)))\n extended-reward-set-indexes)))\n (unwrap-panic (as-max-len? new-list u12)))\n extended-reward-set-indexes)))\n ;; update stacker record\n (map-set stacking-state\n { stacker: tx-sender }\n { pox-addr: pox-addr,\n reward-set-indexes: reward-set-indexes,\n first-reward-cycle: first-reward-cycle,\n lock-period: lock-period })\n\n ;; return lock-up information\n (ok { stacker: tx-sender, unlock-burn-height: new-unlock-ht })))))\n\n;; As a delegator, increase an active stacking lock, issuing a \"partial commitment\" for the\n;; increased cycles.\n;; *New in Stacks 2.1*\n;; This method increases `stacker`'s current lockup and partially commits the additional\n;; STX to `pox-addr`\n(define-public (delegate-stack-increase\n (stacker principal)\n (pox-addr { version: (buff 1), hashbytes: (buff 32) })\n (increase-by uint))\n (let ((stacker-info (stx-account stacker))\n (existing-lock (get locked stacker-info))\n (available-stx (get unlocked stacker-info))\n (unlock-height (get unlock-height stacker-info)))\n\n ;; must be called with positive `increase-by`\n (asserts! (>= increase-by u1)\n (err ERR_STACKING_INVALID_AMOUNT))\n\n (let ((unlock-in-cycle (burn-height-to-reward-cycle unlock-height))\n (cur-cycle (current-pox-reward-cycle))\n (first-increase-cycle (+ cur-cycle u1))\n (last-increase-cycle (- unlock-in-cycle u1))\n (cycle-count (try! (if (<= first-increase-cycle last-increase-cycle)\n (ok (+ u1 (- last-increase-cycle first-increase-cycle)))\n (err ERR_STACKING_INVALID_LOCK_PERIOD))))\n (new-total-locked (+ increase-by existing-lock))\n (stacker-state \n (unwrap! (map-get? stacking-state { stacker: stacker })\n (err ERR_STACK_INCREASE_NOT_LOCKED))))\n\n ;; must be called directly by the tx-sender or by an allowed contract-caller\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n\n ;; stacker must be currently locked\n (asserts! (> existing-lock u0)\n (err ERR_STACK_INCREASE_NOT_LOCKED))\n\n ;; stacker must have enough stx to lock\n (asserts! (>= available-stx increase-by)\n (err ERR_STACKING_INSUFFICIENT_FUNDS))\n\n ;; stacker must have delegated to the caller\n (let ((delegation-info (unwrap! (get-check-delegation stacker) (err ERR_STACKING_PERMISSION_DENIED)))\n (delegated-to (get delegated-to delegation-info))\n (delegated-amount (get amount-ustx delegation-info))\n (delegated-pox-addr (get pox-addr delegation-info))\n (delegated-until (get until-burn-ht delegation-info)))\n ;; must have delegated to tx-sender\n (asserts! (is-eq delegated-to tx-sender)\n (err ERR_STACKING_PERMISSION_DENIED))\n ;; must have delegated enough stx\n (asserts! (>= delegated-amount new-total-locked)\n (err ERR_DELEGATION_TOO_MUCH_LOCKED))\n ;; if pox-addr is set, must be equal to pox-addr\n (asserts! (match delegated-pox-addr\n specified-pox-addr (is-eq pox-addr specified-pox-addr)\n true)\n (err ERR_DELEGATION_POX_ADDR_REQUIRED))\n ;; delegation must not expire before lock period\n (asserts! (match delegated-until\n until-burn-ht\n (>= until-burn-ht unlock-height)\n true)\n (err ERR_DELEGATION_EXPIRES_DURING_LOCK)))\n\n ;; delegate stacking does minimal-can-stack-stx\n (try! (minimal-can-stack-stx pox-addr new-total-locked first-increase-cycle (+ u1 (- last-increase-cycle first-increase-cycle))))\n\n ;; register the PoX address with the amount stacked via partial stacking\n ;; before it can be included in the reward set, this must be committed!\n (add-pox-partial-stacked pox-addr first-increase-cycle cycle-count increase-by)\n\n ;; stacking-state is unchanged, so no need to update\n\n ;; return the lock-up information, so the node can actually carry out the lock. \n (ok { stacker: stacker, total-locked: new-total-locked}))))\n\n;; As a delegator, extend an active stacking lock, issuing a \"partial commitment\" for the\n;; extended-to cycles.\n;; *New in Stacks 2.1*\n;; This method extends `stacker`'s current lockup for an additional `extend-count`\n;; and partially commits those new cycles to `pox-addr`\n(define-public (delegate-stack-extend\n (stacker principal)\n (pox-addr { version: (buff 1), hashbytes: (buff 32) })\n (extend-count uint))\n (let ((stacker-info (stx-account stacker))\n (stacker-state (get-stacker-info stacker))\n (amount-ustx (get locked stacker-info))\n (unlock-height (get unlock-height stacker-info))\n (unlock-in-cycle (burn-height-to-reward-cycle unlock-height))\n ;; if the account unlocks *during* this cycle (should only occur during testing),\n ;; set first-extend-cycle to the next cycle.\n (cur-cycle (current-pox-reward-cycle))\n (first-extend-cycle (if (> (+ cur-cycle u1) unlock-in-cycle)\n (+ cur-cycle u1) unlock-in-cycle))\n ;; update stacker record\n ;; maintaining valid stacking-state entries requires checking\n ;; whether there is an existing entry for the stacker in the state\n ;; this would be the case if the stacker is extending a lockup from PoX-1\n ;; to PoX-2\n (first-reward-cycle (match (get first-reward-cycle stacker-state)\n ;; if stacker stacked in PoX2, then max(cur-cycle, stacker-state.first-reward-cycle) is valid\n old-first-cycle (if (> cur-cycle old-first-cycle) cur-cycle old-first-cycle)\n ;; otherwise, there aren't PoX2 entries until first-extend-cycle\n first-extend-cycle)))\n\n ;; must be called with positive extend-count\n (asserts! (>= extend-count u1)\n (err ERR_STACKING_INVALID_LOCK_PERIOD))\n\n (let ((last-extend-cycle (- (+ first-extend-cycle extend-count) u1))\n (lock-period (+ u1 (- last-extend-cycle first-reward-cycle)))\n (new-unlock-ht (reward-cycle-to-burn-height (+ u1 last-extend-cycle))))\n\n ;; first cycle must be after the current cycle\n (asserts! (> first-extend-cycle cur-cycle) (err ERR_STACKING_INVALID_LOCK_PERIOD))\n ;; lock period must be positive\n (asserts! (> lock-period u0) (err ERR_STACKING_INVALID_LOCK_PERIOD))\n\n ;; must be called directly by the tx-sender or by an allowed contract-caller\n (asserts! (check-caller-allowed)\n (err ERR_STACKING_PERMISSION_DENIED))\n\n ;; check valid lock period\n (asserts! (check-pox-lock-period lock-period)\n (err ERR_STACKING_INVALID_LOCK_PERIOD))\n\n ;; stacker must be currently locked\n (asserts! (> amount-ustx u0)\n (err ERR_STACK_EXTEND_NOT_LOCKED))\n\n ;; stacker must have delegated to the caller\n (let ((delegation-info (unwrap! (get-check-delegation stacker) (err ERR_STACKING_PERMISSION_DENIED))))\n ;; must have delegated to tx-sender\n (asserts! (is-eq (get delegated-to delegation-info) tx-sender)\n (err ERR_STACKING_PERMISSION_DENIED))\n ;; must have delegated enough stx\n (asserts! (>= (get amount-ustx delegation-info) amount-ustx)\n (err ERR_DELEGATION_TOO_MUCH_LOCKED))\n ;; if pox-addr is set, must be equal to pox-addr\n (asserts! (match (get pox-addr delegation-info)\n specified-pox-addr (is-eq pox-addr specified-pox-addr)\n true)\n (err ERR_DELEGATION_POX_ADDR_REQUIRED))\n ;; delegation must not expire before lock period\n (asserts! (match (get until-burn-ht delegation-info)\n until-burn-ht (>= until-burn-ht\n new-unlock-ht)\n true)\n (err ERR_DELEGATION_EXPIRES_DURING_LOCK)))\n\n ;; delegate stacking does minimal-can-stack-stx\n (try! (minimal-can-stack-stx pox-addr amount-ustx first-extend-cycle lock-period))\n\n ;; register the PoX address with the amount stacked via partial stacking\n ;; before it can be included in the reward set, this must be committed!\n (add-pox-partial-stacked pox-addr first-extend-cycle extend-count amount-ustx)\n\n (map-set stacking-state\n { stacker: stacker }\n { pox-addr: pox-addr,\n reward-set-indexes: (list),\n first-reward-cycle: first-reward-cycle,\n lock-period: lock-period })\n\n ;; return the lock-up information, so the node can actually carry out the lock. \n (ok { stacker: stacker,\n unlock-burn-height: new-unlock-ht }))))\n\n;; Get the _current_ PoX stacking delegation information for a stacker. If the information\n;; is expired, or if there's never been such a stacker, then returns none.\n;; *New in Stacks 2.1*\n(define-read-only (get-delegation-info (stacker principal))\n (get-check-delegation stacker)\n)\n\n;; Get the burn height at which a particular contract is allowed to stack for a particular principal.\n;; *New in Stacks 2.1*\n;; Returns (some (some X)) if X is the burn height at which the allowance terminates\n;; Returns (some none) if the caller is allowed indefinitely\n;; Returns none if there is no allowance record\n(define-read-only (get-allowance-contract-callers (sender principal) (calling-contract principal))\n (map-get? allowance-contract-callers { sender: sender, contract-caller: calling-contract })\n)\n\n;; How many PoX addresses in this reward cycle?\n;; *New in Stacks 2.1*\n(define-read-only (get-num-reward-set-pox-addresses (reward-cycle uint))\n (match (map-get? reward-cycle-pox-address-list-len { reward-cycle: reward-cycle })\n num-addrs\n (get len num-addrs)\n u0\n )\n)\n\n;; How many uSTX have been locked up for this address so far, before the delegator commits them?\n;; *New in Stacks 2.1*\n(define-read-only (get-partial-stacked-by-cycle (pox-addr { version: (buff 1), hashbytes: (buff 32) }) (reward-cycle uint) (sender principal))\n (map-get? partial-stacked-by-cycle { pox-addr: pox-addr, reward-cycle: reward-cycle, sender: sender })\n)\n\n;; How any uSTX have voted to reject PoX in a given reward cycle?\n;; *New in Stacks 2.1*\n(define-read-only (get-total-pox-rejection (reward-cycle uint))\n (match (map-get? stacking-rejection { reward-cycle: reward-cycle })\n rejected\n (get amount rejected)\n u0\n )\n)\n\n"}}},{"contract_abi":null,"execution_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"microblock_hash":null,"microblock_parent_hash":null,"microblock_sequence":null,"raw_result":"0x0703","raw_tx":"0x808000000004001dc27eba0247f8cc9575e7d45e50a0bc7e72427d00000000000000000000000000000000000103017b0bab03fa451948fbaa174dca0e5e2a1b5a50eb26b98c31e342130ac1c0549a94d85014a0befe96adddbd326e5b2fff3fba5e92986d49048bbdd70b97cb010200000000040000000000000000000000000000000000000000000000000000000000000000","status":"success","tx_index":2,"txid":"0xd7a073f9929b3f652f53d03dc5d6915f54b23b54e5464c4034123abb07c6fd4f","decoded_tx":{"tx_id":"0xd7a073f9929b3f652f53d03dc5d6915f54b23b54e5464c4034123abb07c6fd4f","version":128,"chain_id":2147483648,"auth":{"type_id":4,"origin_condition":{"hash_mode":0,"signer":{"address_version":26,"address_hash_bytes":"0x1dc27eba0247f8cc9575e7d45e50a0bc7e72427d","address":"STEW4ZNT093ZHK4NEQKX8QJGM2Y7WWJ2FQQS5C19"},"nonce":"0","tx_fee":"0","key_encoding":0,"signature":"0x0103017b0bab03fa451948fbaa174dca0e5e2a1b5a50eb26b98c31e342130ac1c0549a94d85014a0befe96adddbd326e5b2fff3fba5e92986d49048bbdd70b97cb"}},"anchor_mode":1,"post_condition_mode":2,"post_conditions":[],"post_conditions_buffer":"0x0200000000","payload":{"type_id":4,"payload_buffer":"0x0000000000000000000000000000000000000000000000000000000000000000"}}}]}]
["/new_burn_block",{"burn_amount":20000,"burn_block_hash":"0x145a60f799ae14b15ca9e8f396a6da02bc3cf475f1f370c9c95d42ba049af5ee","burn_block_height":104,"reward_recipients":[],"reward_slot_holders":[]}]
["/new_block",{"anchored_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"block_hash":"0x3d9fe5cf9691947be7cd6bcd95684979683963391b42ef1ee5c1e2a399d9335f","block_height":2,"burn_block_hash":"0x145a60f799ae14b15ca9e8f396a6da02bc3cf475f1f370c9c95d42ba049af5ee","burn_block_height":104,"burn_block_time":1668078517,"confirmed_microblocks_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"events":[],"index_block_hash":"0x29db7271499d06cc0e9e00ff5fd525a685930900a287400db5c8b4c5443f53c4","matured_miner_rewards":[],"miner_txid":"0xd56b303004d2e8ab54643f47072068ebf6c97cfb952844b1055aef627b602747","parent_block_hash":"0xe074842eca1985317e4b83f9064e4044ea0c4af3ca81bba569280b1b2a08c24b","parent_burn_block_hash":"0x7c45de287b70eb596b40833c2cdbde49282daf41cd0145186d0bcf8f6f9f53d6","parent_burn_block_height":103,"parent_burn_block_timestamp":1668078506,"parent_index_block_hash":"0xddd5c433dc4cfb17a2b1bb6f86a225f8e3e829b47b766f27a4783ef8060bbabe","parent_microblock":"0x0000000000000000000000000000000000000000000000000000000000000000","parent_microblock_sequence":0,"transactions":[{"contract_abi":null,"execution_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"microblock_hash":null,"microblock_parent_hash":null,"microblock_sequence":null,"raw_result":"0x0703","raw_tx":"0x808000000004001dc27eba0247f8cc9575e7d45e50a0bc7e72427d00000000000000010000000000000000000186bb66e596cb610e6c48180321e99533517170dd84a358a952b42ddc1bbd87ab5d10a7c7083267e97ca95088f9c4060ccd0962e6c2fe3908b4a6937bd92633bf010200000000040000000000000000000000000000000000000000000000000000000000000000","status":"success","tx_index":0,"txid":"0x72f31863db37b900762115e63cb75a1265a55860864d12116ff9a233eee00daa","decoded_tx":{"tx_id":"0x72f31863db37b900762115e63cb75a1265a55860864d12116ff9a233eee00daa","version":128,"chain_id":2147483648,"auth":{"type_id":4,"origin_condition":{"hash_mode":0,"signer":{"address_version":26,"address_hash_bytes":"0x1dc27eba0247f8cc9575e7d45e50a0bc7e72427d","address":"STEW4ZNT093ZHK4NEQKX8QJGM2Y7WWJ2FQQS5C19"},"nonce":"1","tx_fee":"0","key_encoding":0,"signature":"0x0186bb66e596cb610e6c48180321e99533517170dd84a358a952b42ddc1bbd87ab5d10a7c7083267e97ca95088f9c4060ccd0962e6c2fe3908b4a6937bd92633bf"}},"anchor_mode":1,"post_condition_mode":2,"post_conditions":[],"post_conditions_buffer":"0x0200000000","payload":{"type_id":4,"payload_buffer":"0x0000000000000000000000000000000000000000000000000000000000000000"}}}]}]
["/new_burn_block",{"burn_amount":20000,"burn_block_hash":"0x62fddc5e10e265a3a4cc2cf357fa31ea51f5cb8d895b670c1006d0758269cdb6","burn_block_height":105,"reward_recipients":[],"reward_slot_holders":[]}]
["/new_block",{"anchored_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"block_hash":"0xab9cc8adf30f0699ddb1bc9ba8e59aa1ff8639390f778e0ab527a828244d3ba5","block_height":3,"burn_block_hash":"0x62fddc5e10e265a3a4cc2cf357fa31ea51f5cb8d895b670c1006d0758269cdb6","burn_block_height":105,"burn_block_time":1668078527,"confirmed_microblocks_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"events":[{"committed":true,"event_index":0,"stx_mint_event":{"amount":"13888888889","recipient":"SN3Z4MMRJ29FVZB38FGYPE94N1D8ZGF55R7YWH00A"},"txid":"0xbff1684ca4957546e454caa3e5a8d4148e5e2a282c1ee5e28739f97537311a73","type":"stx_mint_event"},{"committed":true,"event_index":1,"stx_mint_event":{"amount":"13888888889","recipient":"SN3Z4MMRJ29FVZB38FGYPE94N1D8ZGF55R7YWH00A"},"txid":"0xbff1684ca4957546e454caa3e5a8d4148e5e2a282c1ee5e28739f97537311a73","type":"stx_mint_event"}],"index_block_hash":"0x430dca7b18c8cc4b5deb7e7da746012f26cf206dddbc99b03b901dc37dd6c99c","matured_miner_rewards":[],"miner_txid":"0xb4b84ab2f9d652228c16c7202766b7a8b57e69dfb3f0de0a8a3fc92ab745e8b0","parent_block_hash":"0x3d9fe5cf9691947be7cd6bcd95684979683963391b42ef1ee5c1e2a399d9335f","parent_burn_block_hash":"0x145a60f799ae14b15ca9e8f396a6da02bc3cf475f1f370c9c95d42ba049af5ee","parent_burn_block_height":104,"parent_burn_block_timestamp":1668078517,"parent_index_block_hash":"0x29db7271499d06cc0e9e00ff5fd525a685930900a287400db5c8b4c5443f53c4","parent_microblock":"0x0000000000000000000000000000000000000000000000000000000000000000","parent_microblock_sequence":0,"transactions":[{"contract_abi":null,"execution_cost":{"read_count":0,"read_length":0,"runtime":0,"write_count":0,"write_length":0},"microblock_hash":null,"microblock_parent_hash":null,"microblock_sequence":null,"raw_result":"0x0703","raw_tx":"0x808000000004001dc27eba0247f8cc9575e7d45e50a0bc7e72427d00000000000000020000000000000000000097ec5da1a6bd7ee7705c612af1043ce985576c00e675028154c43036fedca7b552d4a79ac19cc58dcdfbbdcdc8973a1287e4cdb481928441eda60805f42905fe010200000000040000000000000000000000000000000000000000000000000000000000000000","status":"success","tx_index":0,"txid":"0xbff1684ca4957546e454caa3e5a8d4148e5e2a282c1ee5e28739f97537311a73","decoded_tx":{"tx_id":"0xbff1684ca4957546e454caa3e5a8d4148e5e2a282c1ee5e28739f97537311a73","version":128,"chain_id":2147483648,"auth":{"type_id":4,"origin_condition":{"hash_mode":0,"signer":{"address_version":26,"address_hash_bytes":"0x1dc27eba0247f8cc9575e7d45e50a0bc7e72427d","address":"STEW4ZNT093ZHK4NEQKX8QJGM2Y7WWJ2FQQS5C19"},"nonce":"2","tx_fee":"0","key_encoding":0,"signature":"0x0097ec5da1a6bd7ee7705c612af1043ce985576c00e675028154c43036fedca7b552d4a79ac19cc58dcdfbbdcdc8973a1287e4cdb481928441eda60805f42905fe"}},"anchor_mode":1,"post_condition_mode":2,"post_conditions":[],"post_conditions_buffer":"0x0200000000","payload":{"type_id":4,"payload_buffer":"0x0000000000000000000000000000000000000000000000000000000000000000"}}}]}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment