Transaction
d20bf4e3e5fb1a22e3bbcbe9d76c634cdfd0f1353f1b9da9a1a6582cc0d2751a


Summary


Timestamp
11/15, 2015 11:05utc(8y, 10mo, 15d ago)
Version
1
Size
24,255B
Confirmations
1,023,655
Fee Paid
3,000XEC
Fee Rate
(12.37sat/B)
Days Destroyed
26,505xd

1 Input/2 Outputs


OP_RETURN
data(utf-8) - # OP_RETURN.py # # Python script to generate and retrieve OP_RETURN bitcoin transactions # # Copyright (c) Coin Sciences Ltd # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import subprocess, json, time, random, os.path, binascii, struct, string, re, hashlib # Python 2-3 compatibility logic try: basestring except NameError: basestring = str # User-defined quasi-constants OP_RETURN_BITCOIN_IP='127.0.0.1' # IP address of your bitcoin node OP_RETURN_BITCOIN_USE_CMD=False # use command-line instead of JSON-RPC? CONF_FILE = '~/testnet.conf' if OP_RETURN_BITCOIN_USE_CMD: OP_RETURN_BITCOIN_PATH='/usr/bin/bitcoin-cli' # path to bitcoin-cli executable on this server else: OP_RETURN_BITCOIN_PORT='' # leave empty to use default port for mainnet/testnet OP_RETURN_BITCOIN_USER='' # leave empty to read from ~/.bitcoin/bitcoin.conf (Unix only) OP_RETURN_BITCOIN_PASSWORD='' # leave empty to read from ~/.bitcoin/bitcoin.conf (Unix only) OP_RETURN_BTC_FEE=0.003 # BTC fee to pay per transaction OP_RETURN_BTC_DUST=0.00001 # omit BTC outputs smaller than this OP_RETURN_MAX_BYTES=65535 # maximum bytes in an OP_RETURN (40 as of Bitcoin 0.10) OP_RETURN_MAX_BLOCKS=10 # maximum number of blocks to try when retrieving data OP_RETURN_NET_TIMEOUT=10 # how long to time out (in seconds) when communicating with bitcoin node # User-facing functions def OP_RETURN_send(send_address, send_amount, metadata, testnet=False): # Validate some parameters if not OP_RETURN_bitcoin_check(testnet): return {'error': 'Please check Bitcoin Core is running and OP_RETURN_BITCOIN_* constants are set correctly'} result=OP_RETURN_bitcoin_cmd('validateaddress', testnet, send_address) if not ('isvalid' in result and result['isvalid']): return {'error': 'Send address could not be validated: '+send_address} if isinstance(metadata, basestring): metadata=metadata.encode('utf-8') # convert to binary string metadata_len=len(metadata) if metadata_len>65536: return {'error': 'This library only supports metadata up to 65536 bytes in size'} if metadata_len>OP_RETURN_MAX_BYTES: return {'error': 'Metadata has '+str(metadata_len)+' bytes but is limited to '+str(OP_RETURN_MAX_BYTES)+' (see OP_RETURN_MAX_BYTES)'} # Calculate amounts and choose inputs output_amount=send_amount+OP_RETURN_BTC_FEE inputs_spend=OP_RETURN_select_inputs(output_amount, testnet) if 'error' in inputs_spend: return {'error': inputs_spend['error']} change_amount=inputs_spend['total']-output_amount # Build the raw transaction change_address=OP_RETURN_bitcoin_cmd('getrawchangeaddress', testnet) outputs={send_address: send_amount} if change_amount>=OP_RETURN_BTC_DUST: outputs[change_address]=change_amount raw_txn=OP_RETURN_create_txn(inputs_spend['inputs'], outputs, metadata, len(outputs), testnet) # Sign and send the transaction, return result return OP_RETURN_sign_send_txn(raw_txn, testnet) def OP_RETURN_store(data, testnet=False): # Data is stored in OP_RETURNs within a series of chained transactions. # If the OP_RETURN is followed by another output, the data continues in the transaction spending that output. # When the OP_RETURN is the last output, this also signifies the end of the data. # Validate parameters and get change address if not OP_RETURN_bitcoin_check(testnet): return {'error': 'Please check Bitcoin Core is running and OP_RETURN_BITCOIN_* constants are set correctly'} if isinstance(data, basestring): data=data.encode('utf-8') # convert to binary string data_len=len(data) if data_len==0: return {'error': 'Some data is required to be stored'} change_address=OP_RETURN_bitcoin_cmd('getrawchangeaddress', testnet) # Calculate amounts and choose first inputs to use output_amount=OP_RETURN_BTC_FEE*int((data_len+OP_RETURN_MAX_BYTES-1)/OP_RETURN_MAX_BYTES) # number of transactions required inputs_spend=OP_RETURN_select_inputs(output_amount, testnet) if 'error' in inputs_spend: return {'error': inputs_spend['error']} inputs=inputs_spend['inputs'] input_amount=inputs_spend['total'] # Find the current blockchain height and mempool txids height=int(OP_RETURN_bitcoin_cmd('getblockcount', testnet)) avoid_txids=OP_RETURN_bitcoin_cmd('getrawmempool', testnet) # Loop to build and send transactions result={'txids':[]} for data_ptr in range(0, data_len, OP_RETURN_MAX_BYTES): # Some preparation for this iteration last_txn=((data_ptr+OP_RETURN_MAX_BYTES)>=data_len) # is this the last tx in the chain? change_amount=input_amount-OP_RETURN_BTC_FEE metadata=data[data_ptr:data_ptr+OP_RETURN_MAX_BYTES] # Build and send this transaction outputs={} if change_amount>=OP_RETURN_BTC_DUST: # might be skipped for last transaction outputs[change_address]=change_amount raw_txn=OP_RETURN_create_txn(inputs, outputs, metadata, len(outputs) if last_txn else 0, testnet) send_result=OP_RETURN_sign_send_txn(raw_txn, testnet) # Check for errors and collect the txid if 'error' in send_result: result['error']=send_result['error'] break result['txids'].append(send_result['txid']) if data_ptr==0: result['ref']=OP_RETURN_calc_ref(height, send_result['txid'], avoid_txids) # Prepare inputs for next iteration inputs=[{ 'txid': send_result['txid'], 'vout': 1, }] input_amount=change_amount # Return the final result return result def OP_RETURN_retrieve(ref, max_results=1, testnet=False): # Validate parameters and get status of Bitcoin Core if not OP_RETURN_bitcoin_check(testnet): return {'error': 'Please check Bitcoin Core is running and OP_RETURN_BITCOIN_* constants are set correctly'} max_height=int(OP_RETURN_bitcoin_cmd('getblockcount', testnet)) heights=OP_RETURN_get_ref_heights(ref, max_height) if not isinstance(heights, list): return {'error': 'Ref is not valid'} # Collect and return the results results=[] for height in heights: if height==0: txids=OP_RETURN_list_mempool_txns(testnet) # if mempool, only get list for now (to save RPC calls) txns=None else: txns=OP_RETURN_get_block_txns(height, testnet) # if block, get all fully unpacked txids=txns.keys() for txid in txids: if OP_RETURN_match_ref_txid(ref, txid): if height==0: txn_unpacked=OP_RETURN_get_mempool_txn(txid, testnet) else: txn_unpacked=txns[txid] found=OP_RETURN_find_txn_data(txn_unpacked) if found: # Collect data from txid which matches ref and contains an OP_RETURN result={ 'txids': [str(txid)], 'data': found['op_return'], } key_heights={height: True} # Work out which other block heights / mempool we should try if height==0: try_heights=[] # nowhere else to look if first still in mempool else: result['ref']=OP_RETURN_calc_ref(height, txid, txns.keys()) try_heights=OP_RETURN_get_try_heights(height+1, max_height, False) # Collect the rest of the data, if appropriate if height==0: this_txns=OP_RETURN_get_mempool_txns(testnet) # now retrieve all to follow chain else: this_txns=txns last_txid=txid this_height=height while found['index'] < (len(txn_unpacked['vout'])-1): # this means more data to come next_txid=OP_RETURN_find_spent_txid(this_txns, last_txid, found['index']+1) # If we found the next txid in the data chain if next_txid: result['txids'].append(str(next_txid)) txn_unpacked=this_txns[next_txid] found=OP_RETURN_find_txn_data(txn_unpacked) if found: result['data']+=found['op_return'] key_heights[this_height]=True else: result['error']='Data incomplete - missing OP_RETURN' break last_txid=next_txid # Otherwise move on to the next height to keep looking else: if len(try_heights): this_height=try_heights.pop(0) if this_height==0: this_txns=OP_RETURN_get_mempool_txns(testnet) else: this_txns=OP_RETURN_get_block_txns(this_height, testnet) else: result['error']='Data incomplete - could not find next transaction' break # Finish up the information about this result result['heights']=list(key_heights.keys()) results.append(result) if len(results)>=max_results: break # stop if we have collected enough return results # Utility functions def OP_RETURN_select_inputs(total_amount, testnet): # List and sort unspent inputs by priority unspent_inputs=OP_RETURN_bitcoin_cmd('listunspent', testnet, 0) if not isinstance(unspent_inputs, list): return {'error': 'Could not retrieve list of unspent inputs'} unspent_inputs.sort(key=lambda unspent_input: unspent_input['amount']*unspent_input['confirmations'], reverse=True) # Identify which inputs should be spent inputs_spend=[] input_amount=0 for unspent_input in unspent_inputs: inputs_spend.append(unspent_input) input_amount+=unspent_input['amount'] if input_amount>=total_amount: break # stop when we have enough if input_amount<total_amount: return {'error': 'Not enough funds are available to cover the amount and fee'} # Return the successful result return { 'inputs': inputs_spend, 'total': input_amount, } def OP_RETURN_create_txn(inputs, outputs, metadata, metadata_pos, testnet): raw_txn=OP_RETURN_bitcoin_cmd('createrawtransaction', testnet, inputs, outputs) txn_unpacked=OP_RETURN_unpack_txn(OP_RETURN_hex_to_bin(raw_txn)) metadata_len=len(metadata) if metadata_len<=75: payload=bytearray((metadata_len,))+metadata # length byte + data (https://en.bitcoin.it/wiki/Script) elif metadata_len<=256: payload="\x4c"+bytearray((metadata_len,))+metadata # OP_PUSHDATA1 format else: payload="\x4d"+bytearray((metadata_len%256,))+bytearray((int(metadata_len/256),))+metadata # OP_PUSHDATA2 format metadata_pos=min(max(0, metadata_pos), len(txn_unpacked['vout'])) # constrain to valid values txn_unpacked['vout'][metadata_pos:metadata_pos]=[{ 'value': 0, 'scriptPubKey': '6a'+OP_RETURN_bin_to_hex(payload) # here's the OP_RETURN }] return OP_RETURN_bin_to_hex(OP_RETURN_pack_txn(txn_unpacked)) def OP_RETURN_sign_send_txn(raw_txn, testnet): signed_txn=OP_RETURN_bitcoin_cmd('signrawtransaction', testnet, raw_txn) if not ('complete' in signed_txn and signed_txn['complete']): return {'error': 'Could not sign the transaction'} send_txid=OP_RETURN_bitcoin_cmd('sendrawtransaction', testnet, signed_txn['hex']) if not (isinstance(send_txid, basestring) and len(send_txid)==64): return {'error': 'Could not send the transaction'} return {'txid': str(send_txid)} def OP_RETURN_list_mempool_txns(testnet): return OP_RETURN_bitcoin_cmd('getrawmempool', testnet) def OP_RETURN_get_mempool_txn(txid, testnet): raw_txn=OP_RETURN_bitcoin_cmd('getrawtransaction', testnet, txid) return OP_RETURN_unpack_txn(OP_RETURN_hex_to_bin(raw_txn)) def OP_RETURN_get_mempool_txns(testnet): txids=OP_RETURN_list_mempool_txns(testnet) txns={} for txid in txids: txns[txid]=OP_RETURN_get_mempool_txn(txid, testnet) return txns def OP_RETURN_get_raw_block(height, testnet): block_hash=OP_RETURN_bitcoin_cmd('getblockhash', testnet, height) if not (isinstance(block_hash, basestring) and len(block_hash)==64): return {'error': 'Block at height '+str(height)+' not found'} return { 'block': OP_RETURN_hex_to_bin(OP_RETURN_bitcoin_cmd('getblock', testnet, block_hash, False)) } def OP_RETURN_get_block_txns(height, testnet): raw_block=OP_RETURN_get_raw_block(height, testnet) if 'error' in raw_block: return {'error': raw_block['error']} block=OP_RETURN_unpack_block(raw_block['block']) return block['txs'] # Talking to bitcoin-cli def OP_RETURN_bitcoin_check(testnet): info=OP_RETURN_bitcoin_cmd('getinfo', testnet) return isinstance(info, dict) and 'balance' in info def OP_RETURN_bitcoin_cmd(command, testnet, *args): # more params are read from here if OP_RETURN_BITCOIN_USE_CMD: sub_args=[OP_RETURN_BITCOIN_PATH] if testnet: sub_args.append('-testnet') sub_args.append(command) for arg in args: sub_args.append(json.dumps(arg) if isinstance(arg, (dict, list, tuple)) else str(arg)) raw_result=subprocess.check_output(sub_args).decode("utf-8").rstrip("\n") try: # decode JSON if possible result=json.loads(raw_result) except ValueError: result=raw_result else: request={ 'id': str(time.time())+'-'+str(random.randint(100000,999999)), 'method': command, 'params': args, } port=OP_RETURN_BITCOIN_PORT user=OP_RETURN_BITCOIN_USER password=OP_RETURN_BITCOIN_PASSWORD if not (len(port) and len(user) and len(password)): #conf_lines=open(os.path.expanduser('~')+'/.bitcoin/bitcoin.conf').readlines() conf_lines=open(os.path.expanduser(CONF_FILE)).readlines() for conf_line in conf_lines: parts=conf_line.strip().split('=', 1) # up to 2 parts if (parts[0]=='rpcport') and not len(port): port=int(parts[1]) if (parts[0]=='rpcuser') and not len(user): user=parts[1] if (parts[0]=='rpcpassword') and not len(password): password=parts[1] if not len(port): port=18332 if testnet else 8332 if not (len(user) and len(password)): return None # no point trying in this case url='http://'+OP_RETURN_BITCOIN_IP+':'+str(port)+'/' try: from urllib2 import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener, install_opener, urlopen, HTTPError except ImportError: from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener, install_opener, urlopen passman=HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, url, user, password) auth_handler=HTTPBasicAuthHandler(passman) opener=build_opener(auth_handler) install_opener(opener) try: raw_result=urlopen(url, json.dumps(request).encode('utf-8'), OP_RETURN_NET_TIMEOUT).read() except HTTPError as e: print e.fp.read() raise result_array=json.loads(raw_result.decode('utf-8')) result=result_array['result'] return result # Working with data references # The format of a data reference is: [estimated block height]-[partial txid] - where: # [estimated block height] is the block where the first transaction might appear and following # which all subsequent transactions are expected to appear. In the event of a weird blockchain # reorg, it is possible the first transaction might appear in a slightly earlier block. When # embedding data, we set [estimated block height] to 1+(the current block height). # [partial txid] contains 2 adjacent bytes from the txid, at a specific position in the txid: # 2*([partial txid] div 65536) gives the offset of the 2 adjacent bytes, between 0 and 28. # ([partial txid] mod 256) is the byte of the txid at that offset. # (([partial txid] mod 65536) div 256) is the byte of the txid at that offset plus one. # Note that the txid is ordered according to user presentation, not raw data in the block. def OP_RETURN_calc_ref(next_height, txid, avoid_txids): txid_binary=OP_RETURN_hex_to_bin(txid) for txid_offset in range(15): sub_txid=txid_binary[2*txid_offset:2*txid_offset+2] clashed=False for avoid_txid in avoid_txids: avoid_txid_binary=OP_RETURN_hex_to_bin(avoid_txid) if ( (avoid_txid_binary[2*txid_offset:2*txid_offset+2]==sub_txid) and (txid_binary!=avoid_txid_binary) ): clashed=True break if not clashed: break if clashed: # could not find a good reference return None tx_ref=ord(txid_binary[2*txid_offset:1+2*txid_offset])+256*ord(txid_binary[1+2*txid_offset:2+2*txid_offset])+65536*txid_offset return '%06d-%06d' % (next_height, tx_ref) def OP_RETURN_get_ref_parts(ref): if not re.search('^[0-9]+\-[0-9A-Fa-f]+$', ref): # also support partial txid for second half return None parts=ref.split('-') if re.search('[A-Fa-f]', parts[1]): if len(parts[1])>=4: txid_binary=OP_RETURN_hex_to_bin(parts[1][0:4]) parts[1]=ord(txid_binary[0:1])+256*ord(txid_binary[1:2])+65536*0 else: return None parts=list(map(int, parts)) if parts[1]>983039: # 14*65536+65535 return None return parts def OP_RETURN_get_ref_heights(ref, max_height): parts=OP_RETURN_get_ref_parts(ref) if not parts: return None return OP_RETURN_get_try_heights(parts[0], max_height, True) def OP_RETURN_get_try_heights(est_height, max_height, also_back): forward_height=est_height back_height=min(forward_height-1, max_height) heights=[] mempool=False try_height=0 while True: if also_back and ((try_height%3)==2): # step back every 3 tries heights.append(back_height) back_height-=1 else: if forward_height>max_height: if not mempool: heights.append(0) # indicates to try mempool mempool=True elif not also_back: break # nothing more to do here else: heights.append(forward_height) forward_height+=1 if len(heights)>=OP_RETURN_MAX_BLOCKS: break try_height+=1 return heights def OP_RETURN_match_ref_txid(ref, txid): parts=OP_RETURN_get_ref_parts(ref) if not parts: return None txid_offset=int(parts[1]/65536) txid_binary=OP_RETURN_hex_to_bin(txid) txid_part=txid_binary[2*txid_offset:2*txid_offset+2] txid_match=bytearray([parts[1]%256, int((parts[1]%65536)/256)]) return txid_part==txid_match # exact binary comparison # Unpacking and packing bitcoin blocks and transactions def OP_RETURN_unpack_block(binary): buffer=OP_RETURN_buffer(binary) block={} block['version']=buffer.shift_unpack(4, '<L') block['hashPrevBlock']=OP_RETURN_bin_to_hex(buffer.shift(32)[::-1]) block['hashMerkleRoot']=OP_RETURN_bin_to_hex(buffer.shift(32)[::-1]) block['time']=buffer.shift_unpack(4, '<L') block['bits']=buffer.shift_unpack(4, '<L') block['nonce']=buffer.shift_unpack(4, '<L') block['tx_count']=buffer.shift_varint() block['txs']={} old_ptr=buffer.used() while buffer.remaining(): transaction=OP_RETURN_unpack_txn_buffer(buffer) new_ptr=buffer.used() size=new_ptr-old_ptr raw_txn_binary=binary[old_ptr:old_ptr+size] txid=OP_RETURN_bin_to_hex(hashlib.sha256(hashlib.sha256(raw_txn_binary).digest()).digest()[::-1]) old_ptr=new_ptr transaction['size']=size block['txs'][txid]=transaction return block def OP_RETURN_unpack_txn(binary): return OP_RETURN_unpack_txn_buffer(OP_RETURN_buffer(binary)) def OP_RETURN_unpack_txn_buffer(buffer): # see: https://en.bitcoin.it/wiki/Transactions txn={ 'vin': [], 'vout': [], } txn['version']=buffer.shift_unpack(4, '<L') # small-endian 32-bits inputs=buffer.shift_varint() if inputs>100000: # sanity check return None for _ in range(inputs): input={} input['txid']=OP_RETURN_bin_to_hex(buffer.shift(32)[::-1]) input['vout']=buffer.shift_unpack(4, '<L') length=buffer.shift_varint() input['scriptSig']=OP_RETURN_bin_to_hex(buffer.shift(length)) input['sequence']=buffer.shift_unpack(4, '<L') txn['vin'].append(input) outputs=buffer.shift_varint() if outputs>100000: # sanity check return None for _ in range(outputs): output={} output['value']=float(buffer.shift_uint64())/100000000 length=buffer.shift_varint() output['scriptPubKey']=OP_RETURN_bin_to_hex(buffer.shift(length)) txn['vout'].append(output) txn['locktime']=buffer.shift_unpack(4, '<L') return txn def OP_RETURN_find_spent_txid(txns, spent_txid, spent_vout): for txid, txn_unpacked in txns.items(): for input in txn_unpacked['vin']: if (input['txid']==spent_txid) and (input['vout']==spent_vout): return txid return None def OP_RETURN_find_txn_data(txn_unpacked): for index, output in enumerate(txn_unpacked['vout']): op_return=OP_RETURN_get_script_data(OP_RETURN_hex_to_bin(output['scriptPubKey'])) if op_return: return { 'index': index, 'op_return': op_return, } return None def OP_RETURN_get_script_data(scriptPubKeyBinary): op_return=None if scriptPubKeyBinary[0:1]==b'\x6a': first_ord=ord(scriptPubKeyBinary[1:2]) if first_ord<=75: op_return=scriptPubKeyBinary[2:2+first_ord] elif first_ord==0x4c: op_return=scriptPubKeyBinary[3:3+ord(scriptPubKeyBinary[2:3])] elif first_ord==0x4d: op_return=scriptPubKeyBinary[4:4+ord(scriptPubKeyBinary[2:3])+256*ord(scriptPubKeyBinary[3:4])] return op_return def OP_RETURN_pack_txn(txn): binary=b'' binary+=struct.pack('<L', txn['version']) binary+=OP_RETURN_pack_varint(len(txn['vin'])) for input in txn['vin']: binary+=OP_RETURN_hex_to_bin(input['txid'])[::-1] binary+=struct.pack('<L', input['vout']) binary+=OP_RETURN_pack_varint(int(len(input['scriptSig'])/2)) # divide by 2 because it is currently in hex binary+=OP_RETURN_hex_to_bin(input['scriptSig']) binary+=struct.pack('<L', input['sequence']) binary+=OP_RETURN_pack_varint(len(txn['vout'])) for output in txn['vout']: binary+=OP_RETURN_pack_uint64(int(round(output['value']*100000000))) binary+=OP_RETURN_pack_varint(int(len(output['scriptPubKey'])/2)) # divide by 2 because it is currently in hex binary+=OP_RETURN_hex_to_bin(output['scriptPubKey']) binary+=struct.pack('<L', txn['locktime']) return binary def OP_RETURN_pack_varint(integer): if integer>0xFFFFFFFF: packed="\xFF"+OP_RETURN_pack_uint64(integer) elif integer>0xFFFF: packed="\xFE"+struct.pack('<L', integer) elif integer>0xFC: packed="\xFD"+struct.pack('<H', integer) else: packed=struct.pack('B', integer) return packed def OP_RETURN_pack_uint64(integer): upper=int(integer/4294967296) lower=integer-upper*4294967296 return struct.pack('<L', lower)+struct.pack('<L', upper) # Helper class for unpacking bitcoin binary data class OP_RETURN_buffer(): def __init__(self, data, ptr=0): self.data=data self.len=len(data) self.ptr=ptr def shift(self, chars): prefix=self.data[self.ptr:self.ptr+chars] self.ptr+=chars return prefix def shift_unpack(self, chars, format): unpack=struct.unpack(format, self.shift(chars)) return unpack[0] def shift_varint(self): value=self.shift_unpack(1, 'B') if value==0xFF: value=self.shift_uint64() elif value==0xFE: value=self.shift_unpack(4, '<L') elif value==0xFD: value=self.shift_unpack(2, '<H') return value def shift_uint64(self): return self.shift_unpack(4, '<L')+4294967296*self.shift_unpack(4, '<L') def used(self): return min(self.ptr, self.len) def remaining(self): return max(self.len-self.ptr, 0) # Converting binary <-> hexadecimal def OP_RETURN_hex_to_bin(hex): try: raw=binascii.a2b_hex(hex) except Exception: return None return raw def OP_RETURN_bin_to_hex(string): return binascii.b2a_hex(string).decode('utf-8')
show raw
0

Total Output: 1,886,492.28XEC

Input Scripts


Script Sig (asm)
>#03045022100eaebe2fcd2a1ccaed1259e7792688e0cc83d849497a0cc9d6c0cd6f4495068cc0220331772e997f56cf41ded5ee16e0552c28db56d90780e96e6d40d0f8634a0469e[ALL] 02948998077e8868e4900c4a3f522aaf5dd72da543b8b139bc3cbd712203933fb3

Output Scripts


Script Pub Key (asm)
, #0OP_DUP OP_HASH160 d923bca73da482216ac46178a32f54ce12e6422a OP_EQUALVERIFY OP_CHECKSIG
, #1OP_RETURN 23204f505f52455455524e2e70790a230a2320507974686f6e2073637269707420746f2067656e657261746520616e64207265747269657665204f505f52455455524e20626974636f696e207472616e73616374696f6e730a230a2320436f707972696768742028632920436f696e20536369656e636573204c74640a230a23205065726d697373696f6e20697320686572656279206772616e7465642c2066726565206f66206368617267652c20746f20616e7920706572736f6e206f627461696e696e67206120636f70790a23206f66207468697320736f66747761726520616e64206173736f63696174656420646f63756d656e746174696f6e2066696c657320287468652022536f66747761726522292c20746f206465616c0a2320696e2074686520536f66747761726520776974686f7574207265737472696374696f6e2c20696e636c7564696e6720776974686f7574206c696d69746174696f6e20746865207269676874730a2320746f207573652c20636f70792c206d6f646966792c206d657267652c207075626c6973682c20646973747269627574652c207375626c6963656e73652c20616e642f6f722073656c6c0a2320636f70696573206f662074686520536f6674776172652c20616e6420746f207065726d697420706572736f6e7320746f2077686f6d2074686520536f6674776172652069730a23206675726e697368656420746f20646f20736f2c207375626a65637420746f2074686520666f6c6c6f77696e6720636f6e646974696f6e733a0a230a23205468652061626f766520636f70797269676874206e6f7469636520616e642074686973207065726d697373696f6e206e6f74696365207368616c6c20626520696e636c7564656420696e0a2320616c6c20636f70696573206f72207375627374616e7469616c20706f7274696f6e73206f662074686520536f6674776172652e0a230a232054484520534f4654574152452049532050524f564944454420224153204953222c20574954484f55542057415252414e5459204f4620414e59204b494e442c2045585052455353204f520a2320494d504c4945442c20494e434c5544494e4720425554204e4f54204c494d4954454420544f205448452057415252414e54494553204f46204d45524348414e544142494c4954592c0a23204649544e45535320464f52204120504152544943554c415220505552504f534520414e44204e4f4e494e4652494e47454d454e542e20494e204e4f204556454e54205348414c4c205448450a2320415554484f5253204f5220434f5059524947485420484f4c44455253204245204c4941424c4520464f5220414e5920434c41494d2c2044414d41474553204f52204f544845520a23204c494142494c4954592c205748455448455220494e20414e20414354494f4e204f4620434f4e54524143542c20544f5254204f52204f54484552574953452c2041524953494e472046524f4d2c0a23204f5554204f46204f5220494e20434f4e4e454354494f4e20574954482054484520534f465457415245204f522054484520555345204f52204f54484552204445414c494e475320494e0a232054484520534f4654574152452e0a0a0a696d706f72742073756270726f636573732c206a736f6e2c2074696d652c2072616e646f6d2c206f732e706174682c2062696e61736369692c207374727563742c20737472696e672c2072652c20686173686c69620a0a0a2320507974686f6e20322d3320636f6d7061746962696c697479206c6f6769630a0a7472793a0a0962617365737472696e670a657863657074204e616d654572726f723a0a0962617365737472696e67203d207374720a090a20200a2320557365722d646566696e65642071756173692d636f6e7374616e74730a0a4f505f52455455524e5f424954434f494e5f49503d273132372e302e302e312720232049502061646472657373206f6620796f757220626974636f696e206e6f64650a4f505f52455455524e5f424954434f494e5f5553455f434d443d46616c736520232075736520636f6d6d616e642d6c696e6520696e7374656164206f66204a534f4e2d5250433f0a0a434f4e465f46494c45203d20277e2f746573746e65742e636f6e66270a0a6966204f505f52455455524e5f424954434f494e5f5553455f434d443a0a094f505f52455455524e5f424954434f494e5f504154483d272f7573722f62696e2f626974636f696e2d636c69272023207061746820746f20626974636f696e2d636c692065786563757461626c65206f6e2074686973207365727665720a090a656c73653a0a094f505f52455455524e5f424954434f494e5f504f52543d27272023206c6561766520656d70747920746f207573652064656661756c7420706f727420666f72206d61696e6e65742f746573746e65740a094f505f52455455524e5f424954434f494e5f555345523d27272023206c6561766520656d70747920746f20726561642066726f6d207e2f2e626974636f696e2f626974636f696e2e636f6e662028556e6978206f6e6c79290a094f505f52455455524e5f424954434f494e5f50415353574f52443d27272023206c6561766520656d70747920746f20726561642066726f6d207e2f2e626974636f696e2f626974636f696e2e636f6e662028556e6978206f6e6c79290a090a4f505f52455455524e5f4254435f4645453d302e3030332023204254432066656520746f2070617920706572207472616e73616374696f6e0a4f505f52455455524e5f4254435f445553543d302e30303030312023206f6d697420425443206f75747075747320736d616c6c6572207468616e20746869730a0a4f505f52455455524e5f4d41585f42595445533d36353533352023206d6178696d756d20627974657320696e20616e204f505f52455455524e20283430206173206f6620426974636f696e20302e3130290a4f505f52455455524e5f4d41585f424c4f434b533d31302023206d6178696d756d206e756d626572206f6620626c6f636b7320746f20747279207768656e2072657472696576696e6720646174610a0a4f505f52455455524e5f4e45545f54494d454f55543d3130202320686f77206c6f6e6720746f2074696d65206f75742028696e207365636f6e647329207768656e20636f6d6d756e69636174696e67207769746820626974636f696e206e6f64650a0a0a2320557365722d666163696e672066756e6374696f6e730a0a646566204f505f52455455524e5f73656e642873656e645f616464726573732c2073656e645f616d6f756e742c206d657461646174612c20746573746e65743d46616c7365293a0a09232056616c696461746520736f6d6520706172616d65746572730a090a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a0a09726573756c743d4f505f52455455524e5f626974636f696e5f636d64282776616c696461746561646472657373272c20746573746e65742c2073656e645f61646472657373290a096966206e6f74202827697376616c69642720696e20726573756c7420616e6420726573756c745b27697376616c6964275d293a0a090972657475726e207b276572726f72273a202753656e64206164647265737320636f756c64206e6f742062652076616c6964617465643a20272b73656e645f616464726573737d0a090a096966206973696e7374616e6365286d657461646174612c2062617365737472696e67293a0a09096d657461646174613d6d657461646174612e656e636f646528277574662d382729202320636f6e7665727420746f2062696e61727920737472696e670a0a096d657461646174615f6c656e3d6c656e286d65746164617461290a09090a096966206d657461646174615f6c656e3e36353533363a0a090972657475726e207b276572726f72273a202754686973206c696272617279206f6e6c7920737570706f727473206d6574616461746120757020746f20363535333620627974657320696e2073697a65277d0a09090a096966206d657461646174615f6c656e3e4f505f52455455524e5f4d41585f42595445533a0a090972657475726e207b276572726f72273a20274d657461646174612068617320272b737472286d657461646174615f6c656e292b2720627974657320627574206973206c696d6974656420746f20272b737472284f505f52455455524e5f4d41585f4259544553292b272028736565204f505f52455455524e5f4d41585f425954455329277d0a090a09232043616c63756c61746520616d6f756e747320616e642063686f6f736520696e707574730a0a096f75747075745f616d6f756e743d73656e645f616d6f756e742b4f505f52455455524e5f4254435f4645450a0a09696e707574735f7370656e643d4f505f52455455524e5f73656c6563745f696e70757473286f75747075745f616d6f756e742c20746573746e6574290a090a09696620276572726f722720696e20696e707574735f7370656e643a0a090972657475726e207b276572726f72273a20696e707574735f7370656e645b276572726f72275d7d0a090a096368616e67655f616d6f756e743d696e707574735f7370656e645b27746f74616c275d2d6f75747075745f616d6f756e740a0a0923204275696c642074686520726177207472616e73616374696f6e0a09090a096368616e67655f616464726573733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776368616e676561646472657373272c20746573746e6574290a090a096f7574707574733d7b73656e645f616464726573733a2073656e645f616d6f756e747d0a090a096966206368616e67655f616d6f756e743e3d4f505f52455455524e5f4254435f445553543a0a09096f7574707574735b6368616e67655f616464726573735d3d6368616e67655f616d6f756e740a09090a097261775f74786e3d4f505f52455455524e5f6372656174655f74786e28696e707574735f7370656e645b27696e70757473275d2c206f7574707574732c206d657461646174612c206c656e286f757470757473292c20746573746e6574290a0a0923205369676e20616e642073656e6420746865207472616e73616374696f6e2c2072657475726e20726573756c740a0a0972657475726e204f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574290a0a0a646566204f505f52455455524e5f73746f726528646174612c20746573746e65743d46616c7365293a0a092320446174612069732073746f72656420696e204f505f52455455524e732077697468696e206120736572696573206f6620636861696e6564207472616e73616374696f6e732e0a092320496620746865204f505f52455455524e20697320666f6c6c6f77656420627920616e6f74686572206f75747075742c20746865206461746120636f6e74696e75657320696e20746865207472616e73616374696f6e207370656e64696e672074686174206f75747075742e0a0923205768656e20746865204f505f52455455524e20697320746865206c617374206f75747075742c207468697320616c736f207369676e69666965732074686520656e64206f662074686520646174612e0a0a09232056616c696461746520706172616d657465727320616e6420676574206368616e676520616464726573730a0a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a09090a096966206973696e7374616e636528646174612c2062617365737472696e67293a0a0909646174613d646174612e656e636f646528277574662d382729202320636f6e7665727420746f2062696e61727920737472696e670a090a09646174615f6c656e3d6c656e2864617461290a09696620646174615f6c656e3d3d303a0a090972657475726e207b276572726f72273a2027536f6d65206461746120697320726571756972656420746f2062652073746f726564277d0a0a096368616e67655f616464726573733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776368616e676561646472657373272c20746573746e6574290a090a09232043616c63756c61746520616d6f756e747320616e642063686f6f736520666972737420696e7075747320746f207573650a0a096f75747075745f616d6f756e743d4f505f52455455524e5f4254435f4645452a696e742828646174615f6c656e2b4f505f52455455524e5f4d41585f42595445532d31292f4f505f52455455524e5f4d41585f4259544553292023206e756d626572206f66207472616e73616374696f6e732072657175697265640a090a09696e707574735f7370656e643d4f505f52455455524e5f73656c6563745f696e70757473286f75747075745f616d6f756e742c20746573746e6574290a09696620276572726f722720696e20696e707574735f7370656e643a0a090972657475726e207b276572726f72273a20696e707574735f7370656e645b276572726f72275d7d0a09090a09696e707574733d696e707574735f7370656e645b27696e70757473275d0a09696e7075745f616d6f756e743d696e707574735f7370656e645b27746f74616c275d0a0a09232046696e64207468652063757272656e7420626c6f636b636861696e2068656967687420616e64206d656d706f6f6c2074786964730a0a096865696768743d696e74284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b636f756e74272c20746573746e657429290a0961766f69645f74786964733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776d656d706f6f6c272c20746573746e6574290a0a0923204c6f6f7020746f206275696c6420616e642073656e64207472616e73616374696f6e730a0a09726573756c743d7b277478696473273a5b5d7d0a0a09666f7220646174615f70747220696e2072616e676528302c20646174615f6c656e2c204f505f52455455524e5f4d41585f4259544553293a0a09092320536f6d65207072657061726174696f6e20666f72207468697320697465726174696f6e0a090a09096c6173745f74786e3d2828646174615f7074722b4f505f52455455524e5f4d41585f4259544553293e3d646174615f6c656e292023206973207468697320746865206c61737420747820696e2074686520636861696e3f0a09096368616e67655f616d6f756e743d696e7075745f616d6f756e742d4f505f52455455524e5f4254435f4645450a09096d657461646174613d646174615b646174615f7074723a646174615f7074722b4f505f52455455524e5f4d41585f42595445535d0a0909090a090923204275696c6420616e642073656e642074686973207472616e73616374696f6e0a090a09096f7574707574733d7b7d0a09096966206368616e67655f616d6f756e743e3d4f505f52455455524e5f4254435f445553543a2023206d6967687420626520736b697070656420666f72206c617374207472616e73616374696f6e0a0909096f7574707574735b6368616e67655f616464726573735d3d6368616e67655f616d6f756e740a0909090a09097261775f74786e3d4f505f52455455524e5f6372656174655f74786e28696e707574732c206f7574707574732c206d657461646174612c206c656e286f75747075747329206966206c6173745f74786e20656c736520302c20746573746e6574290a09090a090973656e645f726573756c743d4f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574290a090a09092320436865636b20666f72206572726f727320616e6420636f6c6c6563742074686520747869640a090a0909696620276572726f722720696e2073656e645f726573756c743a0a090909726573756c745b276572726f72275d3d73656e645f726573756c745b276572726f72275d0a090909627265616b0a09090a0909726573756c745b277478696473275d2e617070656e642873656e645f726573756c745b2774786964275d290a09090a0909696620646174615f7074723d3d303a0a090909726573756c745b27726566275d3d4f505f52455455524e5f63616c635f726566286865696768742c2073656e645f726573756c745b2774786964275d2c2061766f69645f7478696473290a09090a090923205072657061726520696e7075747320666f72206e65787420697465726174696f6e0a0a0909696e707574733d5b7b0a0909092774786964273a2073656e645f726573756c745b2774786964275d2c0a09090927766f7574273a20312c0a09097d5d0a0a0909696e7075745f616d6f756e743d6368616e67655f616d6f756e740a090a09232052657475726e207468652066696e616c20726573756c740a0a0972657475726e20726573756c740a0a0a646566204f505f52455455524e5f7265747269657665287265662c206d61785f726573756c74733d312c20746573746e65743d46616c7365293a0a09232056616c696461746520706172616d657465727320616e642067657420737461747573206f6620426974636f696e20436f72650a0a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a09090a096d61785f6865696768743d696e74284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b636f756e74272c20746573746e657429290a09686569676874733d4f505f52455455524e5f6765745f7265665f68656967687473287265662c206d61785f686569676874290a090a096966206e6f74206973696e7374616e636528686569676874732c206c697374293a0a090972657475726e207b276572726f72273a2027526566206973206e6f742076616c6964277d0a0a092320436f6c6c65637420616e642072657475726e2074686520726573756c74730a090a09726573756c74733d5b5d0a090a09666f722068656967687420696e20686569676874733a0a09096966206865696768743d3d303a0a09090974786964733d4f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574292023206966206d656d706f6f6c2c206f6e6c7920676574206c69737420666f72206e6f772028746f2073617665205250432063616c6c73290a09090974786e733d4e6f6e650a0909656c73653a0a09090974786e733d4f505f52455455524e5f6765745f626c6f636b5f74786e73286865696768742c20746573746e657429202320696620626c6f636b2c2067657420616c6c2066756c6c7920756e7061636b65640a09090974786964733d74786e732e6b65797328290a09090a0909666f72207478696420696e2074786964733a0a0909096966204f505f52455455524e5f6d617463685f7265665f74786964287265662c2074786964293a0a090909096966206865696768743d3d303a0a090909090974786e5f756e7061636b65643d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574290a09090909656c73653a0a090909090974786e5f756e7061636b65643d74786e735b747869645d0a09090909090a09090909666f756e643d4f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564290a090909090a09090909696620666f756e643a090909090a09090909092320436f6c6c65637420646174612066726f6d2074786964207768696368206d6174636865732072656620616e6420636f6e7461696e7320616e204f505f52455455524e0a090909090a0909090909726573756c743d7b0a090909090909277478696473273a205b7374722874786964295d2c0a0909090909092764617461273a20666f756e645b276f705f72657475726e275d2c0a09090909097d0a09090909090a09090909096b65795f686569676874733d7b6865696768743a20547275657d0a09090909090a09090909092320576f726b206f7574207768696368206f7468657220626c6f636b2068656967687473202f206d656d706f6f6c2077652073686f756c64207472790a09090909090a09090909096966206865696768743d3d303a0a0909090909097472795f686569676874733d5b5d2023206e6f776865726520656c736520746f206c6f6f6b206966206669727374207374696c6c20696e206d656d706f6f6c0a0909090909656c73653a0a090909090909726573756c745b27726566275d3d4f505f52455455524e5f63616c635f726566286865696768742c20747869642c2074786e732e6b6579732829290a0909090909097472795f686569676874733d4f505f52455455524e5f6765745f7472795f68656967687473286865696768742b312c206d61785f6865696768742c2046616c7365290a09090909090a09090909092320436f6c6c656374207468652072657374206f662074686520646174612c20696620617070726f7072696174650a09090909090a09090909096966206865696768743d3d303a0a090909090909746869735f74786e733d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574292023206e6f7720726574726965766520616c6c20746f20666f6c6c6f7720636861696e0a0909090909656c73653a0a090909090909746869735f74786e733d74786e730a0909090909090a09090909096c6173745f747869643d747869640a0909090909746869735f6865696768743d6865696768740a09090909090a09090909097768696c6520666f756e645b27696e646578275d203c20286c656e2874786e5f756e7061636b65645b27766f7574275d292d31293a20232074686973206d65616e73206d6f7265206461746120746f20636f6d650a0909090909096e6578745f747869643d4f505f52455455524e5f66696e645f7370656e745f7478696428746869735f74786e732c206c6173745f747869642c20666f756e645b27696e646578275d2b31290a0909090909090a0909090909092320496620776520666f756e6420746865206e657874207478696420696e20746865206461746120636861696e0a09090909090a0909090909096966206e6578745f747869643a0a09090909090909726573756c745b277478696473275d2e617070656e6428737472286e6578745f7478696429290a090909090909090a0909090909090974786e5f756e7061636b65643d746869735f74786e735b6e6578745f747869645d0a09090909090909666f756e643d4f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564290a0a09090909090909696620666f756e643a0a0909090909090909726573756c745b2764617461275d2b3d666f756e645b276f705f72657475726e275d0a09090909090909096b65795f686569676874735b746869735f6865696768745d3d547275650a09090909090909656c73653a0a0909090909090909726573756c745b276572726f72275d3d274461746120696e636f6d706c657465202d206d697373696e67204f505f52455455524e270a0909090909090909627265616b0a090909090909090a090909090909096c6173745f747869643d6e6578745f747869640a090909090909090a09090909090923204f7468657277697365206d6f7665206f6e20746f20746865206e6578742068656967687420746f206b656570206c6f6f6b696e670a090909090909090a090909090909656c73653a0a090909090909096966206c656e287472795f68656967687473293a0a0909090909090909746869735f6865696768743d7472795f686569676874732e706f702830290a0a0909090909090909696620746869735f6865696768743d3d303a0a090909090909090909746869735f74786e733d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574290a0909090909090909656c73653a0a090909090909090909746869735f74786e733d4f505f52455455524e5f6765745f626c6f636b5f74786e7328746869735f6865696768742c20746573746e657429090a0a09090909090909656c73653a0a0909090909090909726573756c745b276572726f72275d3d274461746120696e636f6d706c657465202d20636f756c64206e6f742066696e64206e657874207472616e73616374696f6e270a0909090909090909627265616b0a09090909090a0909090909232046696e6973682075702074686520696e666f726d6174696f6e2061626f7574207468697320726573756c74200a09090909090a0909090909726573756c745b2768656967687473275d3d6c697374286b65795f686569676874732e6b65797328292909090909090a0909090909726573756c74732e617070656e6428726573756c74290a09090909090a09096966206c656e28726573756c7473293e3d6d61785f726573756c74733a0a090909627265616b20232073746f70206966207765206861766520636f6c6c656374656420656e6f7567680a090a0972657475726e20726573756c74730a0a0a23205574696c6974792066756e6374696f6e730a0a646566204f505f52455455524e5f73656c6563745f696e7075747328746f74616c5f616d6f756e742c20746573746e6574293a0a0923204c69737420616e6420736f727420756e7370656e7420696e70757473206279207072696f726974790a0a09756e7370656e745f696e707574733d4f505f52455455524e5f626974636f696e5f636d6428276c697374756e7370656e74272c20746573746e65742c20302909090a096966206e6f74206973696e7374616e636528756e7370656e745f696e707574732c206c697374293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f74207265747269657665206c697374206f6620756e7370656e7420696e70757473277d0a09090a09756e7370656e745f696e707574732e736f7274286b65793d6c616d62646120756e7370656e745f696e7075743a20756e7370656e745f696e7075745b27616d6f756e74275d2a756e7370656e745f696e7075745b27636f6e6669726d6174696f6e73275d2c20726576657273653d54727565290a090a0923204964656e7469667920776869636820696e707574732073686f756c64206265207370656e740a0a09696e707574735f7370656e643d5b5d0a09696e7075745f616d6f756e743d300a090a09666f7220756e7370656e745f696e70757420696e20756e7370656e745f696e707574733a0a0909696e707574735f7370656e642e617070656e6428756e7370656e745f696e707574290a0a0909696e7075745f616d6f756e742b3d756e7370656e745f696e7075745b27616d6f756e74275d0a0909696620696e7075745f616d6f756e743e3d746f74616c5f616d6f756e743a0a090909627265616b20232073746f70207768656e207765206861766520656e6f7567680a090a09696620696e7075745f616d6f756e743c746f74616c5f616d6f756e743a0a090972657475726e207b276572726f72273a20274e6f7420656e6f7567682066756e64732061726520617661696c61626c6520746f20636f7665722074686520616d6f756e7420616e6420666565277d0a09090a09232052657475726e20746865207375636365737366756c20726573756c740a0a0972657475726e207b0a090927696e70757473273a20696e707574735f7370656e642c0a090927746f74616c273a20696e7075745f616d6f756e742c0a097d0a0a0a646566204f505f52455455524e5f6372656174655f74786e28696e707574732c206f7574707574732c206d657461646174612c206d657461646174615f706f732c20746573746e6574293a0a097261775f74786e3d4f505f52455455524e5f626974636f696e5f636d6428276372656174657261777472616e73616374696f6e272c20746573746e65742c20696e707574732c206f757470757473290a090a0974786e5f756e7061636b65643d4f505f52455455524e5f756e7061636b5f74786e284f505f52455455524e5f6865785f746f5f62696e287261775f74786e29290a090a096d657461646174615f6c656e3d6c656e286d65746164617461290a090a096966206d657461646174615f6c656e3c3d37353a0a09097061796c6f61643d62797465617272617928286d657461646174615f6c656e2c29292b6d657461646174612023206c656e6774682062797465202b2064617461202868747470733a2f2f656e2e626974636f696e2e69742f77696b692f536372697074290a09656c6966206d657461646174615f6c656e3c3d3235363a0a09097061796c6f61643d225c783463222b62797465617272617928286d657461646174615f6c656e2c29292b6d657461646174612023204f505f50555348444154413120666f726d61740a09656c73653a0a09097061796c6f61643d225c783464222b62797465617272617928286d657461646174615f6c656e253235362c29292b6279746561727261792828696e74286d657461646174615f6c656e2f323536292c29292b6d657461646174612023204f505f50555348444154413220666f726d61740a090a096d657461646174615f706f733d6d696e286d617828302c206d657461646174615f706f73292c206c656e2874786e5f756e7061636b65645b27766f7574275d2929202320636f6e73747261696e20746f2076616c69642076616c7565730a0a0974786e5f756e7061636b65645b27766f7574275d5b6d657461646174615f706f733a6d657461646174615f706f735d3d5b7b0a09092776616c7565273a20302c0a0909277363726970745075624b6579273a20273661272b4f505f52455455524e5f62696e5f746f5f686578287061796c6f61642920232068657265277320746865204f505f52455455524e0a097d5d0a090a0972657475726e204f505f52455455524e5f62696e5f746f5f686578284f505f52455455524e5f7061636b5f74786e2874786e5f756e7061636b656429290a0a0a646566204f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574293a0a097369676e65645f74786e3d4f505f52455455524e5f626974636f696e5f636d6428277369676e7261777472616e73616374696f6e272c20746573746e65742c207261775f74786e290a096966206e6f74202827636f6d706c6574652720696e207369676e65645f74786e20616e64207369676e65645f74786e5b27636f6d706c657465275d293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f74207369676e20746865207472616e73616374696f6e277d0a090a0973656e645f747869643d4f505f52455455524e5f626974636f696e5f636d64282773656e647261777472616e73616374696f6e272c20746573746e65742c207369676e65645f74786e5b27686578275d290a096966206e6f7420286973696e7374616e63652873656e645f747869642c2062617365737472696e672920616e64206c656e2873656e645f74786964293d3d3634293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f742073656e6420746865207472616e73616374696f6e277d0a090a0972657475726e207b2774786964273a207374722873656e645f74786964297d0a0a0a646566204f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574293a0a0972657475726e204f505f52455455524e5f626974636f696e5f636d6428276765747261776d656d706f6f6c272c20746573746e6574290a0a0a646566204f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574293a0a097261775f74786e3d4f505f52455455524e5f626974636f696e5f636d6428276765747261777472616e73616374696f6e272c20746573746e65742c2074786964290a0972657475726e204f505f52455455524e5f756e7061636b5f74786e284f505f52455455524e5f6865785f746f5f62696e287261775f74786e29290a0a0a646566204f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574293a0a0974786964733d4f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574290a0a0974786e733d7b7d0a09666f72207478696420696e2074786964733a0a090974786e735b747869645d3d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574290a090a0972657475726e2074786e730a090a0a646566204f505f52455455524e5f6765745f7261775f626c6f636b286865696768742c20746573746e6574293a0a09626c6f636b5f686173683d4f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b68617368272c20746573746e65742c20686569676874290a096966206e6f7420286973696e7374616e636528626c6f636b5f686173682c2062617365737472696e672920616e64206c656e28626c6f636b5f68617368293d3d3634293a0a090972657475726e207b276572726f72273a2027426c6f636b2061742068656967687420272b73747228686569676874292b27206e6f7420666f756e64277d0a090a0972657475726e207b0a090927626c6f636b273a204f505f52455455524e5f6865785f746f5f62696e284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b272c20746573746e65742c20626c6f636b5f686173682c2046616c736529290a097d0a0a0a646566204f505f52455455524e5f6765745f626c6f636b5f74786e73286865696768742c20746573746e6574293a0a097261775f626c6f636b3d4f505f52455455524e5f6765745f7261775f626c6f636b286865696768742c20746573746e6574290a09696620276572726f722720696e207261775f626c6f636b3a0a090972657475726e207b276572726f72273a207261775f626c6f636b5b276572726f72275d7d0a090a09626c6f636b3d4f505f52455455524e5f756e7061636b5f626c6f636b287261775f626c6f636b5b27626c6f636b275d290a090a0972657475726e20626c6f636b5b27747873275d0a0a0a232054616c6b696e6720746f20626974636f696e2d636c690a0a646566204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a09696e666f3d4f505f52455455524e5f626974636f696e5f636d642827676574696e666f272c20746573746e6574290a090a0972657475726e206973696e7374616e636528696e666f2c20646963742920616e64202762616c616e63652720696e20696e666f0a0a0a646566204f505f52455455524e5f626974636f696e5f636d6428636f6d6d616e642c20746573746e65742c202a61726773293a2023206d6f726520706172616d732061726520726561642066726f6d20686572650a096966204f505f52455455524e5f424954434f494e5f5553455f434d443a0a09097375625f617267733d5b4f505f52455455524e5f424954434f494e5f504154485d0a0909696620746573746e65743a0a0909097375625f617267732e617070656e6428272d746573746e657427290a09090a09097375625f617267732e617070656e6428636f6d6d616e64290a09090a0909666f722061726720696e20617267733a0a0909097375625f617267732e617070656e64286a736f6e2e64756d70732861726729206966206973696e7374616e6365286172672c2028646963742c206c6973742c207475706c65292920656c7365207374722861726729290a09090a09097261775f726573756c743d73756270726f636573732e636865636b5f6f7574707574287375625f61726773292e6465636f646528227574662d3822292e72737472697028225c6e22290a09090a09097472793a2023206465636f6465204a534f4e20696620706f737369626c650a090909726573756c743d6a736f6e2e6c6f616473287261775f726573756c74290a09096578636570742056616c75654572726f723a0a090909726573756c743d7261775f726573756c740a0a09656c73653a0a0909726571756573743d7b0a090909276964273a207374722874696d652e74696d652829292b272d272b7374722872616e646f6d2e72616e64696e74283130303030302c39393939393929292c0a090909276d6574686f64273a20636f6d6d616e642c0a09090927706172616d73273a20617267732c0a09097d0a09090a0909706f72743d4f505f52455455524e5f424954434f494e5f504f52540a0909757365723d4f505f52455455524e5f424954434f494e5f555345520a090970617373776f72643d4f505f52455455524e5f424954434f494e5f50415353574f52440a09090a09096966206e6f7420286c656e28706f72742920616e64206c656e28757365722920616e64206c656e2870617373776f726429293a0a09090923636f6e665f6c696e65733d6f70656e286f732e706174682e657870616e647573657228277e27292b272f2e626974636f696e2f626974636f696e2e636f6e6627292e726561646c696e657328290a090909636f6e665f6c696e65733d6f70656e286f732e706174682e657870616e647573657228434f4e465f46494c4529292e726561646c696e657328290a0909090a090909666f7220636f6e665f6c696e6520696e20636f6e665f6c696e65733a0a0909090970617274733d636f6e665f6c696e652e737472697028292e73706c697428273d272c203129202320757020746f20322070617274730a090909090a090909096966202870617274735b305d3d3d27727063706f7274272920616e64206e6f74206c656e28706f7274293a0a0909090909706f72743d696e742870617274735b315d290a090909096966202870617274735b305d3d3d2772706375736572272920616e64206e6f74206c656e2875736572293a0a0909090909757365723d70617274735b315d0a090909096966202870617274735b305d3d3d2772706370617373776f7264272920616e64206e6f74206c656e2870617373776f7264293a0a090909090970617373776f72643d70617274735b315d0a09090a09096966206e6f74206c656e28706f7274293a0a090909706f72743d313833333220696620746573746e657420656c736520383333320a0909090a09096966206e6f7420286c656e28757365722920616e64206c656e2870617373776f726429293a0a09090972657475726e204e6f6e652023206e6f20706f696e7420747279696e6720696e207468697320636173650a09090a090975726c3d27687474703a2f2f272b4f505f52455455524e5f424954434f494e5f49502b273a272b73747228706f7274292b272f270a09090a09097472793a0a09090966726f6d2075726c6c69623220696d706f7274204854545050617373776f72644d67725769746844656661756c745265616c6d2c204854545042617369634175746848616e646c65722c206275696c645f6f70656e65722c20696e7374616c6c5f6f70656e65722c2075726c6f70656e2c20485454504572726f720a090965786365707420496d706f72744572726f723a0a09090966726f6d2075726c6c69622e7265717565737420696d706f7274204854545050617373776f72644d67725769746844656661756c745265616c6d2c204854545042617369634175746848616e646c65722c206275696c645f6f70656e65722c20696e7374616c6c5f6f70656e65722c2075726c6f70656e0a0a0909706173736d616e3d4854545050617373776f72644d67725769746844656661756c745265616c6d28290a0909706173736d616e2e6164645f70617373776f7264284e6f6e652c2075726c2c20757365722c2070617373776f7264290a0909617574685f68616e646c65723d4854545042617369634175746848616e646c657228706173736d616e290a09096f70656e65723d6275696c645f6f70656e657228617574685f68616e646c6572290a0909696e7374616c6c5f6f70656e6572286f70656e6572290a202020202020202020202020202020207472793a0a20202020202020202020202020202020202020207261775f726573756c743d75726c6f70656e2875726c2c206a736f6e2e64756d70732872657175657374292e656e636f646528277574662d3827292c204f505f52455455524e5f4e45545f54494d454f5554292e7265616428290a2020202020202020202020202020202065786365707420485454504572726f7220617320653a0a20202020202020202020202020202020202020207072696e7420652e66702e7265616428290a202020202020202020202020202020202020202072616973650a0a09090a0909726573756c745f61727261793d6a736f6e2e6c6f616473287261775f726573756c742e6465636f646528277574662d382729290a0909726573756c743d726573756c745f61727261795b27726573756c74275d0a0a0972657475726e20726573756c740a0a0a2320576f726b696e6720776974682064617461207265666572656e6365730a0a232054686520666f726d6174206f6620612064617461207265666572656e63652069733a205b657374696d6174656420626c6f636b206865696768745d2d5b7061727469616c20747869645d202d2077686572653a0a0a23205b657374696d6174656420626c6f636b206865696768745d2069732074686520626c6f636b20776865726520746865206669727374207472616e73616374696f6e206d696768742061707065617220616e6420666f6c6c6f77696e670a2320776869636820616c6c2073756273657175656e74207472616e73616374696f6e732061726520657870656374656420746f206170706561722e20496e20746865206576656e74206f66206120776569726420626c6f636b636861696e0a232072656f72672c20697420697320706f737369626c6520746865206669727374207472616e73616374696f6e206d696768742061707065617220696e206120736c696768746c79206561726c69657220626c6f636b2e205768656e0a2320656d62656464696e6720646174612c20776520736574205b657374696d6174656420626c6f636b206865696768745d20746f20312b287468652063757272656e7420626c6f636b20686569676874292e0a0a23205b7061727469616c20747869645d20636f6e7461696e7320322061646a6163656e742062797465732066726f6d2074686520747869642c206174206120737065636966696320706f736974696f6e20696e2074686520747869643a0a2320322a285b7061727469616c20747869645d206469762036353533362920676976657320746865206f6666736574206f662074686520322061646a6163656e742062797465732c206265747765656e203020616e642032382e0a2320285b7061727469616c20747869645d206d6f642032353629206973207468652062797465206f662074686520747869642061742074686174206f66667365742e0a232028285b7061727469616c20747869645d206d6f6420363535333629206469762032353629206973207468652062797465206f662074686520747869642061742074686174206f666673657420706c7573206f6e652e0a23204e6f74652074686174207468652074786964206973206f726465726564206163636f7264696e6720746f20757365722070726573656e746174696f6e2c206e6f7420726177206461746120696e2074686520626c6f636b2e0a0a0a646566204f505f52455455524e5f63616c635f726566286e6578745f6865696768742c20747869642c2061766f69645f7478696473293a0a09747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2874786964290a090a09666f7220747869645f6f666673657420696e2072616e6765283135293a0a09097375625f747869643d747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d0a0909636c61736865643d46616c73650a09090a0909666f722061766f69645f7478696420696e2061766f69645f74786964733a0a09090961766f69645f747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2861766f69645f74786964290a0909090a090909696620280a090909092861766f69645f747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d3d3d7375625f747869642920616e640a0909090928747869645f62696e617279213d61766f69645f747869645f62696e617279290a090909293a0a09090909636c61736865643d547275650a09090909627265616b0a0909090a09096966206e6f7420636c61736865643a0a090909627265616b0a090a09696620636c61736865643a202320636f756c64206e6f742066696e64206120676f6f64207265666572656e63650a090972657475726e204e6f6e650a09090a0974785f7265663d6f726428747869645f62696e6172795b322a747869645f6f66667365743a312b322a747869645f6f66667365745d292b3235362a6f726428747869645f62696e6172795b312b322a747869645f6f66667365743a322b322a747869645f6f66667365745d292b36353533362a747869645f6f66667365740a090a0972657475726e2027253036642d2530366427202520286e6578745f6865696768742c2074785f726566290a0a0a646566204f505f52455455524e5f6765745f7265665f706172747328726566293a0a096966206e6f742072652e73656172636828275e5b302d395d2b5c2d5b302d39412d46612d665d2b24272c20726566293a202320616c736f20737570706f7274207061727469616c207478696420666f72207365636f6e642068616c660a090972657475726e204e6f6e650a090a0970617274733d7265662e73706c697428272d27290a09090a0969662072652e73656172636828275b412d46612d665d272c2070617274735b315d293a0a09096966206c656e2870617274735b315d293e3d343a0a090909747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2870617274735b315d5b303a345d290a09090970617274735b315d3d6f726428747869645f62696e6172795b303a315d292b3235362a6f726428747869645f62696e6172795b313a325d292b36353533362a300a0909656c73653a0a09090972657475726e204e6f6e650a0909090a0970617274733d6c697374286d617028696e742c20706172747329290a090a0969662070617274735b315d3e3938333033393a20232031342a36353533362b36353533350a090972657475726e204e6f6e650a09090a0972657475726e2070617274730a0a0a646566204f505f52455455524e5f6765745f7265665f68656967687473287265662c206d61785f686569676874293a0a0970617274733d4f505f52455455524e5f6765745f7265665f706172747328726566290a096966206e6f742070617274733a0a090972657475726e204e6f6e650a09090a0972657475726e204f505f52455455524e5f6765745f7472795f686569676874732870617274735b305d2c206d61785f6865696768742c2054727565290a0a0a646566204f505f52455455524e5f6765745f7472795f68656967687473286573745f6865696768742c206d61785f6865696768742c20616c736f5f6261636b293a0a09666f72776172645f6865696768743d6573745f6865696768740a096261636b5f6865696768743d6d696e28666f72776172645f6865696768742d312c206d61785f686569676874290a090a09686569676874733d5b5d0a096d656d706f6f6c3d46616c73650a097472795f6865696768743d300a090a097768696c6520547275653a0a0909696620616c736f5f6261636b20616e642028287472795f6865696768742533293d3d32293a20232073746570206261636b20657665727920332074726965730a090909686569676874732e617070656e64286261636b5f686569676874290a0909096261636b5f6865696768742d3d310a0a0909656c73653a0a090909696620666f72776172645f6865696768743e6d61785f6865696768743a0a090909096966206e6f74206d656d706f6f6c3a0a0909090909686569676874732e617070656e64283029202320696e6469636174657320746f20747279206d656d706f6f6c0a09090909096d656d706f6f6c3d547275650a090909090a09090909656c6966206e6f7420616c736f5f6261636b3a0a0909090909627265616b2023206e6f7468696e67206d6f726520746f20646f20686572650a0909090a090909656c73653a0a09090909686569676874732e617070656e6428666f72776172645f686569676874290a0909090a090909666f72776172645f6865696768742b3d310a090a09096966206c656e2868656967687473293e3d4f505f52455455524e5f4d41585f424c4f434b533a0a090909627265616b0a0909090a09097472795f6865696768742b3d310a090a0972657475726e20686569676874730a0a0a646566204f505f52455455524e5f6d617463685f7265665f74786964287265662c2074786964293a0a0970617274733d4f505f52455455524e5f6765745f7265665f706172747328726566290a096966206e6f742070617274733a0a090972657475726e204e6f6e650a0a09747869645f6f66667365743d696e742870617274735b315d2f3635353336290a09747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2874786964290a0a09747869645f706172743d747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d0a09747869645f6d617463683d627974656172726179285b70617274735b315d253235362c20696e74282870617274735b315d253635353336292f323536295d290a0a0972657475726e20747869645f706172743d3d747869645f6d6174636820232065786163742062696e61727920636f6d70617269736f6e0a0a0a2320556e7061636b696e6720616e64207061636b696e6720626974636f696e20626c6f636b7320616e64207472616e73616374696f6e73090a0a646566204f505f52455455524e5f756e7061636b5f626c6f636b2862696e617279293a0a096275666665723d4f505f52455455524e5f6275666665722862696e617279290a09626c6f636b3d7b7d0a090a09626c6f636b5b2776657273696f6e275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b276861736850726576426c6f636b275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a09626c6f636b5b27686173684d65726b6c65526f6f74275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a09626c6f636b5b2774696d65275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b2762697473275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b276e6f6e6365275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b2774785f636f756e74275d3d6275666665722e73686966745f766172696e7428290a090a09626c6f636b5b27747873275d3d7b7d0a090a096f6c645f7074723d6275666665722e7573656428290a090a097768696c65206275666665722e72656d61696e696e6728293a0a09097472616e73616374696f6e3d4f505f52455455524e5f756e7061636b5f74786e5f62756666657228627566666572290a09096e65775f7074723d6275666665722e7573656428290a090973697a653d6e65775f7074722d6f6c645f7074720a09090a09097261775f74786e5f62696e6172793d62696e6172795b6f6c645f7074723a6f6c645f7074722b73697a655d0a0909747869643d4f505f52455455524e5f62696e5f746f5f68657828686173686c69622e73686132353628686173686c69622e736861323536287261775f74786e5f62696e617279292e6469676573742829292e64696765737428295b3a3a2d315d290a09090a09096f6c645f7074723d6e65775f7074720a090a09097472616e73616374696f6e5b2773697a65275d3d73697a650a0909626c6f636b5b27747873275d5b747869645d3d7472616e73616374696f6e0a090a0972657475726e20626c6f636b0a0a0a646566204f505f52455455524e5f756e7061636b5f74786e2862696e617279293a0a0972657475726e204f505f52455455524e5f756e7061636b5f74786e5f627566666572284f505f52455455524e5f6275666665722862696e61727929290a0a0a646566204f505f52455455524e5f756e7061636b5f74786e5f62756666657228627566666572293a0a0923207365653a2068747470733a2f2f656e2e626974636f696e2e69742f77696b692f5472616e73616374696f6e730a090a0974786e3d7b0a09092776696e273a205b5d2c0a090927766f7574273a205b5d2c0a097d0a090a0974786e5b2776657273696f6e275d3d6275666665722e73686966745f756e7061636b28342c20273c4c2729202320736d616c6c2d656e6469616e2033322d626974730a090a09696e707574733d6275666665722e73686966745f766172696e7428290a09696620696e707574733e3130303030303a20232073616e69747920636865636b0a090972657475726e204e6f6e650a090a09666f72205f20696e2072616e676528696e70757473293a0a0909696e7075743d7b7d0a09090a0909696e7075745b2774786964275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a0909696e7075745b27766f7574275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09096c656e6774683d6275666665722e73686966745f766172696e7428290a0909696e7075745b27736372697074536967275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674286c656e67746829290a0909696e7075745b2773657175656e6365275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09090a090974786e5b2776696e275d2e617070656e6428696e707574290a09090a096f7574707574733d6275666665722e73686966745f766172696e7428290a096966206f7574707574733e3130303030303a20232073616e69747920636865636b0a090972657475726e204e6f6e650a09090a09666f72205f20696e2072616e6765286f757470757473293a0a09096f75747075743d7b7d0a09090a09096f75747075745b2776616c7565275d3d666c6f6174286275666665722e73686966745f75696e7436342829292f3130303030303030300a09096c656e6774683d6275666665722e73686966745f766172696e7428290a09096f75747075745b277363726970745075624b6579275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674286c656e67746829290a09090a090974786e5b27766f7574275d2e617070656e64286f7574707574290a090a0974786e5b276c6f636b74696d65275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a090a0972657475726e2074786e0a0a0a646566204f505f52455455524e5f66696e645f7370656e745f747869642874786e732c207370656e745f747869642c207370656e745f766f7574293a0a09666f7220747869642c2074786e5f756e7061636b656420696e2074786e732e6974656d7328293a0a0909666f7220696e70757420696e2074786e5f756e7061636b65645b2776696e275d3a0a09090969662028696e7075745b2774786964275d3d3d7370656e745f747869642920616e642028696e7075745b27766f7574275d3d3d7370656e745f766f7574293a0a0909090972657475726e20747869640a090909090a0972657475726e204e6f6e650a0a0a646566204f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564293a0a09666f7220696e6465782c206f757470757420696e20656e756d65726174652874786e5f756e7061636b65645b27766f7574275d293a0a09096f705f72657475726e3d4f505f52455455524e5f6765745f7363726970745f64617461284f505f52455455524e5f6865785f746f5f62696e286f75747075745b277363726970745075624b6579275d29290a09090a09096966206f705f72657475726e3a0a09090972657475726e207b0a0909090927696e646578273a20696e6465782c0a09090909276f705f72657475726e273a206f705f72657475726e2c0a0909097d0a090a0972657475726e204e6f6e650a090a0a646566204f505f52455455524e5f6765745f7363726970745f64617461287363726970745075624b657942696e617279293a0a096f705f72657475726e3d4e6f6e650a090a096966207363726970745075624b657942696e6172795b303a315d3d3d62275c783661273a0a090966697273745f6f72643d6f7264287363726970745075624b657942696e6172795b313a325d290a09090a090969662066697273745f6f72643c3d37353a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b323a322b66697273745f6f72645d0a0909656c69662066697273745f6f72643d3d307834633a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b333a332b6f7264287363726970745075624b657942696e6172795b323a335d295d0a0909656c69662066697273745f6f72643d3d307834643a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b343a342b6f7264287363726970745075624b657942696e6172795b323a335d292b3235362a6f7264287363726970745075624b657942696e6172795b333a345d295d0a090a0972657475726e206f705f72657475726e090a0a0a646566204f505f52455455524e5f7061636b5f74786e2874786e293a0a0962696e6172793d6227270a090a0962696e6172792b3d7374727563742e7061636b28273c4c272c2074786e5b2776657273696f6e275d290a090a0962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e74286c656e2874786e5b2776696e275d29290a090a09666f7220696e70757420696e2074786e5b2776696e275d3a0a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e28696e7075745b2774786964275d295b3a3a2d315d0a090962696e6172792b3d7374727563742e7061636b28273c4c272c20696e7075745b27766f7574275d290a090962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e7428696e74286c656e28696e7075745b27736372697074536967275d292f322929202320646976696465206279203220626563617573652069742069732063757272656e746c7920696e206865780a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e28696e7075745b27736372697074536967275d290a090962696e6172792b3d7374727563742e7061636b28273c4c272c20696e7075745b2773657175656e6365275d290a090a0962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e74286c656e2874786e5b27766f7574275d29290a090a09666f72206f757470757420696e2074786e5b27766f7574275d3a0a090962696e6172792b3d4f505f52455455524e5f7061636b5f75696e74363428696e7428726f756e64286f75747075745b2776616c7565275d2a3130303030303030302929290a090962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e7428696e74286c656e286f75747075745b277363726970745075624b6579275d292f322929202320646976696465206279203220626563617573652069742069732063757272656e746c7920696e206865780a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e286f75747075745b277363726970745075624b6579275d290a090a0962696e6172792b3d7374727563742e7061636b28273c4c272c2074786e5b276c6f636b74696d65275d290a090a0972657475726e2062696e6172790a0a0a646566204f505f52455455524e5f7061636b5f766172696e7428696e7465676572293a0a09696620696e74656765723e307846464646464646463a0a09097061636b65643d225c784646222b4f505f52455455524e5f7061636b5f75696e74363428696e7465676572290a09656c696620696e74656765723e3078464646463a0a09097061636b65643d225c784645222b7374727563742e7061636b28273c4c272c20696e7465676572290a09656c696620696e74656765723e307846433a0a09097061636b65643d225c784644222b7374727563742e7061636b28273c48272c20696e7465676572290a09656c73653a0a09097061636b65643d7374727563742e7061636b282742272c20696e7465676572290a090a0972657475726e207061636b65640a0a0a646566204f505f52455455524e5f7061636b5f75696e74363428696e7465676572293a0a0975707065723d696e7428696e74656765722f34323934393637323936290a096c6f7765723d696e74656765722d75707065722a343239343936373239360a090a0972657475726e207374727563742e7061636b28273c4c272c206c6f776572292b7374727563742e7061636b28273c4c272c207570706572290a0a0a232048656c70657220636c61737320666f7220756e7061636b696e6720626974636f696e2062696e61727920646174610a0a636c617373204f505f52455455524e5f62756666657228293a0a0a09646566205f5f696e69745f5f2873656c662c20646174612c207074723d30293a0a090973656c662e646174613d646174610a090973656c662e6c656e3d6c656e2864617461290a090973656c662e7074723d7074720a09200a096465662073686966742873656c662c206368617273293a0a09097072656669783d73656c662e646174615b73656c662e7074723a73656c662e7074722b63686172735d0a090973656c662e7074722b3d63686172730a0a090972657475726e207072656669780a09200a096465662073686966745f756e7061636b2873656c662c2063686172732c20666f726d6174293a0a0909756e7061636b3d7374727563742e756e7061636b28666f726d61742c2073656c662e736869667428636861727329290a0a090972657475726e20756e7061636b5b305d0a0a096465662073686966745f766172696e742873656c66293a0a090976616c75653d73656c662e73686966745f756e7061636b28312c20274227290a0a090969662076616c75653d3d307846463a0a09090976616c75653d73656c662e73686966745f75696e74363428290a0909656c69662076616c75653d3d307846453a0a09090976616c75653d73656c662e73686966745f756e7061636b28342c20273c4c27290a0909656c69662076616c75653d3d307846443a0a09090976616c75653d73656c662e73686966745f756e7061636b28322c20273c4827290a090a090972657475726e2076616c75650a0a096465662073686966745f75696e7436342873656c66293a0a090972657475726e2073656c662e73686966745f756e7061636b28342c20273c4c27292b343239343936373239362a73656c662e73686966745f756e7061636b28342c20273c4c27290a090a0964656620757365642873656c66293a0a090972657475726e206d696e2873656c662e7074722c2073656c662e6c656e290a0a096465662072656d61696e696e672873656c66293a0a090972657475726e206d61782873656c662e6c656e2d73656c662e7074722c2030290a0a0a2320436f6e76657274696e672062696e617279203c2d3e2068657861646563696d616c0a0a646566204f505f52455455524e5f6865785f746f5f62696e28686578293a0a097472793a0a09097261773d62696e61736369692e6132625f68657828686578290a0965786365707420457863657074696f6e3a0a090972657475726e204e6f6e650a09090a0972657475726e207261770a090a0a646566204f505f52455455524e5f62696e5f746f5f68657828737472696e67293a0a0972657475726e2062696e61736369692e6232615f68657828737472696e67292e6465636f646528277574662d3827290a
(decoded) # OP_RETURN.py # # Python script to generate and retrieve OP_RETURN bitcoin transactions # # Copyright (c) Coin Sciences Ltd # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import subprocess, json, time, random, os.path, binascii, struct, string, re, hashlib # Python 2-3 compatibility logic try: basestring except NameError: basestring = str # User-defined quasi-constants OP_RETURN_BITCOIN_IP='127.0.0.1' # IP address of your bitcoin node OP_RETURN_BITCOIN_USE_CMD=False # use command-line instead of JSON-RPC? CONF_FILE = '~/testnet.conf' if OP_RETURN_BITCOIN_USE_CMD: OP_RETURN_BITCOIN_PATH='/usr/bin/bitcoin-cli' # path to bitcoin-cli executable on this server else: OP_RETURN_BITCOIN_PORT='' # leave empty to use default port for mainnet/testnet OP_RETURN_BITCOIN_USER='' # leave empty to read from ~/.bitcoin/bitcoin.conf (Unix only) OP_RETURN_BITCOIN_PASSWORD='' # leave empty to read from ~/.bitcoin/bitcoin.conf (Unix only) OP_RETURN_BTC_FEE=0.003 # BTC fee to pay per transaction OP_RETURN_BTC_DUST=0.00001 # omit BTC outputs smaller than this OP_RETURN_MAX_BYTES=65535 # maximum bytes in an OP_RETURN (40 as of Bitcoin 0.10) OP_RETURN_MAX_BLOCKS=10 # maximum number of blocks to try when retrieving data OP_RETURN_NET_TIMEOUT=10 # how long to time out (in seconds) when communicating with bitcoin node # User-facing functions def OP_RETURN_send(send_address, send_amount, metadata, testnet=False): # Validate some parameters if not OP_RETURN_bitcoin_check(testnet): return {'error': 'Please check Bitcoin Core is running and OP_RETURN_BITCOIN_* constants are set correctly'} result=OP_RETURN_bitcoin_cmd('validateaddress', testnet, send_address) if not ('isvalid' in result and result['isvalid']): return {'error': 'Send address could not be validated: '+send_address} if isinstance(metadata, basestring): metadata=metadata.encode('utf-8') # convert to binary string metadata_len=len(metadata) if metadata_len>65536: return {'error': 'This library only supports metadata up to 65536 bytes in size'} if metadata_len>OP_RETURN_MAX_BYTES: return {'error': 'Metadata has '+str(metadata_len)+' bytes but is limited to '+str(OP_RETURN_MAX_BYTES)+' (see OP_RETURN_MAX_BYTES)'} # Calculate amounts and choose inputs output_amount=send_amount+OP_RETURN_BTC_FEE inputs_spend=OP_RETURN_select_inputs(output_amount, testnet) if 'error' in inputs_spend: return {'error': inputs_spend['error']} change_amount=inputs_spend['total']-output_amount # Build the raw transaction change_address=OP_RETURN_bitcoin_cmd('getrawchangeaddress', testnet) outputs={send_address: send_amount} if change_amount>=OP_RETURN_BTC_DUST: outputs[change_address]=change_amount raw_txn=OP_RETURN_create_txn(inputs_spend['inputs'], outputs, metadata, len(outputs), testnet) # Sign and send the transaction, return result return OP_RETURN_sign_send_txn(raw_txn, testnet) def OP_RETURN_store(data, testnet=False): # Data is stored in OP_RETURNs within a series of chained transactions. # If the OP_RETURN is followed by another output, the data continues in the transaction spending that output. # When the OP_RETURN is the last output, this also signifies the end of the data. # Validate parameters and get change address if not OP_RETURN_bitcoin_check(testnet): return {'error': 'Please check Bitcoin Core is running and OP_RETURN_BITCOIN_* constants are set correctly'} if isinstance(data, basestring): data=data.encode('utf-8') # convert to binary string data_len=len(data) if data_len==0: return {'error': 'Some data is required to be stored'} change_address=OP_RETURN_bitcoin_cmd('getrawchangeaddress', testnet) # Calculate amounts and choose first inputs to use output_amount=OP_RETURN_BTC_FEE*int((data_len+OP_RETURN_MAX_BYTES-1)/OP_RETURN_MAX_BYTES) # number of transactions required inputs_spend=OP_RETURN_select_inputs(output_amount, testnet) if 'error' in inputs_spend: return {'error': inputs_spend['error']} inputs=inputs_spend['inputs'] input_amount=inputs_spend['total'] # Find the current blockchain height and mempool txids height=int(OP_RETURN_bitcoin_cmd('getblockcount', testnet)) avoid_txids=OP_RETURN_bitcoin_cmd('getrawmempool', testnet) # Loop to build and send transactions result={'txids':[]} for data_ptr in range(0, data_len, OP_RETURN_MAX_BYTES): # Some preparation for this iteration last_txn=((data_ptr+OP_RETURN_MAX_BYTES)>=data_len) # is this the last tx in the chain? change_amount=input_amount-OP_RETURN_BTC_FEE metadata=data[data_ptr:data_ptr+OP_RETURN_MAX_BYTES] # Build and send this transaction outputs={} if change_amount>=OP_RETURN_BTC_DUST: # might be skipped for last transaction outputs[change_address]=change_amount raw_txn=OP_RETURN_create_txn(inputs, outputs, metadata, len(outputs) if last_txn else 0, testnet) send_result=OP_RETURN_sign_send_txn(raw_txn, testnet) # Check for errors and collect the txid if 'error' in send_result: result['error']=send_result['error'] break result['txids'].append(send_result['txid']) if data_ptr==0: result['ref']=OP_RETURN_calc_ref(height, send_result['txid'], avoid_txids) # Prepare inputs for next iteration inputs=[{ 'txid': send_result['txid'], 'vout': 1, }] input_amount=change_amount # Return the final result return result def OP_RETURN_retrieve(ref, max_results=1, testnet=False): # Validate parameters and get status of Bitcoin Core if not OP_RETURN_bitcoin_check(testnet): return {'error': 'Please check Bitcoin Core is running and OP_RETURN_BITCOIN_* constants are set correctly'} max_height=int(OP_RETURN_bitcoin_cmd('getblockcount', testnet)) heights=OP_RETURN_get_ref_heights(ref, max_height) if not isinstance(heights, list): return {'error': 'Ref is not valid'} # Collect and return the results results=[] for height in heights: if height==0: txids=OP_RETURN_list_mempool_txns(testnet) # if mempool, only get list for now (to save RPC calls) txns=None else: txns=OP_RETURN_get_block_txns(height, testnet) # if block, get all fully unpacked txids=txns.keys() for txid in txids: if OP_RETURN_match_ref_txid(ref, txid): if height==0: txn_unpacked=OP_RETURN_get_mempool_txn(txid, testnet) else: txn_unpacked=txns[txid] found=OP_RETURN_find_txn_data(txn_unpacked) if found: # Collect data from txid which matches ref and contains an OP_RETURN result={ 'txids': [str(txid)], 'data': found['op_return'], } key_heights={height: True} # Work out which other block heights / mempool we should try if height==0: try_heights=[] # nowhere else to look if first still in mempool else: result['ref']=OP_RETURN_calc_ref(height, txid, txns.keys()) try_heights=OP_RETURN_get_try_heights(height+1, max_height, False) # Collect the rest of the data, if appropriate if height==0: this_txns=OP_RETURN_get_mempool_txns(testnet) # now retrieve all to follow chain else: this_txns=txns last_txid=txid this_height=height while found['index'] < (len(txn_unpacked['vout'])-1): # this means more data to come next_txid=OP_RETURN_find_spent_txid(this_txns, last_txid, found['index']+1) # If we found the next txid in the data chain if next_txid: result['txids'].append(str(next_txid)) txn_unpacked=this_txns[next_txid] found=OP_RETURN_find_txn_data(txn_unpacked) if found: result['data']+=found['op_return'] key_heights[this_height]=True else: result['error']='Data incomplete - missing OP_RETURN' break last_txid=next_txid # Otherwise move on to the next height to keep looking else: if len(try_heights): this_height=try_heights.pop(0) if this_height==0: this_txns=OP_RETURN_get_mempool_txns(testnet) else: this_txns=OP_RETURN_get_block_txns(this_height, testnet) else: result['error']='Data incomplete - could not find next transaction' break # Finish up the information about this result result['heights']=list(key_heights.keys()) results.append(result) if len(results)>=max_results: break # stop if we have collected enough return results # Utility functions def OP_RETURN_select_inputs(total_amount, testnet): # List and sort unspent inputs by priority unspent_inputs=OP_RETURN_bitcoin_cmd('listunspent', testnet, 0) if not isinstance(unspent_inputs, list): return {'error': 'Could not retrieve list of unspent inputs'} unspent_inputs.sort(key=lambda unspent_input: unspent_input['amount']*unspent_input['confirmations'], reverse=True) # Identify which inputs should be spent inputs_spend=[] input_amount=0 for unspent_input in unspent_inputs: inputs_spend.append(unspent_input) input_amount+=unspent_input['amount'] if input_amount>=total_amount: break # stop when we have enough if input_amount<total_amount: return {'error': 'Not enough funds are available to cover the amount and fee'} # Return the successful result return { 'inputs': inputs_spend, 'total': input_amount, } def OP_RETURN_create_txn(inputs, outputs, metadata, metadata_pos, testnet): raw_txn=OP_RETURN_bitcoin_cmd('createrawtransaction', testnet, inputs, outputs) txn_unpacked=OP_RETURN_unpack_txn(OP_RETURN_hex_to_bin(raw_txn)) metadata_len=len(metadata) if metadata_len<=75: payload=bytearray((metadata_len,))+metadata # length byte + data (https://en.bitcoin.it/wiki/Script) elif metadata_len<=256: payload="\x4c"+bytearray((metadata_len,))+metadata # OP_PUSHDATA1 format else: payload="\x4d"+bytearray((metadata_len%256,))+bytearray((int(metadata_len/256),))+metadata # OP_PUSHDATA2 format metadata_pos=min(max(0, metadata_pos), len(txn_unpacked['vout'])) # constrain to valid values txn_unpacked['vout'][metadata_pos:metadata_pos]=[{ 'value': 0, 'scriptPubKey': '6a'+OP_RETURN_bin_to_hex(payload) # here's the OP_RETURN }] return OP_RETURN_bin_to_hex(OP_RETURN_pack_txn(txn_unpacked)) def OP_RETURN_sign_send_txn(raw_txn, testnet): signed_txn=OP_RETURN_bitcoin_cmd('signrawtransaction', testnet, raw_txn) if not ('complete' in signed_txn and signed_txn['complete']): return {'error': 'Could not sign the transaction'} send_txid=OP_RETURN_bitcoin_cmd('sendrawtransaction', testnet, signed_txn['hex']) if not (isinstance(send_txid, basestring) and len(send_txid)==64): return {'error': 'Could not send the transaction'} return {'txid': str(send_txid)} def OP_RETURN_list_mempool_txns(testnet): return OP_RETURN_bitcoin_cmd('getrawmempool', testnet) def OP_RETURN_get_mempool_txn(txid, testnet): raw_txn=OP_RETURN_bitcoin_cmd('getrawtransaction', testnet, txid) return OP_RETURN_unpack_txn(OP_RETURN_hex_to_bin(raw_txn)) def OP_RETURN_get_mempool_txns(testnet): txids=OP_RETURN_list_mempool_txns(testnet) txns={} for txid in txids: txns[txid]=OP_RETURN_get_mempool_txn(txid, testnet) return txns def OP_RETURN_get_raw_block(height, testnet): block_hash=OP_RETURN_bitcoin_cmd('getblockhash', testnet, height) if not (isinstance(block_hash, basestring) and len(block_hash)==64): return {'error': 'Block at height '+str(height)+' not found'} return { 'block': OP_RETURN_hex_to_bin(OP_RETURN_bitcoin_cmd('getblock', testnet, block_hash, False)) } def OP_RETURN_get_block_txns(height, testnet): raw_block=OP_RETURN_get_raw_block(height, testnet) if 'error' in raw_block: return {'error': raw_block['error']} block=OP_RETURN_unpack_block(raw_block['block']) return block['txs'] # Talking to bitcoin-cli def OP_RETURN_bitcoin_check(testnet): info=OP_RETURN_bitcoin_cmd('getinfo', testnet) return isinstance(info, dict) and 'balance' in info def OP_RETURN_bitcoin_cmd(command, testnet, *args): # more params are read from here if OP_RETURN_BITCOIN_USE_CMD: sub_args=[OP_RETURN_BITCOIN_PATH] if testnet: sub_args.append('-testnet') sub_args.append(command) for arg in args: sub_args.append(json.dumps(arg) if isinstance(arg, (dict, list, tuple)) else str(arg)) raw_result=subprocess.check_output(sub_args).decode("utf-8").rstrip("\n") try: # decode JSON if possible result=json.loads(raw_result) except ValueError: result=raw_result else: request={ 'id': str(time.time())+'-'+str(random.randint(100000,999999)), 'method': command, 'params': args, } port=OP_RETURN_BITCOIN_PORT user=OP_RETURN_BITCOIN_USER password=OP_RETURN_BITCOIN_PASSWORD if not (len(port) and len(user) and len(password)): #conf_lines=open(os.path.expanduser('~')+'/.bitcoin/bitcoin.conf').readlines() conf_lines=open(os.path.expanduser(CONF_FILE)).readlines() for conf_line in conf_lines: parts=conf_line.strip().split('=', 1) # up to 2 parts if (parts[0]=='rpcport') and not len(port): port=int(parts[1]) if (parts[0]=='rpcuser') and not len(user): user=parts[1] if (parts[0]=='rpcpassword') and not len(password): password=parts[1] if not len(port): port=18332 if testnet else 8332 if not (len(user) and len(password)): return None # no point trying in this case url='http://'+OP_RETURN_BITCOIN_IP+':'+str(port)+'/' try: from urllib2 import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener, install_opener, urlopen, HTTPError except ImportError: from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener, install_opener, urlopen passman=HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, url, user, password) auth_handler=HTTPBasicAuthHandler(passman) opener=build_opener(auth_handler) install_opener(opener) try: raw_result=urlopen(url, json.dumps(request).encode('utf-8'), OP_RETURN_NET_TIMEOUT).read() except HTTPError as e: print e.fp.read() raise result_array=json.loads(raw_result.decode('utf-8')) result=result_array['result'] return result # Working with data references # The format of a data reference is: [estimated block height]-[partial txid] - where: # [estimated block height] is the block where the first transaction might appear and following # which all subsequent transactions are expected to appear. In the event of a weird blockchain # reorg, it is possible the first transaction might appear in a slightly earlier block. When # embedding data, we set [estimated block height] to 1+(the current block height). # [partial txid] contains 2 adjacent bytes from the txid, at a specific position in the txid: # 2*([partial txid] div 65536) gives the offset of the 2 adjacent bytes, between 0 and 28. # ([partial txid] mod 256) is the byte of the txid at that offset. # (([partial txid] mod 65536) div 256) is the byte of the txid at that offset plus one. # Note that the txid is ordered according to user presentation, not raw data in the block. def OP_RETURN_calc_ref(next_height, txid, avoid_txids): txid_binary=OP_RETURN_hex_to_bin(txid) for txid_offset in range(15): sub_txid=txid_binary[2*txid_offset:2*txid_offset+2] clashed=False for avoid_txid in avoid_txids: avoid_txid_binary=OP_RETURN_hex_to_bin(avoid_txid) if ( (avoid_txid_binary[2*txid_offset:2*txid_offset+2]==sub_txid) and (txid_binary!=avoid_txid_binary) ): clashed=True break if not clashed: break if clashed: # could not find a good reference return None tx_ref=ord(txid_binary[2*txid_offset:1+2*txid_offset])+256*ord(txid_binary[1+2*txid_offset:2+2*txid_offset])+65536*txid_offset return '%06d-%06d' % (next_height, tx_ref) def OP_RETURN_get_ref_parts(ref): if not re.search('^[0-9]+\-[0-9A-Fa-f]+$', ref): # also support partial txid for second half return None parts=ref.split('-') if re.search('[A-Fa-f]', parts[1]): if len(parts[1])>=4: txid_binary=OP_RETURN_hex_to_bin(parts[1][0:4]) parts[1]=ord(txid_binary[0:1])+256*ord(txid_binary[1:2])+65536*0 else: return None parts=list(map(int, parts)) if parts[1]>983039: # 14*65536+65535 return None return parts def OP_RETURN_get_ref_heights(ref, max_height): parts=OP_RETURN_get_ref_parts(ref) if not parts: return None return OP_RETURN_get_try_heights(parts[0], max_height, True) def OP_RETURN_get_try_heights(est_height, max_height, also_back): forward_height=est_height back_height=min(forward_height-1, max_height) heights=[] mempool=False try_height=0 while True: if also_back and ((try_height%3)==2): # step back every 3 tries heights.append(back_height) back_height-=1 else: if forward_height>max_height: if not mempool: heights.append(0) # indicates to try mempool mempool=True elif not also_back: break # nothing more to do here else: heights.append(forward_height) forward_height+=1 if len(heights)>=OP_RETURN_MAX_BLOCKS: break try_height+=1 return heights def OP_RETURN_match_ref_txid(ref, txid): parts=OP_RETURN_get_ref_parts(ref) if not parts: return None txid_offset=int(parts[1]/65536) txid_binary=OP_RETURN_hex_to_bin(txid) txid_part=txid_binary[2*txid_offset:2*txid_offset+2] txid_match=bytearray([parts[1]%256, int((parts[1]%65536)/256)]) return txid_part==txid_match # exact binary comparison # Unpacking and packing bitcoin blocks and transactions def OP_RETURN_unpack_block(binary): buffer=OP_RETURN_buffer(binary) block={} block['version']=buffer.shift_unpack(4, '<L') block['hashPrevBlock']=OP_RETURN_bin_to_hex(buffer.shift(32)[::-1]) block['hashMerkleRoot']=OP_RETURN_bin_to_hex(buffer.shift(32)[::-1]) block['time']=buffer.shift_unpack(4, '<L') block['bits']=buffer.shift_unpack(4, '<L') block['nonce']=buffer.shift_unpack(4, '<L') block['tx_count']=buffer.shift_varint() block['txs']={} old_ptr=buffer.used() while buffer.remaining(): transaction=OP_RETURN_unpack_txn_buffer(buffer) new_ptr=buffer.used() size=new_ptr-old_ptr raw_txn_binary=binary[old_ptr:old_ptr+size] txid=OP_RETURN_bin_to_hex(hashlib.sha256(hashlib.sha256(raw_txn_binary).digest()).digest()[::-1]) old_ptr=new_ptr transaction['size']=size block['txs'][txid]=transaction return block def OP_RETURN_unpack_txn(binary): return OP_RETURN_unpack_txn_buffer(OP_RETURN_buffer(binary)) def OP_RETURN_unpack_txn_buffer(buffer): # see: https://en.bitcoin.it/wiki/Transactions txn={ 'vin': [], 'vout': [], } txn['version']=buffer.shift_unpack(4, '<L') # small-endian 32-bits inputs=buffer.shift_varint() if inputs>100000: # sanity check return None for _ in range(inputs): input={} input['txid']=OP_RETURN_bin_to_hex(buffer.shift(32)[::-1]) input['vout']=buffer.shift_unpack(4, '<L') length=buffer.shift_varint() input['scriptSig']=OP_RETURN_bin_to_hex(buffer.shift(length)) input['sequence']=buffer.shift_unpack(4, '<L') txn['vin'].append(input) outputs=buffer.shift_varint() if outputs>100000: # sanity check return None for _ in range(outputs): output={} output['value']=float(buffer.shift_uint64())/100000000 length=buffer.shift_varint() output['scriptPubKey']=OP_RETURN_bin_to_hex(buffer.shift(length)) txn['vout'].append(output) txn['locktime']=buffer.shift_unpack(4, '<L') return txn def OP_RETURN_find_spent_txid(txns, spent_txid, spent_vout): for txid, txn_unpacked in txns.items(): for input in txn_unpacked['vin']: if (input['txid']==spent_txid) and (input['vout']==spent_vout): return txid return None def OP_RETURN_find_txn_data(txn_unpacked): for index, output in enumerate(txn_unpacked['vout']): op_return=OP_RETURN_get_script_data(OP_RETURN_hex_to_bin(output['scriptPubKey'])) if op_return: return { 'index': index, 'op_return': op_return, } return None def OP_RETURN_get_script_data(scriptPubKeyBinary): op_return=None if scriptPubKeyBinary[0:1]==b'\x6a': first_ord=ord(scriptPubKeyBinary[1:2]) if first_ord<=75: op_return=scriptPubKeyBinary[2:2+first_ord] elif first_ord==0x4c: op_return=scriptPubKeyBinary[3:3+ord(scriptPubKeyBinary[2:3])] elif first_ord==0x4d: op_return=scriptPubKeyBinary[4:4+ord(scriptPubKeyBinary[2:3])+256*ord(scriptPubKeyBinary[3:4])] return op_return def OP_RETURN_pack_txn(txn): binary=b'' binary+=struct.pack('<L', txn['version']) binary+=OP_RETURN_pack_varint(len(txn['vin'])) for input in txn['vin']: binary+=OP_RETURN_hex_to_bin(input['txid'])[::-1] binary+=struct.pack('<L', input['vout']) binary+=OP_RETURN_pack_varint(int(len(input['scriptSig'])/2)) # divide by 2 because it is currently in hex binary+=OP_RETURN_hex_to_bin(input['scriptSig']) binary+=struct.pack('<L', input['sequence']) binary+=OP_RETURN_pack_varint(len(txn['vout'])) for output in txn['vout']: binary+=OP_RETURN_pack_uint64(int(round(output['value']*100000000))) binary+=OP_RETURN_pack_varint(int(len(output['scriptPubKey'])/2)) # divide by 2 because it is currently in hex binary+=OP_RETURN_hex_to_bin(output['scriptPubKey']) binary+=struct.pack('<L', txn['locktime']) return binary def OP_RETURN_pack_varint(integer): if integer>0xFFFFFFFF: packed="\xFF"+OP_RETURN_pack_uint64(integer) elif integer>0xFFFF: packed="\xFE"+struct.pack('<L', integer) elif integer>0xFC: packed="\xFD"+struct.pack('<H', integer) else: packed=struct.pack('B', integer) return packed def OP_RETURN_pack_uint64(integer): upper=int(integer/4294967296) lower=integer-upper*4294967296 return struct.pack('<L', lower)+struct.pack('<L', upper) # Helper class for unpacking bitcoin binary data class OP_RETURN_buffer(): def __init__(self, data, ptr=0): self.data=data self.len=len(data) self.ptr=ptr def shift(self, chars): prefix=self.data[self.ptr:self.ptr+chars] self.ptr+=chars return prefix def shift_unpack(self, chars, format): unpack=struct.unpack(format, self.shift(chars)) return unpack[0] def shift_varint(self): value=self.shift_unpack(1, 'B') if value==0xFF: value=self.shift_uint64() elif value==0xFE: value=self.shift_unpack(4, '<L') elif value==0xFD: value=self.shift_unpack(2, '<H') return value def shift_uint64(self): return self.shift_unpack(4, '<L')+4294967296*self.shift_unpack(4, '<L') def used(self): return min(self.ptr, self.len) def remaining(self): return max(self.len-self.ptr, 0) # Converting binary <-> hexadecimal def OP_RETURN_hex_to_bin(hex): try: raw=binascii.a2b_hex(hex) except Exception: return None return raw def OP_RETURN_bin_to_hex(string): return binascii.b2a_hex(string).decode('utf-8')

Transaction


{
    "txid": "d20bf4e3e5fb1a22e3bbcbe9d76c634cdfd0f1353f1b9da9a1a6582cc0d2751a",
    "hash": "d20bf4e3e5fb1a22e3bbcbe9d76c634cdfd0f1353f1b9da9a1a6582cc0d2751a",
    "version": 1,
    "size": 24255,
    "locktime": 0,
    "vin": [
        {
            "txid": "a58bfd7e23dbe0154360fa4cc91537d63cb7edb6a63270e0b5e93bd4ff5a5682",
            "vout": 0,
            "scriptSig": {
                "asm": "3045022100eaebe2fcd2a1ccaed1259e7792688e0cc83d849497a0cc9d6c0cd6f4495068cc0220331772e997f56cf41ded5ee16e0552c28db56d90780e96e6d40d0f8634a0469e[ALL] 02948998077e8868e4900c4a3f522aaf5dd72da543b8b139bc3cbd712203933fb3",
                "hex": "483045022100eaebe2fcd2a1ccaed1259e7792688e0cc83d849497a0cc9d6c0cd6f4495068cc0220331772e997f56cf41ded5ee16e0552c28db56d90780e96e6d40d0f8634a0469e012102948998077e8868e4900c4a3f522aaf5dd72da543b8b139bc3cbd712203933fb3"
            },
            "sequence": 4294967295
        }
    ],
    "vout": [
        {
            "value": 1886492.28,
            "n": 0,
            "scriptPubKey": {
                "asm": "OP_DUP OP_HASH160 d923bca73da482216ac46178a32f54ce12e6422a OP_EQUALVERIFY OP_CHECKSIG",
                "hex": "76a914d923bca73da482216ac46178a32f54ce12e6422a88ac",
                "reqSigs": 1,
                "type": "pubkeyhash",
                "addresses": [
                    "ectest:qrvj80988kjgygt2c3sh3ge02n8p9ejz9gkcyplfdt"
                ]
            }
        },
        {
            "value": 0,
            "n": 1,
            "scriptPubKey": {
                "asm": "OP_RETURN 23204f505f52455455524e2e70790a230a2320507974686f6e2073637269707420746f2067656e657261746520616e64207265747269657665204f505f52455455524e20626974636f696e207472616e73616374696f6e730a230a2320436f707972696768742028632920436f696e20536369656e636573204c74640a230a23205065726d697373696f6e20697320686572656279206772616e7465642c2066726565206f66206368617267652c20746f20616e7920706572736f6e206f627461696e696e67206120636f70790a23206f66207468697320736f66747761726520616e64206173736f63696174656420646f63756d656e746174696f6e2066696c657320287468652022536f66747761726522292c20746f206465616c0a2320696e2074686520536f66747761726520776974686f7574207265737472696374696f6e2c20696e636c7564696e6720776974686f7574206c696d69746174696f6e20746865207269676874730a2320746f207573652c20636f70792c206d6f646966792c206d657267652c207075626c6973682c20646973747269627574652c207375626c6963656e73652c20616e642f6f722073656c6c0a2320636f70696573206f662074686520536f6674776172652c20616e6420746f207065726d697420706572736f6e7320746f2077686f6d2074686520536f6674776172652069730a23206675726e697368656420746f20646f20736f2c207375626a65637420746f2074686520666f6c6c6f77696e6720636f6e646974696f6e733a0a230a23205468652061626f766520636f70797269676874206e6f7469636520616e642074686973207065726d697373696f6e206e6f74696365207368616c6c20626520696e636c7564656420696e0a2320616c6c20636f70696573206f72207375627374616e7469616c20706f7274696f6e73206f662074686520536f6674776172652e0a230a232054484520534f4654574152452049532050524f564944454420224153204953222c20574954484f55542057415252414e5459204f4620414e59204b494e442c2045585052455353204f520a2320494d504c4945442c20494e434c5544494e4720425554204e4f54204c494d4954454420544f205448452057415252414e54494553204f46204d45524348414e544142494c4954592c0a23204649544e45535320464f52204120504152544943554c415220505552504f534520414e44204e4f4e494e4652494e47454d454e542e20494e204e4f204556454e54205348414c4c205448450a2320415554484f5253204f5220434f5059524947485420484f4c44455253204245204c4941424c4520464f5220414e5920434c41494d2c2044414d41474553204f52204f544845520a23204c494142494c4954592c205748455448455220494e20414e20414354494f4e204f4620434f4e54524143542c20544f5254204f52204f54484552574953452c2041524953494e472046524f4d2c0a23204f5554204f46204f5220494e20434f4e4e454354494f4e20574954482054484520534f465457415245204f522054484520555345204f52204f54484552204445414c494e475320494e0a232054484520534f4654574152452e0a0a0a696d706f72742073756270726f636573732c206a736f6e2c2074696d652c2072616e646f6d2c206f732e706174682c2062696e61736369692c207374727563742c20737472696e672c2072652c20686173686c69620a0a0a2320507974686f6e20322d3320636f6d7061746962696c697479206c6f6769630a0a7472793a0a0962617365737472696e670a657863657074204e616d654572726f723a0a0962617365737472696e67203d207374720a090a20200a2320557365722d646566696e65642071756173692d636f6e7374616e74730a0a4f505f52455455524e5f424954434f494e5f49503d273132372e302e302e312720232049502061646472657373206f6620796f757220626974636f696e206e6f64650a4f505f52455455524e5f424954434f494e5f5553455f434d443d46616c736520232075736520636f6d6d616e642d6c696e6520696e7374656164206f66204a534f4e2d5250433f0a0a434f4e465f46494c45203d20277e2f746573746e65742e636f6e66270a0a6966204f505f52455455524e5f424954434f494e5f5553455f434d443a0a094f505f52455455524e5f424954434f494e5f504154483d272f7573722f62696e2f626974636f696e2d636c69272023207061746820746f20626974636f696e2d636c692065786563757461626c65206f6e2074686973207365727665720a090a656c73653a0a094f505f52455455524e5f424954434f494e5f504f52543d27272023206c6561766520656d70747920746f207573652064656661756c7420706f727420666f72206d61696e6e65742f746573746e65740a094f505f52455455524e5f424954434f494e5f555345523d27272023206c6561766520656d70747920746f20726561642066726f6d207e2f2e626974636f696e2f626974636f696e2e636f6e662028556e6978206f6e6c79290a094f505f52455455524e5f424954434f494e5f50415353574f52443d27272023206c6561766520656d70747920746f20726561642066726f6d207e2f2e626974636f696e2f626974636f696e2e636f6e662028556e6978206f6e6c79290a090a4f505f52455455524e5f4254435f4645453d302e3030332023204254432066656520746f2070617920706572207472616e73616374696f6e0a4f505f52455455524e5f4254435f445553543d302e30303030312023206f6d697420425443206f75747075747320736d616c6c6572207468616e20746869730a0a4f505f52455455524e5f4d41585f42595445533d36353533352023206d6178696d756d20627974657320696e20616e204f505f52455455524e20283430206173206f6620426974636f696e20302e3130290a4f505f52455455524e5f4d41585f424c4f434b533d31302023206d6178696d756d206e756d626572206f6620626c6f636b7320746f20747279207768656e2072657472696576696e6720646174610a0a4f505f52455455524e5f4e45545f54494d454f55543d3130202320686f77206c6f6e6720746f2074696d65206f75742028696e207365636f6e647329207768656e20636f6d6d756e69636174696e67207769746820626974636f696e206e6f64650a0a0a2320557365722d666163696e672066756e6374696f6e730a0a646566204f505f52455455524e5f73656e642873656e645f616464726573732c2073656e645f616d6f756e742c206d657461646174612c20746573746e65743d46616c7365293a0a09232056616c696461746520736f6d6520706172616d65746572730a090a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a0a09726573756c743d4f505f52455455524e5f626974636f696e5f636d64282776616c696461746561646472657373272c20746573746e65742c2073656e645f61646472657373290a096966206e6f74202827697376616c69642720696e20726573756c7420616e6420726573756c745b27697376616c6964275d293a0a090972657475726e207b276572726f72273a202753656e64206164647265737320636f756c64206e6f742062652076616c6964617465643a20272b73656e645f616464726573737d0a090a096966206973696e7374616e6365286d657461646174612c2062617365737472696e67293a0a09096d657461646174613d6d657461646174612e656e636f646528277574662d382729202320636f6e7665727420746f2062696e61727920737472696e670a0a096d657461646174615f6c656e3d6c656e286d65746164617461290a09090a096966206d657461646174615f6c656e3e36353533363a0a090972657475726e207b276572726f72273a202754686973206c696272617279206f6e6c7920737570706f727473206d6574616461746120757020746f20363535333620627974657320696e2073697a65277d0a09090a096966206d657461646174615f6c656e3e4f505f52455455524e5f4d41585f42595445533a0a090972657475726e207b276572726f72273a20274d657461646174612068617320272b737472286d657461646174615f6c656e292b2720627974657320627574206973206c696d6974656420746f20272b737472284f505f52455455524e5f4d41585f4259544553292b272028736565204f505f52455455524e5f4d41585f425954455329277d0a090a09232043616c63756c61746520616d6f756e747320616e642063686f6f736520696e707574730a0a096f75747075745f616d6f756e743d73656e645f616d6f756e742b4f505f52455455524e5f4254435f4645450a0a09696e707574735f7370656e643d4f505f52455455524e5f73656c6563745f696e70757473286f75747075745f616d6f756e742c20746573746e6574290a090a09696620276572726f722720696e20696e707574735f7370656e643a0a090972657475726e207b276572726f72273a20696e707574735f7370656e645b276572726f72275d7d0a090a096368616e67655f616d6f756e743d696e707574735f7370656e645b27746f74616c275d2d6f75747075745f616d6f756e740a0a0923204275696c642074686520726177207472616e73616374696f6e0a09090a096368616e67655f616464726573733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776368616e676561646472657373272c20746573746e6574290a090a096f7574707574733d7b73656e645f616464726573733a2073656e645f616d6f756e747d0a090a096966206368616e67655f616d6f756e743e3d4f505f52455455524e5f4254435f445553543a0a09096f7574707574735b6368616e67655f616464726573735d3d6368616e67655f616d6f756e740a09090a097261775f74786e3d4f505f52455455524e5f6372656174655f74786e28696e707574735f7370656e645b27696e70757473275d2c206f7574707574732c206d657461646174612c206c656e286f757470757473292c20746573746e6574290a0a0923205369676e20616e642073656e6420746865207472616e73616374696f6e2c2072657475726e20726573756c740a0a0972657475726e204f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574290a0a0a646566204f505f52455455524e5f73746f726528646174612c20746573746e65743d46616c7365293a0a092320446174612069732073746f72656420696e204f505f52455455524e732077697468696e206120736572696573206f6620636861696e6564207472616e73616374696f6e732e0a092320496620746865204f505f52455455524e20697320666f6c6c6f77656420627920616e6f74686572206f75747075742c20746865206461746120636f6e74696e75657320696e20746865207472616e73616374696f6e207370656e64696e672074686174206f75747075742e0a0923205768656e20746865204f505f52455455524e20697320746865206c617374206f75747075742c207468697320616c736f207369676e69666965732074686520656e64206f662074686520646174612e0a0a09232056616c696461746520706172616d657465727320616e6420676574206368616e676520616464726573730a0a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a09090a096966206973696e7374616e636528646174612c2062617365737472696e67293a0a0909646174613d646174612e656e636f646528277574662d382729202320636f6e7665727420746f2062696e61727920737472696e670a090a09646174615f6c656e3d6c656e2864617461290a09696620646174615f6c656e3d3d303a0a090972657475726e207b276572726f72273a2027536f6d65206461746120697320726571756972656420746f2062652073746f726564277d0a0a096368616e67655f616464726573733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776368616e676561646472657373272c20746573746e6574290a090a09232043616c63756c61746520616d6f756e747320616e642063686f6f736520666972737420696e7075747320746f207573650a0a096f75747075745f616d6f756e743d4f505f52455455524e5f4254435f4645452a696e742828646174615f6c656e2b4f505f52455455524e5f4d41585f42595445532d31292f4f505f52455455524e5f4d41585f4259544553292023206e756d626572206f66207472616e73616374696f6e732072657175697265640a090a09696e707574735f7370656e643d4f505f52455455524e5f73656c6563745f696e70757473286f75747075745f616d6f756e742c20746573746e6574290a09696620276572726f722720696e20696e707574735f7370656e643a0a090972657475726e207b276572726f72273a20696e707574735f7370656e645b276572726f72275d7d0a09090a09696e707574733d696e707574735f7370656e645b27696e70757473275d0a09696e7075745f616d6f756e743d696e707574735f7370656e645b27746f74616c275d0a0a09232046696e64207468652063757272656e7420626c6f636b636861696e2068656967687420616e64206d656d706f6f6c2074786964730a0a096865696768743d696e74284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b636f756e74272c20746573746e657429290a0961766f69645f74786964733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776d656d706f6f6c272c20746573746e6574290a0a0923204c6f6f7020746f206275696c6420616e642073656e64207472616e73616374696f6e730a0a09726573756c743d7b277478696473273a5b5d7d0a0a09666f7220646174615f70747220696e2072616e676528302c20646174615f6c656e2c204f505f52455455524e5f4d41585f4259544553293a0a09092320536f6d65207072657061726174696f6e20666f72207468697320697465726174696f6e0a090a09096c6173745f74786e3d2828646174615f7074722b4f505f52455455524e5f4d41585f4259544553293e3d646174615f6c656e292023206973207468697320746865206c61737420747820696e2074686520636861696e3f0a09096368616e67655f616d6f756e743d696e7075745f616d6f756e742d4f505f52455455524e5f4254435f4645450a09096d657461646174613d646174615b646174615f7074723a646174615f7074722b4f505f52455455524e5f4d41585f42595445535d0a0909090a090923204275696c6420616e642073656e642074686973207472616e73616374696f6e0a090a09096f7574707574733d7b7d0a09096966206368616e67655f616d6f756e743e3d4f505f52455455524e5f4254435f445553543a2023206d6967687420626520736b697070656420666f72206c617374207472616e73616374696f6e0a0909096f7574707574735b6368616e67655f616464726573735d3d6368616e67655f616d6f756e740a0909090a09097261775f74786e3d4f505f52455455524e5f6372656174655f74786e28696e707574732c206f7574707574732c206d657461646174612c206c656e286f75747075747329206966206c6173745f74786e20656c736520302c20746573746e6574290a09090a090973656e645f726573756c743d4f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574290a090a09092320436865636b20666f72206572726f727320616e6420636f6c6c6563742074686520747869640a090a0909696620276572726f722720696e2073656e645f726573756c743a0a090909726573756c745b276572726f72275d3d73656e645f726573756c745b276572726f72275d0a090909627265616b0a09090a0909726573756c745b277478696473275d2e617070656e642873656e645f726573756c745b2774786964275d290a09090a0909696620646174615f7074723d3d303a0a090909726573756c745b27726566275d3d4f505f52455455524e5f63616c635f726566286865696768742c2073656e645f726573756c745b2774786964275d2c2061766f69645f7478696473290a09090a090923205072657061726520696e7075747320666f72206e65787420697465726174696f6e0a0a0909696e707574733d5b7b0a0909092774786964273a2073656e645f726573756c745b2774786964275d2c0a09090927766f7574273a20312c0a09097d5d0a0a0909696e7075745f616d6f756e743d6368616e67655f616d6f756e740a090a09232052657475726e207468652066696e616c20726573756c740a0a0972657475726e20726573756c740a0a0a646566204f505f52455455524e5f7265747269657665287265662c206d61785f726573756c74733d312c20746573746e65743d46616c7365293a0a09232056616c696461746520706172616d657465727320616e642067657420737461747573206f6620426974636f696e20436f72650a0a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a09090a096d61785f6865696768743d696e74284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b636f756e74272c20746573746e657429290a09686569676874733d4f505f52455455524e5f6765745f7265665f68656967687473287265662c206d61785f686569676874290a090a096966206e6f74206973696e7374616e636528686569676874732c206c697374293a0a090972657475726e207b276572726f72273a2027526566206973206e6f742076616c6964277d0a0a092320436f6c6c65637420616e642072657475726e2074686520726573756c74730a090a09726573756c74733d5b5d0a090a09666f722068656967687420696e20686569676874733a0a09096966206865696768743d3d303a0a09090974786964733d4f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574292023206966206d656d706f6f6c2c206f6e6c7920676574206c69737420666f72206e6f772028746f2073617665205250432063616c6c73290a09090974786e733d4e6f6e650a0909656c73653a0a09090974786e733d4f505f52455455524e5f6765745f626c6f636b5f74786e73286865696768742c20746573746e657429202320696620626c6f636b2c2067657420616c6c2066756c6c7920756e7061636b65640a09090974786964733d74786e732e6b65797328290a09090a0909666f72207478696420696e2074786964733a0a0909096966204f505f52455455524e5f6d617463685f7265665f74786964287265662c2074786964293a0a090909096966206865696768743d3d303a0a090909090974786e5f756e7061636b65643d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574290a09090909656c73653a0a090909090974786e5f756e7061636b65643d74786e735b747869645d0a09090909090a09090909666f756e643d4f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564290a090909090a09090909696620666f756e643a090909090a09090909092320436f6c6c65637420646174612066726f6d2074786964207768696368206d6174636865732072656620616e6420636f6e7461696e7320616e204f505f52455455524e0a090909090a0909090909726573756c743d7b0a090909090909277478696473273a205b7374722874786964295d2c0a0909090909092764617461273a20666f756e645b276f705f72657475726e275d2c0a09090909097d0a09090909090a09090909096b65795f686569676874733d7b6865696768743a20547275657d0a09090909090a09090909092320576f726b206f7574207768696368206f7468657220626c6f636b2068656967687473202f206d656d706f6f6c2077652073686f756c64207472790a09090909090a09090909096966206865696768743d3d303a0a0909090909097472795f686569676874733d5b5d2023206e6f776865726520656c736520746f206c6f6f6b206966206669727374207374696c6c20696e206d656d706f6f6c0a0909090909656c73653a0a090909090909726573756c745b27726566275d3d4f505f52455455524e5f63616c635f726566286865696768742c20747869642c2074786e732e6b6579732829290a0909090909097472795f686569676874733d4f505f52455455524e5f6765745f7472795f68656967687473286865696768742b312c206d61785f6865696768742c2046616c7365290a09090909090a09090909092320436f6c6c656374207468652072657374206f662074686520646174612c20696620617070726f7072696174650a09090909090a09090909096966206865696768743d3d303a0a090909090909746869735f74786e733d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574292023206e6f7720726574726965766520616c6c20746f20666f6c6c6f7720636861696e0a0909090909656c73653a0a090909090909746869735f74786e733d74786e730a0909090909090a09090909096c6173745f747869643d747869640a0909090909746869735f6865696768743d6865696768740a09090909090a09090909097768696c6520666f756e645b27696e646578275d203c20286c656e2874786e5f756e7061636b65645b27766f7574275d292d31293a20232074686973206d65616e73206d6f7265206461746120746f20636f6d650a0909090909096e6578745f747869643d4f505f52455455524e5f66696e645f7370656e745f7478696428746869735f74786e732c206c6173745f747869642c20666f756e645b27696e646578275d2b31290a0909090909090a0909090909092320496620776520666f756e6420746865206e657874207478696420696e20746865206461746120636861696e0a09090909090a0909090909096966206e6578745f747869643a0a09090909090909726573756c745b277478696473275d2e617070656e6428737472286e6578745f7478696429290a090909090909090a0909090909090974786e5f756e7061636b65643d746869735f74786e735b6e6578745f747869645d0a09090909090909666f756e643d4f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564290a0a09090909090909696620666f756e643a0a0909090909090909726573756c745b2764617461275d2b3d666f756e645b276f705f72657475726e275d0a09090909090909096b65795f686569676874735b746869735f6865696768745d3d547275650a09090909090909656c73653a0a0909090909090909726573756c745b276572726f72275d3d274461746120696e636f6d706c657465202d206d697373696e67204f505f52455455524e270a0909090909090909627265616b0a090909090909090a090909090909096c6173745f747869643d6e6578745f747869640a090909090909090a09090909090923204f7468657277697365206d6f7665206f6e20746f20746865206e6578742068656967687420746f206b656570206c6f6f6b696e670a090909090909090a090909090909656c73653a0a090909090909096966206c656e287472795f68656967687473293a0a0909090909090909746869735f6865696768743d7472795f686569676874732e706f702830290a0a0909090909090909696620746869735f6865696768743d3d303a0a090909090909090909746869735f74786e733d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574290a0909090909090909656c73653a0a090909090909090909746869735f74786e733d4f505f52455455524e5f6765745f626c6f636b5f74786e7328746869735f6865696768742c20746573746e657429090a0a09090909090909656c73653a0a0909090909090909726573756c745b276572726f72275d3d274461746120696e636f6d706c657465202d20636f756c64206e6f742066696e64206e657874207472616e73616374696f6e270a0909090909090909627265616b0a09090909090a0909090909232046696e6973682075702074686520696e666f726d6174696f6e2061626f7574207468697320726573756c74200a09090909090a0909090909726573756c745b2768656967687473275d3d6c697374286b65795f686569676874732e6b65797328292909090909090a0909090909726573756c74732e617070656e6428726573756c74290a09090909090a09096966206c656e28726573756c7473293e3d6d61785f726573756c74733a0a090909627265616b20232073746f70206966207765206861766520636f6c6c656374656420656e6f7567680a090a0972657475726e20726573756c74730a0a0a23205574696c6974792066756e6374696f6e730a0a646566204f505f52455455524e5f73656c6563745f696e7075747328746f74616c5f616d6f756e742c20746573746e6574293a0a0923204c69737420616e6420736f727420756e7370656e7420696e70757473206279207072696f726974790a0a09756e7370656e745f696e707574733d4f505f52455455524e5f626974636f696e5f636d6428276c697374756e7370656e74272c20746573746e65742c20302909090a096966206e6f74206973696e7374616e636528756e7370656e745f696e707574732c206c697374293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f74207265747269657665206c697374206f6620756e7370656e7420696e70757473277d0a09090a09756e7370656e745f696e707574732e736f7274286b65793d6c616d62646120756e7370656e745f696e7075743a20756e7370656e745f696e7075745b27616d6f756e74275d2a756e7370656e745f696e7075745b27636f6e6669726d6174696f6e73275d2c20726576657273653d54727565290a090a0923204964656e7469667920776869636820696e707574732073686f756c64206265207370656e740a0a09696e707574735f7370656e643d5b5d0a09696e7075745f616d6f756e743d300a090a09666f7220756e7370656e745f696e70757420696e20756e7370656e745f696e707574733a0a0909696e707574735f7370656e642e617070656e6428756e7370656e745f696e707574290a0a0909696e7075745f616d6f756e742b3d756e7370656e745f696e7075745b27616d6f756e74275d0a0909696620696e7075745f616d6f756e743e3d746f74616c5f616d6f756e743a0a090909627265616b20232073746f70207768656e207765206861766520656e6f7567680a090a09696620696e7075745f616d6f756e743c746f74616c5f616d6f756e743a0a090972657475726e207b276572726f72273a20274e6f7420656e6f7567682066756e64732061726520617661696c61626c6520746f20636f7665722074686520616d6f756e7420616e6420666565277d0a09090a09232052657475726e20746865207375636365737366756c20726573756c740a0a0972657475726e207b0a090927696e70757473273a20696e707574735f7370656e642c0a090927746f74616c273a20696e7075745f616d6f756e742c0a097d0a0a0a646566204f505f52455455524e5f6372656174655f74786e28696e707574732c206f7574707574732c206d657461646174612c206d657461646174615f706f732c20746573746e6574293a0a097261775f74786e3d4f505f52455455524e5f626974636f696e5f636d6428276372656174657261777472616e73616374696f6e272c20746573746e65742c20696e707574732c206f757470757473290a090a0974786e5f756e7061636b65643d4f505f52455455524e5f756e7061636b5f74786e284f505f52455455524e5f6865785f746f5f62696e287261775f74786e29290a090a096d657461646174615f6c656e3d6c656e286d65746164617461290a090a096966206d657461646174615f6c656e3c3d37353a0a09097061796c6f61643d62797465617272617928286d657461646174615f6c656e2c29292b6d657461646174612023206c656e6774682062797465202b2064617461202868747470733a2f2f656e2e626974636f696e2e69742f77696b692f536372697074290a09656c6966206d657461646174615f6c656e3c3d3235363a0a09097061796c6f61643d225c783463222b62797465617272617928286d657461646174615f6c656e2c29292b6d657461646174612023204f505f50555348444154413120666f726d61740a09656c73653a0a09097061796c6f61643d225c783464222b62797465617272617928286d657461646174615f6c656e253235362c29292b6279746561727261792828696e74286d657461646174615f6c656e2f323536292c29292b6d657461646174612023204f505f50555348444154413220666f726d61740a090a096d657461646174615f706f733d6d696e286d617828302c206d657461646174615f706f73292c206c656e2874786e5f756e7061636b65645b27766f7574275d2929202320636f6e73747261696e20746f2076616c69642076616c7565730a0a0974786e5f756e7061636b65645b27766f7574275d5b6d657461646174615f706f733a6d657461646174615f706f735d3d5b7b0a09092776616c7565273a20302c0a0909277363726970745075624b6579273a20273661272b4f505f52455455524e5f62696e5f746f5f686578287061796c6f61642920232068657265277320746865204f505f52455455524e0a097d5d0a090a0972657475726e204f505f52455455524e5f62696e5f746f5f686578284f505f52455455524e5f7061636b5f74786e2874786e5f756e7061636b656429290a0a0a646566204f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574293a0a097369676e65645f74786e3d4f505f52455455524e5f626974636f696e5f636d6428277369676e7261777472616e73616374696f6e272c20746573746e65742c207261775f74786e290a096966206e6f74202827636f6d706c6574652720696e207369676e65645f74786e20616e64207369676e65645f74786e5b27636f6d706c657465275d293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f74207369676e20746865207472616e73616374696f6e277d0a090a0973656e645f747869643d4f505f52455455524e5f626974636f696e5f636d64282773656e647261777472616e73616374696f6e272c20746573746e65742c207369676e65645f74786e5b27686578275d290a096966206e6f7420286973696e7374616e63652873656e645f747869642c2062617365737472696e672920616e64206c656e2873656e645f74786964293d3d3634293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f742073656e6420746865207472616e73616374696f6e277d0a090a0972657475726e207b2774786964273a207374722873656e645f74786964297d0a0a0a646566204f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574293a0a0972657475726e204f505f52455455524e5f626974636f696e5f636d6428276765747261776d656d706f6f6c272c20746573746e6574290a0a0a646566204f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574293a0a097261775f74786e3d4f505f52455455524e5f626974636f696e5f636d6428276765747261777472616e73616374696f6e272c20746573746e65742c2074786964290a0972657475726e204f505f52455455524e5f756e7061636b5f74786e284f505f52455455524e5f6865785f746f5f62696e287261775f74786e29290a0a0a646566204f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574293a0a0974786964733d4f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574290a0a0974786e733d7b7d0a09666f72207478696420696e2074786964733a0a090974786e735b747869645d3d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574290a090a0972657475726e2074786e730a090a0a646566204f505f52455455524e5f6765745f7261775f626c6f636b286865696768742c20746573746e6574293a0a09626c6f636b5f686173683d4f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b68617368272c20746573746e65742c20686569676874290a096966206e6f7420286973696e7374616e636528626c6f636b5f686173682c2062617365737472696e672920616e64206c656e28626c6f636b5f68617368293d3d3634293a0a090972657475726e207b276572726f72273a2027426c6f636b2061742068656967687420272b73747228686569676874292b27206e6f7420666f756e64277d0a090a0972657475726e207b0a090927626c6f636b273a204f505f52455455524e5f6865785f746f5f62696e284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b272c20746573746e65742c20626c6f636b5f686173682c2046616c736529290a097d0a0a0a646566204f505f52455455524e5f6765745f626c6f636b5f74786e73286865696768742c20746573746e6574293a0a097261775f626c6f636b3d4f505f52455455524e5f6765745f7261775f626c6f636b286865696768742c20746573746e6574290a09696620276572726f722720696e207261775f626c6f636b3a0a090972657475726e207b276572726f72273a207261775f626c6f636b5b276572726f72275d7d0a090a09626c6f636b3d4f505f52455455524e5f756e7061636b5f626c6f636b287261775f626c6f636b5b27626c6f636b275d290a090a0972657475726e20626c6f636b5b27747873275d0a0a0a232054616c6b696e6720746f20626974636f696e2d636c690a0a646566204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a09696e666f3d4f505f52455455524e5f626974636f696e5f636d642827676574696e666f272c20746573746e6574290a090a0972657475726e206973696e7374616e636528696e666f2c20646963742920616e64202762616c616e63652720696e20696e666f0a0a0a646566204f505f52455455524e5f626974636f696e5f636d6428636f6d6d616e642c20746573746e65742c202a61726773293a2023206d6f726520706172616d732061726520726561642066726f6d20686572650a096966204f505f52455455524e5f424954434f494e5f5553455f434d443a0a09097375625f617267733d5b4f505f52455455524e5f424954434f494e5f504154485d0a0909696620746573746e65743a0a0909097375625f617267732e617070656e6428272d746573746e657427290a09090a09097375625f617267732e617070656e6428636f6d6d616e64290a09090a0909666f722061726720696e20617267733a0a0909097375625f617267732e617070656e64286a736f6e2e64756d70732861726729206966206973696e7374616e6365286172672c2028646963742c206c6973742c207475706c65292920656c7365207374722861726729290a09090a09097261775f726573756c743d73756270726f636573732e636865636b5f6f7574707574287375625f61726773292e6465636f646528227574662d3822292e72737472697028225c6e22290a09090a09097472793a2023206465636f6465204a534f4e20696620706f737369626c650a090909726573756c743d6a736f6e2e6c6f616473287261775f726573756c74290a09096578636570742056616c75654572726f723a0a090909726573756c743d7261775f726573756c740a0a09656c73653a0a0909726571756573743d7b0a090909276964273a207374722874696d652e74696d652829292b272d272b7374722872616e646f6d2e72616e64696e74283130303030302c39393939393929292c0a090909276d6574686f64273a20636f6d6d616e642c0a09090927706172616d73273a20617267732c0a09097d0a09090a0909706f72743d4f505f52455455524e5f424954434f494e5f504f52540a0909757365723d4f505f52455455524e5f424954434f494e5f555345520a090970617373776f72643d4f505f52455455524e5f424954434f494e5f50415353574f52440a09090a09096966206e6f7420286c656e28706f72742920616e64206c656e28757365722920616e64206c656e2870617373776f726429293a0a09090923636f6e665f6c696e65733d6f70656e286f732e706174682e657870616e647573657228277e27292b272f2e626974636f696e2f626974636f696e2e636f6e6627292e726561646c696e657328290a090909636f6e665f6c696e65733d6f70656e286f732e706174682e657870616e647573657228434f4e465f46494c4529292e726561646c696e657328290a0909090a090909666f7220636f6e665f6c696e6520696e20636f6e665f6c696e65733a0a0909090970617274733d636f6e665f6c696e652e737472697028292e73706c697428273d272c203129202320757020746f20322070617274730a090909090a090909096966202870617274735b305d3d3d27727063706f7274272920616e64206e6f74206c656e28706f7274293a0a0909090909706f72743d696e742870617274735b315d290a090909096966202870617274735b305d3d3d2772706375736572272920616e64206e6f74206c656e2875736572293a0a0909090909757365723d70617274735b315d0a090909096966202870617274735b305d3d3d2772706370617373776f7264272920616e64206e6f74206c656e2870617373776f7264293a0a090909090970617373776f72643d70617274735b315d0a09090a09096966206e6f74206c656e28706f7274293a0a090909706f72743d313833333220696620746573746e657420656c736520383333320a0909090a09096966206e6f7420286c656e28757365722920616e64206c656e2870617373776f726429293a0a09090972657475726e204e6f6e652023206e6f20706f696e7420747279696e6720696e207468697320636173650a09090a090975726c3d27687474703a2f2f272b4f505f52455455524e5f424954434f494e5f49502b273a272b73747228706f7274292b272f270a09090a09097472793a0a09090966726f6d2075726c6c69623220696d706f7274204854545050617373776f72644d67725769746844656661756c745265616c6d2c204854545042617369634175746848616e646c65722c206275696c645f6f70656e65722c20696e7374616c6c5f6f70656e65722c2075726c6f70656e2c20485454504572726f720a090965786365707420496d706f72744572726f723a0a09090966726f6d2075726c6c69622e7265717565737420696d706f7274204854545050617373776f72644d67725769746844656661756c745265616c6d2c204854545042617369634175746848616e646c65722c206275696c645f6f70656e65722c20696e7374616c6c5f6f70656e65722c2075726c6f70656e0a0a0909706173736d616e3d4854545050617373776f72644d67725769746844656661756c745265616c6d28290a0909706173736d616e2e6164645f70617373776f7264284e6f6e652c2075726c2c20757365722c2070617373776f7264290a0909617574685f68616e646c65723d4854545042617369634175746848616e646c657228706173736d616e290a09096f70656e65723d6275696c645f6f70656e657228617574685f68616e646c6572290a0909696e7374616c6c5f6f70656e6572286f70656e6572290a202020202020202020202020202020207472793a0a20202020202020202020202020202020202020207261775f726573756c743d75726c6f70656e2875726c2c206a736f6e2e64756d70732872657175657374292e656e636f646528277574662d3827292c204f505f52455455524e5f4e45545f54494d454f5554292e7265616428290a2020202020202020202020202020202065786365707420485454504572726f7220617320653a0a20202020202020202020202020202020202020207072696e7420652e66702e7265616428290a202020202020202020202020202020202020202072616973650a0a09090a0909726573756c745f61727261793d6a736f6e2e6c6f616473287261775f726573756c742e6465636f646528277574662d382729290a0909726573756c743d726573756c745f61727261795b27726573756c74275d0a0a0972657475726e20726573756c740a0a0a2320576f726b696e6720776974682064617461207265666572656e6365730a0a232054686520666f726d6174206f6620612064617461207265666572656e63652069733a205b657374696d6174656420626c6f636b206865696768745d2d5b7061727469616c20747869645d202d2077686572653a0a0a23205b657374696d6174656420626c6f636b206865696768745d2069732074686520626c6f636b20776865726520746865206669727374207472616e73616374696f6e206d696768742061707065617220616e6420666f6c6c6f77696e670a2320776869636820616c6c2073756273657175656e74207472616e73616374696f6e732061726520657870656374656420746f206170706561722e20496e20746865206576656e74206f66206120776569726420626c6f636b636861696e0a232072656f72672c20697420697320706f737369626c6520746865206669727374207472616e73616374696f6e206d696768742061707065617220696e206120736c696768746c79206561726c69657220626c6f636b2e205768656e0a2320656d62656464696e6720646174612c20776520736574205b657374696d6174656420626c6f636b206865696768745d20746f20312b287468652063757272656e7420626c6f636b20686569676874292e0a0a23205b7061727469616c20747869645d20636f6e7461696e7320322061646a6163656e742062797465732066726f6d2074686520747869642c206174206120737065636966696320706f736974696f6e20696e2074686520747869643a0a2320322a285b7061727469616c20747869645d206469762036353533362920676976657320746865206f6666736574206f662074686520322061646a6163656e742062797465732c206265747765656e203020616e642032382e0a2320285b7061727469616c20747869645d206d6f642032353629206973207468652062797465206f662074686520747869642061742074686174206f66667365742e0a232028285b7061727469616c20747869645d206d6f6420363535333629206469762032353629206973207468652062797465206f662074686520747869642061742074686174206f666673657420706c7573206f6e652e0a23204e6f74652074686174207468652074786964206973206f726465726564206163636f7264696e6720746f20757365722070726573656e746174696f6e2c206e6f7420726177206461746120696e2074686520626c6f636b2e0a0a0a646566204f505f52455455524e5f63616c635f726566286e6578745f6865696768742c20747869642c2061766f69645f7478696473293a0a09747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2874786964290a090a09666f7220747869645f6f666673657420696e2072616e6765283135293a0a09097375625f747869643d747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d0a0909636c61736865643d46616c73650a09090a0909666f722061766f69645f7478696420696e2061766f69645f74786964733a0a09090961766f69645f747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2861766f69645f74786964290a0909090a090909696620280a090909092861766f69645f747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d3d3d7375625f747869642920616e640a0909090928747869645f62696e617279213d61766f69645f747869645f62696e617279290a090909293a0a09090909636c61736865643d547275650a09090909627265616b0a0909090a09096966206e6f7420636c61736865643a0a090909627265616b0a090a09696620636c61736865643a202320636f756c64206e6f742066696e64206120676f6f64207265666572656e63650a090972657475726e204e6f6e650a09090a0974785f7265663d6f726428747869645f62696e6172795b322a747869645f6f66667365743a312b322a747869645f6f66667365745d292b3235362a6f726428747869645f62696e6172795b312b322a747869645f6f66667365743a322b322a747869645f6f66667365745d292b36353533362a747869645f6f66667365740a090a0972657475726e2027253036642d2530366427202520286e6578745f6865696768742c2074785f726566290a0a0a646566204f505f52455455524e5f6765745f7265665f706172747328726566293a0a096966206e6f742072652e73656172636828275e5b302d395d2b5c2d5b302d39412d46612d665d2b24272c20726566293a202320616c736f20737570706f7274207061727469616c207478696420666f72207365636f6e642068616c660a090972657475726e204e6f6e650a090a0970617274733d7265662e73706c697428272d27290a09090a0969662072652e73656172636828275b412d46612d665d272c2070617274735b315d293a0a09096966206c656e2870617274735b315d293e3d343a0a090909747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2870617274735b315d5b303a345d290a09090970617274735b315d3d6f726428747869645f62696e6172795b303a315d292b3235362a6f726428747869645f62696e6172795b313a325d292b36353533362a300a0909656c73653a0a09090972657475726e204e6f6e650a0909090a0970617274733d6c697374286d617028696e742c20706172747329290a090a0969662070617274735b315d3e3938333033393a20232031342a36353533362b36353533350a090972657475726e204e6f6e650a09090a0972657475726e2070617274730a0a0a646566204f505f52455455524e5f6765745f7265665f68656967687473287265662c206d61785f686569676874293a0a0970617274733d4f505f52455455524e5f6765745f7265665f706172747328726566290a096966206e6f742070617274733a0a090972657475726e204e6f6e650a09090a0972657475726e204f505f52455455524e5f6765745f7472795f686569676874732870617274735b305d2c206d61785f6865696768742c2054727565290a0a0a646566204f505f52455455524e5f6765745f7472795f68656967687473286573745f6865696768742c206d61785f6865696768742c20616c736f5f6261636b293a0a09666f72776172645f6865696768743d6573745f6865696768740a096261636b5f6865696768743d6d696e28666f72776172645f6865696768742d312c206d61785f686569676874290a090a09686569676874733d5b5d0a096d656d706f6f6c3d46616c73650a097472795f6865696768743d300a090a097768696c6520547275653a0a0909696620616c736f5f6261636b20616e642028287472795f6865696768742533293d3d32293a20232073746570206261636b20657665727920332074726965730a090909686569676874732e617070656e64286261636b5f686569676874290a0909096261636b5f6865696768742d3d310a0a0909656c73653a0a090909696620666f72776172645f6865696768743e6d61785f6865696768743a0a090909096966206e6f74206d656d706f6f6c3a0a0909090909686569676874732e617070656e64283029202320696e6469636174657320746f20747279206d656d706f6f6c0a09090909096d656d706f6f6c3d547275650a090909090a09090909656c6966206e6f7420616c736f5f6261636b3a0a0909090909627265616b2023206e6f7468696e67206d6f726520746f20646f20686572650a0909090a090909656c73653a0a09090909686569676874732e617070656e6428666f72776172645f686569676874290a0909090a090909666f72776172645f6865696768742b3d310a090a09096966206c656e2868656967687473293e3d4f505f52455455524e5f4d41585f424c4f434b533a0a090909627265616b0a0909090a09097472795f6865696768742b3d310a090a0972657475726e20686569676874730a0a0a646566204f505f52455455524e5f6d617463685f7265665f74786964287265662c2074786964293a0a0970617274733d4f505f52455455524e5f6765745f7265665f706172747328726566290a096966206e6f742070617274733a0a090972657475726e204e6f6e650a0a09747869645f6f66667365743d696e742870617274735b315d2f3635353336290a09747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2874786964290a0a09747869645f706172743d747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d0a09747869645f6d617463683d627974656172726179285b70617274735b315d253235362c20696e74282870617274735b315d253635353336292f323536295d290a0a0972657475726e20747869645f706172743d3d747869645f6d6174636820232065786163742062696e61727920636f6d70617269736f6e0a0a0a2320556e7061636b696e6720616e64207061636b696e6720626974636f696e20626c6f636b7320616e64207472616e73616374696f6e73090a0a646566204f505f52455455524e5f756e7061636b5f626c6f636b2862696e617279293a0a096275666665723d4f505f52455455524e5f6275666665722862696e617279290a09626c6f636b3d7b7d0a090a09626c6f636b5b2776657273696f6e275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b276861736850726576426c6f636b275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a09626c6f636b5b27686173684d65726b6c65526f6f74275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a09626c6f636b5b2774696d65275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b2762697473275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b276e6f6e6365275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b2774785f636f756e74275d3d6275666665722e73686966745f766172696e7428290a090a09626c6f636b5b27747873275d3d7b7d0a090a096f6c645f7074723d6275666665722e7573656428290a090a097768696c65206275666665722e72656d61696e696e6728293a0a09097472616e73616374696f6e3d4f505f52455455524e5f756e7061636b5f74786e5f62756666657228627566666572290a09096e65775f7074723d6275666665722e7573656428290a090973697a653d6e65775f7074722d6f6c645f7074720a09090a09097261775f74786e5f62696e6172793d62696e6172795b6f6c645f7074723a6f6c645f7074722b73697a655d0a0909747869643d4f505f52455455524e5f62696e5f746f5f68657828686173686c69622e73686132353628686173686c69622e736861323536287261775f74786e5f62696e617279292e6469676573742829292e64696765737428295b3a3a2d315d290a09090a09096f6c645f7074723d6e65775f7074720a090a09097472616e73616374696f6e5b2773697a65275d3d73697a650a0909626c6f636b5b27747873275d5b747869645d3d7472616e73616374696f6e0a090a0972657475726e20626c6f636b0a0a0a646566204f505f52455455524e5f756e7061636b5f74786e2862696e617279293a0a0972657475726e204f505f52455455524e5f756e7061636b5f74786e5f627566666572284f505f52455455524e5f6275666665722862696e61727929290a0a0a646566204f505f52455455524e5f756e7061636b5f74786e5f62756666657228627566666572293a0a0923207365653a2068747470733a2f2f656e2e626974636f696e2e69742f77696b692f5472616e73616374696f6e730a090a0974786e3d7b0a09092776696e273a205b5d2c0a090927766f7574273a205b5d2c0a097d0a090a0974786e5b2776657273696f6e275d3d6275666665722e73686966745f756e7061636b28342c20273c4c2729202320736d616c6c2d656e6469616e2033322d626974730a090a09696e707574733d6275666665722e73686966745f766172696e7428290a09696620696e707574733e3130303030303a20232073616e69747920636865636b0a090972657475726e204e6f6e650a090a09666f72205f20696e2072616e676528696e70757473293a0a0909696e7075743d7b7d0a09090a0909696e7075745b2774786964275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a0909696e7075745b27766f7574275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09096c656e6774683d6275666665722e73686966745f766172696e7428290a0909696e7075745b27736372697074536967275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674286c656e67746829290a0909696e7075745b2773657175656e6365275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09090a090974786e5b2776696e275d2e617070656e6428696e707574290a09090a096f7574707574733d6275666665722e73686966745f766172696e7428290a096966206f7574707574733e3130303030303a20232073616e69747920636865636b0a090972657475726e204e6f6e650a09090a09666f72205f20696e2072616e6765286f757470757473293a0a09096f75747075743d7b7d0a09090a09096f75747075745b2776616c7565275d3d666c6f6174286275666665722e73686966745f75696e7436342829292f3130303030303030300a09096c656e6774683d6275666665722e73686966745f766172696e7428290a09096f75747075745b277363726970745075624b6579275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674286c656e67746829290a09090a090974786e5b27766f7574275d2e617070656e64286f7574707574290a090a0974786e5b276c6f636b74696d65275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a090a0972657475726e2074786e0a0a0a646566204f505f52455455524e5f66696e645f7370656e745f747869642874786e732c207370656e745f747869642c207370656e745f766f7574293a0a09666f7220747869642c2074786e5f756e7061636b656420696e2074786e732e6974656d7328293a0a0909666f7220696e70757420696e2074786e5f756e7061636b65645b2776696e275d3a0a09090969662028696e7075745b2774786964275d3d3d7370656e745f747869642920616e642028696e7075745b27766f7574275d3d3d7370656e745f766f7574293a0a0909090972657475726e20747869640a090909090a0972657475726e204e6f6e650a0a0a646566204f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564293a0a09666f7220696e6465782c206f757470757420696e20656e756d65726174652874786e5f756e7061636b65645b27766f7574275d293a0a09096f705f72657475726e3d4f505f52455455524e5f6765745f7363726970745f64617461284f505f52455455524e5f6865785f746f5f62696e286f75747075745b277363726970745075624b6579275d29290a09090a09096966206f705f72657475726e3a0a09090972657475726e207b0a0909090927696e646578273a20696e6465782c0a09090909276f705f72657475726e273a206f705f72657475726e2c0a0909097d0a090a0972657475726e204e6f6e650a090a0a646566204f505f52455455524e5f6765745f7363726970745f64617461287363726970745075624b657942696e617279293a0a096f705f72657475726e3d4e6f6e650a090a096966207363726970745075624b657942696e6172795b303a315d3d3d62275c783661273a0a090966697273745f6f72643d6f7264287363726970745075624b657942696e6172795b313a325d290a09090a090969662066697273745f6f72643c3d37353a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b323a322b66697273745f6f72645d0a0909656c69662066697273745f6f72643d3d307834633a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b333a332b6f7264287363726970745075624b657942696e6172795b323a335d295d0a0909656c69662066697273745f6f72643d3d307834643a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b343a342b6f7264287363726970745075624b657942696e6172795b323a335d292b3235362a6f7264287363726970745075624b657942696e6172795b333a345d295d0a090a0972657475726e206f705f72657475726e090a0a0a646566204f505f52455455524e5f7061636b5f74786e2874786e293a0a0962696e6172793d6227270a090a0962696e6172792b3d7374727563742e7061636b28273c4c272c2074786e5b2776657273696f6e275d290a090a0962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e74286c656e2874786e5b2776696e275d29290a090a09666f7220696e70757420696e2074786e5b2776696e275d3a0a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e28696e7075745b2774786964275d295b3a3a2d315d0a090962696e6172792b3d7374727563742e7061636b28273c4c272c20696e7075745b27766f7574275d290a090962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e7428696e74286c656e28696e7075745b27736372697074536967275d292f322929202320646976696465206279203220626563617573652069742069732063757272656e746c7920696e206865780a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e28696e7075745b27736372697074536967275d290a090962696e6172792b3d7374727563742e7061636b28273c4c272c20696e7075745b2773657175656e6365275d290a090a0962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e74286c656e2874786e5b27766f7574275d29290a090a09666f72206f757470757420696e2074786e5b27766f7574275d3a0a090962696e6172792b3d4f505f52455455524e5f7061636b5f75696e74363428696e7428726f756e64286f75747075745b2776616c7565275d2a3130303030303030302929290a090962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e7428696e74286c656e286f75747075745b277363726970745075624b6579275d292f322929202320646976696465206279203220626563617573652069742069732063757272656e746c7920696e206865780a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e286f75747075745b277363726970745075624b6579275d290a090a0962696e6172792b3d7374727563742e7061636b28273c4c272c2074786e5b276c6f636b74696d65275d290a090a0972657475726e2062696e6172790a0a0a646566204f505f52455455524e5f7061636b5f766172696e7428696e7465676572293a0a09696620696e74656765723e307846464646464646463a0a09097061636b65643d225c784646222b4f505f52455455524e5f7061636b5f75696e74363428696e7465676572290a09656c696620696e74656765723e3078464646463a0a09097061636b65643d225c784645222b7374727563742e7061636b28273c4c272c20696e7465676572290a09656c696620696e74656765723e307846433a0a09097061636b65643d225c784644222b7374727563742e7061636b28273c48272c20696e7465676572290a09656c73653a0a09097061636b65643d7374727563742e7061636b282742272c20696e7465676572290a090a0972657475726e207061636b65640a0a0a646566204f505f52455455524e5f7061636b5f75696e74363428696e7465676572293a0a0975707065723d696e7428696e74656765722f34323934393637323936290a096c6f7765723d696e74656765722d75707065722a343239343936373239360a090a0972657475726e207374727563742e7061636b28273c4c272c206c6f776572292b7374727563742e7061636b28273c4c272c207570706572290a0a0a232048656c70657220636c61737320666f7220756e7061636b696e6720626974636f696e2062696e61727920646174610a0a636c617373204f505f52455455524e5f62756666657228293a0a0a09646566205f5f696e69745f5f2873656c662c20646174612c207074723d30293a0a090973656c662e646174613d646174610a090973656c662e6c656e3d6c656e2864617461290a090973656c662e7074723d7074720a09200a096465662073686966742873656c662c206368617273293a0a09097072656669783d73656c662e646174615b73656c662e7074723a73656c662e7074722b63686172735d0a090973656c662e7074722b3d63686172730a0a090972657475726e207072656669780a09200a096465662073686966745f756e7061636b2873656c662c2063686172732c20666f726d6174293a0a0909756e7061636b3d7374727563742e756e7061636b28666f726d61742c2073656c662e736869667428636861727329290a0a090972657475726e20756e7061636b5b305d0a0a096465662073686966745f766172696e742873656c66293a0a090976616c75653d73656c662e73686966745f756e7061636b28312c20274227290a0a090969662076616c75653d3d307846463a0a09090976616c75653d73656c662e73686966745f75696e74363428290a0909656c69662076616c75653d3d307846453a0a09090976616c75653d73656c662e73686966745f756e7061636b28342c20273c4c27290a0909656c69662076616c75653d3d307846443a0a09090976616c75653d73656c662e73686966745f756e7061636b28322c20273c4827290a090a090972657475726e2076616c75650a0a096465662073686966745f75696e7436342873656c66293a0a090972657475726e2073656c662e73686966745f756e7061636b28342c20273c4c27292b343239343936373239362a73656c662e73686966745f756e7061636b28342c20273c4c27290a090a0964656620757365642873656c66293a0a090972657475726e206d696e2873656c662e7074722c2073656c662e6c656e290a0a096465662072656d61696e696e672873656c66293a0a090972657475726e206d61782873656c662e6c656e2d73656c662e7074722c2030290a0a0a2320436f6e76657274696e672062696e617279203c2d3e2068657861646563696d616c0a0a646566204f505f52455455524e5f6865785f746f5f62696e28686578293a0a097472793a0a09097261773d62696e61736369692e6132625f68657828686578290a0965786365707420457863657074696f6e3a0a090972657475726e204e6f6e650a09090a0972657475726e207261770a090a0a646566204f505f52455455524e5f62696e5f746f5f68657828737472696e67293a0a0972657475726e2062696e61736369692e6232615f68657828737472696e67292e6465636f646528277574662d3827290a",
                "hex": "6a4df05d23204f505f52455455524e2e70790a230a2320507974686f6e2073637269707420746f2067656e657261746520616e64207265747269657665204f505f52455455524e20626974636f696e207472616e73616374696f6e730a230a2320436f707972696768742028632920436f696e20536369656e636573204c74640a230a23205065726d697373696f6e20697320686572656279206772616e7465642c2066726565206f66206368617267652c20746f20616e7920706572736f6e206f627461696e696e67206120636f70790a23206f66207468697320736f66747761726520616e64206173736f63696174656420646f63756d656e746174696f6e2066696c657320287468652022536f66747761726522292c20746f206465616c0a2320696e2074686520536f66747761726520776974686f7574207265737472696374696f6e2c20696e636c7564696e6720776974686f7574206c696d69746174696f6e20746865207269676874730a2320746f207573652c20636f70792c206d6f646966792c206d657267652c207075626c6973682c20646973747269627574652c207375626c6963656e73652c20616e642f6f722073656c6c0a2320636f70696573206f662074686520536f6674776172652c20616e6420746f207065726d697420706572736f6e7320746f2077686f6d2074686520536f6674776172652069730a23206675726e697368656420746f20646f20736f2c207375626a65637420746f2074686520666f6c6c6f77696e6720636f6e646974696f6e733a0a230a23205468652061626f766520636f70797269676874206e6f7469636520616e642074686973207065726d697373696f6e206e6f74696365207368616c6c20626520696e636c7564656420696e0a2320616c6c20636f70696573206f72207375627374616e7469616c20706f7274696f6e73206f662074686520536f6674776172652e0a230a232054484520534f4654574152452049532050524f564944454420224153204953222c20574954484f55542057415252414e5459204f4620414e59204b494e442c2045585052455353204f520a2320494d504c4945442c20494e434c5544494e4720425554204e4f54204c494d4954454420544f205448452057415252414e54494553204f46204d45524348414e544142494c4954592c0a23204649544e45535320464f52204120504152544943554c415220505552504f534520414e44204e4f4e494e4652494e47454d454e542e20494e204e4f204556454e54205348414c4c205448450a2320415554484f5253204f5220434f5059524947485420484f4c44455253204245204c4941424c4520464f5220414e5920434c41494d2c2044414d41474553204f52204f544845520a23204c494142494c4954592c205748455448455220494e20414e20414354494f4e204f4620434f4e54524143542c20544f5254204f52204f54484552574953452c2041524953494e472046524f4d2c0a23204f5554204f46204f5220494e20434f4e4e454354494f4e20574954482054484520534f465457415245204f522054484520555345204f52204f54484552204445414c494e475320494e0a232054484520534f4654574152452e0a0a0a696d706f72742073756270726f636573732c206a736f6e2c2074696d652c2072616e646f6d2c206f732e706174682c2062696e61736369692c207374727563742c20737472696e672c2072652c20686173686c69620a0a0a2320507974686f6e20322d3320636f6d7061746962696c697479206c6f6769630a0a7472793a0a0962617365737472696e670a657863657074204e616d654572726f723a0a0962617365737472696e67203d207374720a090a20200a2320557365722d646566696e65642071756173692d636f6e7374616e74730a0a4f505f52455455524e5f424954434f494e5f49503d273132372e302e302e312720232049502061646472657373206f6620796f757220626974636f696e206e6f64650a4f505f52455455524e5f424954434f494e5f5553455f434d443d46616c736520232075736520636f6d6d616e642d6c696e6520696e7374656164206f66204a534f4e2d5250433f0a0a434f4e465f46494c45203d20277e2f746573746e65742e636f6e66270a0a6966204f505f52455455524e5f424954434f494e5f5553455f434d443a0a094f505f52455455524e5f424954434f494e5f504154483d272f7573722f62696e2f626974636f696e2d636c69272023207061746820746f20626974636f696e2d636c692065786563757461626c65206f6e2074686973207365727665720a090a656c73653a0a094f505f52455455524e5f424954434f494e5f504f52543d27272023206c6561766520656d70747920746f207573652064656661756c7420706f727420666f72206d61696e6e65742f746573746e65740a094f505f52455455524e5f424954434f494e5f555345523d27272023206c6561766520656d70747920746f20726561642066726f6d207e2f2e626974636f696e2f626974636f696e2e636f6e662028556e6978206f6e6c79290a094f505f52455455524e5f424954434f494e5f50415353574f52443d27272023206c6561766520656d70747920746f20726561642066726f6d207e2f2e626974636f696e2f626974636f696e2e636f6e662028556e6978206f6e6c79290a090a4f505f52455455524e5f4254435f4645453d302e3030332023204254432066656520746f2070617920706572207472616e73616374696f6e0a4f505f52455455524e5f4254435f445553543d302e30303030312023206f6d697420425443206f75747075747320736d616c6c6572207468616e20746869730a0a4f505f52455455524e5f4d41585f42595445533d36353533352023206d6178696d756d20627974657320696e20616e204f505f52455455524e20283430206173206f6620426974636f696e20302e3130290a4f505f52455455524e5f4d41585f424c4f434b533d31302023206d6178696d756d206e756d626572206f6620626c6f636b7320746f20747279207768656e2072657472696576696e6720646174610a0a4f505f52455455524e5f4e45545f54494d454f55543d3130202320686f77206c6f6e6720746f2074696d65206f75742028696e207365636f6e647329207768656e20636f6d6d756e69636174696e67207769746820626974636f696e206e6f64650a0a0a2320557365722d666163696e672066756e6374696f6e730a0a646566204f505f52455455524e5f73656e642873656e645f616464726573732c2073656e645f616d6f756e742c206d657461646174612c20746573746e65743d46616c7365293a0a09232056616c696461746520736f6d6520706172616d65746572730a090a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a0a09726573756c743d4f505f52455455524e5f626974636f696e5f636d64282776616c696461746561646472657373272c20746573746e65742c2073656e645f61646472657373290a096966206e6f74202827697376616c69642720696e20726573756c7420616e6420726573756c745b27697376616c6964275d293a0a090972657475726e207b276572726f72273a202753656e64206164647265737320636f756c64206e6f742062652076616c6964617465643a20272b73656e645f616464726573737d0a090a096966206973696e7374616e6365286d657461646174612c2062617365737472696e67293a0a09096d657461646174613d6d657461646174612e656e636f646528277574662d382729202320636f6e7665727420746f2062696e61727920737472696e670a0a096d657461646174615f6c656e3d6c656e286d65746164617461290a09090a096966206d657461646174615f6c656e3e36353533363a0a090972657475726e207b276572726f72273a202754686973206c696272617279206f6e6c7920737570706f727473206d6574616461746120757020746f20363535333620627974657320696e2073697a65277d0a09090a096966206d657461646174615f6c656e3e4f505f52455455524e5f4d41585f42595445533a0a090972657475726e207b276572726f72273a20274d657461646174612068617320272b737472286d657461646174615f6c656e292b2720627974657320627574206973206c696d6974656420746f20272b737472284f505f52455455524e5f4d41585f4259544553292b272028736565204f505f52455455524e5f4d41585f425954455329277d0a090a09232043616c63756c61746520616d6f756e747320616e642063686f6f736520696e707574730a0a096f75747075745f616d6f756e743d73656e645f616d6f756e742b4f505f52455455524e5f4254435f4645450a0a09696e707574735f7370656e643d4f505f52455455524e5f73656c6563745f696e70757473286f75747075745f616d6f756e742c20746573746e6574290a090a09696620276572726f722720696e20696e707574735f7370656e643a0a090972657475726e207b276572726f72273a20696e707574735f7370656e645b276572726f72275d7d0a090a096368616e67655f616d6f756e743d696e707574735f7370656e645b27746f74616c275d2d6f75747075745f616d6f756e740a0a0923204275696c642074686520726177207472616e73616374696f6e0a09090a096368616e67655f616464726573733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776368616e676561646472657373272c20746573746e6574290a090a096f7574707574733d7b73656e645f616464726573733a2073656e645f616d6f756e747d0a090a096966206368616e67655f616d6f756e743e3d4f505f52455455524e5f4254435f445553543a0a09096f7574707574735b6368616e67655f616464726573735d3d6368616e67655f616d6f756e740a09090a097261775f74786e3d4f505f52455455524e5f6372656174655f74786e28696e707574735f7370656e645b27696e70757473275d2c206f7574707574732c206d657461646174612c206c656e286f757470757473292c20746573746e6574290a0a0923205369676e20616e642073656e6420746865207472616e73616374696f6e2c2072657475726e20726573756c740a0a0972657475726e204f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574290a0a0a646566204f505f52455455524e5f73746f726528646174612c20746573746e65743d46616c7365293a0a092320446174612069732073746f72656420696e204f505f52455455524e732077697468696e206120736572696573206f6620636861696e6564207472616e73616374696f6e732e0a092320496620746865204f505f52455455524e20697320666f6c6c6f77656420627920616e6f74686572206f75747075742c20746865206461746120636f6e74696e75657320696e20746865207472616e73616374696f6e207370656e64696e672074686174206f75747075742e0a0923205768656e20746865204f505f52455455524e20697320746865206c617374206f75747075742c207468697320616c736f207369676e69666965732074686520656e64206f662074686520646174612e0a0a09232056616c696461746520706172616d657465727320616e6420676574206368616e676520616464726573730a0a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a09090a096966206973696e7374616e636528646174612c2062617365737472696e67293a0a0909646174613d646174612e656e636f646528277574662d382729202320636f6e7665727420746f2062696e61727920737472696e670a090a09646174615f6c656e3d6c656e2864617461290a09696620646174615f6c656e3d3d303a0a090972657475726e207b276572726f72273a2027536f6d65206461746120697320726571756972656420746f2062652073746f726564277d0a0a096368616e67655f616464726573733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776368616e676561646472657373272c20746573746e6574290a090a09232043616c63756c61746520616d6f756e747320616e642063686f6f736520666972737420696e7075747320746f207573650a0a096f75747075745f616d6f756e743d4f505f52455455524e5f4254435f4645452a696e742828646174615f6c656e2b4f505f52455455524e5f4d41585f42595445532d31292f4f505f52455455524e5f4d41585f4259544553292023206e756d626572206f66207472616e73616374696f6e732072657175697265640a090a09696e707574735f7370656e643d4f505f52455455524e5f73656c6563745f696e70757473286f75747075745f616d6f756e742c20746573746e6574290a09696620276572726f722720696e20696e707574735f7370656e643a0a090972657475726e207b276572726f72273a20696e707574735f7370656e645b276572726f72275d7d0a09090a09696e707574733d696e707574735f7370656e645b27696e70757473275d0a09696e7075745f616d6f756e743d696e707574735f7370656e645b27746f74616c275d0a0a09232046696e64207468652063757272656e7420626c6f636b636861696e2068656967687420616e64206d656d706f6f6c2074786964730a0a096865696768743d696e74284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b636f756e74272c20746573746e657429290a0961766f69645f74786964733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776d656d706f6f6c272c20746573746e6574290a0a0923204c6f6f7020746f206275696c6420616e642073656e64207472616e73616374696f6e730a0a09726573756c743d7b277478696473273a5b5d7d0a0a09666f7220646174615f70747220696e2072616e676528302c20646174615f6c656e2c204f505f52455455524e5f4d41585f4259544553293a0a09092320536f6d65207072657061726174696f6e20666f72207468697320697465726174696f6e0a090a09096c6173745f74786e3d2828646174615f7074722b4f505f52455455524e5f4d41585f4259544553293e3d646174615f6c656e292023206973207468697320746865206c61737420747820696e2074686520636861696e3f0a09096368616e67655f616d6f756e743d696e7075745f616d6f756e742d4f505f52455455524e5f4254435f4645450a09096d657461646174613d646174615b646174615f7074723a646174615f7074722b4f505f52455455524e5f4d41585f42595445535d0a0909090a090923204275696c6420616e642073656e642074686973207472616e73616374696f6e0a090a09096f7574707574733d7b7d0a09096966206368616e67655f616d6f756e743e3d4f505f52455455524e5f4254435f445553543a2023206d6967687420626520736b697070656420666f72206c617374207472616e73616374696f6e0a0909096f7574707574735b6368616e67655f616464726573735d3d6368616e67655f616d6f756e740a0909090a09097261775f74786e3d4f505f52455455524e5f6372656174655f74786e28696e707574732c206f7574707574732c206d657461646174612c206c656e286f75747075747329206966206c6173745f74786e20656c736520302c20746573746e6574290a09090a090973656e645f726573756c743d4f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574290a090a09092320436865636b20666f72206572726f727320616e6420636f6c6c6563742074686520747869640a090a0909696620276572726f722720696e2073656e645f726573756c743a0a090909726573756c745b276572726f72275d3d73656e645f726573756c745b276572726f72275d0a090909627265616b0a09090a0909726573756c745b277478696473275d2e617070656e642873656e645f726573756c745b2774786964275d290a09090a0909696620646174615f7074723d3d303a0a090909726573756c745b27726566275d3d4f505f52455455524e5f63616c635f726566286865696768742c2073656e645f726573756c745b2774786964275d2c2061766f69645f7478696473290a09090a090923205072657061726520696e7075747320666f72206e65787420697465726174696f6e0a0a0909696e707574733d5b7b0a0909092774786964273a2073656e645f726573756c745b2774786964275d2c0a09090927766f7574273a20312c0a09097d5d0a0a0909696e7075745f616d6f756e743d6368616e67655f616d6f756e740a090a09232052657475726e207468652066696e616c20726573756c740a0a0972657475726e20726573756c740a0a0a646566204f505f52455455524e5f7265747269657665287265662c206d61785f726573756c74733d312c20746573746e65743d46616c7365293a0a09232056616c696461746520706172616d657465727320616e642067657420737461747573206f6620426974636f696e20436f72650a0a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a09090a096d61785f6865696768743d696e74284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b636f756e74272c20746573746e657429290a09686569676874733d4f505f52455455524e5f6765745f7265665f68656967687473287265662c206d61785f686569676874290a090a096966206e6f74206973696e7374616e636528686569676874732c206c697374293a0a090972657475726e207b276572726f72273a2027526566206973206e6f742076616c6964277d0a0a092320436f6c6c65637420616e642072657475726e2074686520726573756c74730a090a09726573756c74733d5b5d0a090a09666f722068656967687420696e20686569676874733a0a09096966206865696768743d3d303a0a09090974786964733d4f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574292023206966206d656d706f6f6c2c206f6e6c7920676574206c69737420666f72206e6f772028746f2073617665205250432063616c6c73290a09090974786e733d4e6f6e650a0909656c73653a0a09090974786e733d4f505f52455455524e5f6765745f626c6f636b5f74786e73286865696768742c20746573746e657429202320696620626c6f636b2c2067657420616c6c2066756c6c7920756e7061636b65640a09090974786964733d74786e732e6b65797328290a09090a0909666f72207478696420696e2074786964733a0a0909096966204f505f52455455524e5f6d617463685f7265665f74786964287265662c2074786964293a0a090909096966206865696768743d3d303a0a090909090974786e5f756e7061636b65643d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574290a09090909656c73653a0a090909090974786e5f756e7061636b65643d74786e735b747869645d0a09090909090a09090909666f756e643d4f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564290a090909090a09090909696620666f756e643a090909090a09090909092320436f6c6c65637420646174612066726f6d2074786964207768696368206d6174636865732072656620616e6420636f6e7461696e7320616e204f505f52455455524e0a090909090a0909090909726573756c743d7b0a090909090909277478696473273a205b7374722874786964295d2c0a0909090909092764617461273a20666f756e645b276f705f72657475726e275d2c0a09090909097d0a09090909090a09090909096b65795f686569676874733d7b6865696768743a20547275657d0a09090909090a09090909092320576f726b206f7574207768696368206f7468657220626c6f636b2068656967687473202f206d656d706f6f6c2077652073686f756c64207472790a09090909090a09090909096966206865696768743d3d303a0a0909090909097472795f686569676874733d5b5d2023206e6f776865726520656c736520746f206c6f6f6b206966206669727374207374696c6c20696e206d656d706f6f6c0a0909090909656c73653a0a090909090909726573756c745b27726566275d3d4f505f52455455524e5f63616c635f726566286865696768742c20747869642c2074786e732e6b6579732829290a0909090909097472795f686569676874733d4f505f52455455524e5f6765745f7472795f68656967687473286865696768742b312c206d61785f6865696768742c2046616c7365290a09090909090a09090909092320436f6c6c656374207468652072657374206f662074686520646174612c20696620617070726f7072696174650a09090909090a09090909096966206865696768743d3d303a0a090909090909746869735f74786e733d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574292023206e6f7720726574726965766520616c6c20746f20666f6c6c6f7720636861696e0a0909090909656c73653a0a090909090909746869735f74786e733d74786e730a0909090909090a09090909096c6173745f747869643d747869640a0909090909746869735f6865696768743d6865696768740a09090909090a09090909097768696c6520666f756e645b27696e646578275d203c20286c656e2874786e5f756e7061636b65645b27766f7574275d292d31293a20232074686973206d65616e73206d6f7265206461746120746f20636f6d650a0909090909096e6578745f747869643d4f505f52455455524e5f66696e645f7370656e745f7478696428746869735f74786e732c206c6173745f747869642c20666f756e645b27696e646578275d2b31290a0909090909090a0909090909092320496620776520666f756e6420746865206e657874207478696420696e20746865206461746120636861696e0a09090909090a0909090909096966206e6578745f747869643a0a09090909090909726573756c745b277478696473275d2e617070656e6428737472286e6578745f7478696429290a090909090909090a0909090909090974786e5f756e7061636b65643d746869735f74786e735b6e6578745f747869645d0a09090909090909666f756e643d4f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564290a0a09090909090909696620666f756e643a0a0909090909090909726573756c745b2764617461275d2b3d666f756e645b276f705f72657475726e275d0a09090909090909096b65795f686569676874735b746869735f6865696768745d3d547275650a09090909090909656c73653a0a0909090909090909726573756c745b276572726f72275d3d274461746120696e636f6d706c657465202d206d697373696e67204f505f52455455524e270a0909090909090909627265616b0a090909090909090a090909090909096c6173745f747869643d6e6578745f747869640a090909090909090a09090909090923204f7468657277697365206d6f7665206f6e20746f20746865206e6578742068656967687420746f206b656570206c6f6f6b696e670a090909090909090a090909090909656c73653a0a090909090909096966206c656e287472795f68656967687473293a0a0909090909090909746869735f6865696768743d7472795f686569676874732e706f702830290a0a0909090909090909696620746869735f6865696768743d3d303a0a090909090909090909746869735f74786e733d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574290a0909090909090909656c73653a0a090909090909090909746869735f74786e733d4f505f52455455524e5f6765745f626c6f636b5f74786e7328746869735f6865696768742c20746573746e657429090a0a09090909090909656c73653a0a0909090909090909726573756c745b276572726f72275d3d274461746120696e636f6d706c657465202d20636f756c64206e6f742066696e64206e657874207472616e73616374696f6e270a0909090909090909627265616b0a09090909090a0909090909232046696e6973682075702074686520696e666f726d6174696f6e2061626f7574207468697320726573756c74200a09090909090a0909090909726573756c745b2768656967687473275d3d6c697374286b65795f686569676874732e6b65797328292909090909090a0909090909726573756c74732e617070656e6428726573756c74290a09090909090a09096966206c656e28726573756c7473293e3d6d61785f726573756c74733a0a090909627265616b20232073746f70206966207765206861766520636f6c6c656374656420656e6f7567680a090a0972657475726e20726573756c74730a0a0a23205574696c6974792066756e6374696f6e730a0a646566204f505f52455455524e5f73656c6563745f696e7075747328746f74616c5f616d6f756e742c20746573746e6574293a0a0923204c69737420616e6420736f727420756e7370656e7420696e70757473206279207072696f726974790a0a09756e7370656e745f696e707574733d4f505f52455455524e5f626974636f696e5f636d6428276c697374756e7370656e74272c20746573746e65742c20302909090a096966206e6f74206973696e7374616e636528756e7370656e745f696e707574732c206c697374293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f74207265747269657665206c697374206f6620756e7370656e7420696e70757473277d0a09090a09756e7370656e745f696e707574732e736f7274286b65793d6c616d62646120756e7370656e745f696e7075743a20756e7370656e745f696e7075745b27616d6f756e74275d2a756e7370656e745f696e7075745b27636f6e6669726d6174696f6e73275d2c20726576657273653d54727565290a090a0923204964656e7469667920776869636820696e707574732073686f756c64206265207370656e740a0a09696e707574735f7370656e643d5b5d0a09696e7075745f616d6f756e743d300a090a09666f7220756e7370656e745f696e70757420696e20756e7370656e745f696e707574733a0a0909696e707574735f7370656e642e617070656e6428756e7370656e745f696e707574290a0a0909696e7075745f616d6f756e742b3d756e7370656e745f696e7075745b27616d6f756e74275d0a0909696620696e7075745f616d6f756e743e3d746f74616c5f616d6f756e743a0a090909627265616b20232073746f70207768656e207765206861766520656e6f7567680a090a09696620696e7075745f616d6f756e743c746f74616c5f616d6f756e743a0a090972657475726e207b276572726f72273a20274e6f7420656e6f7567682066756e64732061726520617661696c61626c6520746f20636f7665722074686520616d6f756e7420616e6420666565277d0a09090a09232052657475726e20746865207375636365737366756c20726573756c740a0a0972657475726e207b0a090927696e70757473273a20696e707574735f7370656e642c0a090927746f74616c273a20696e7075745f616d6f756e742c0a097d0a0a0a646566204f505f52455455524e5f6372656174655f74786e28696e707574732c206f7574707574732c206d657461646174612c206d657461646174615f706f732c20746573746e6574293a0a097261775f74786e3d4f505f52455455524e5f626974636f696e5f636d6428276372656174657261777472616e73616374696f6e272c20746573746e65742c20696e707574732c206f757470757473290a090a0974786e5f756e7061636b65643d4f505f52455455524e5f756e7061636b5f74786e284f505f52455455524e5f6865785f746f5f62696e287261775f74786e29290a090a096d657461646174615f6c656e3d6c656e286d65746164617461290a090a096966206d657461646174615f6c656e3c3d37353a0a09097061796c6f61643d62797465617272617928286d657461646174615f6c656e2c29292b6d657461646174612023206c656e6774682062797465202b2064617461202868747470733a2f2f656e2e626974636f696e2e69742f77696b692f536372697074290a09656c6966206d657461646174615f6c656e3c3d3235363a0a09097061796c6f61643d225c783463222b62797465617272617928286d657461646174615f6c656e2c29292b6d657461646174612023204f505f50555348444154413120666f726d61740a09656c73653a0a09097061796c6f61643d225c783464222b62797465617272617928286d657461646174615f6c656e253235362c29292b6279746561727261792828696e74286d657461646174615f6c656e2f323536292c29292b6d657461646174612023204f505f50555348444154413220666f726d61740a090a096d657461646174615f706f733d6d696e286d617828302c206d657461646174615f706f73292c206c656e2874786e5f756e7061636b65645b27766f7574275d2929202320636f6e73747261696e20746f2076616c69642076616c7565730a0a0974786e5f756e7061636b65645b27766f7574275d5b6d657461646174615f706f733a6d657461646174615f706f735d3d5b7b0a09092776616c7565273a20302c0a0909277363726970745075624b6579273a20273661272b4f505f52455455524e5f62696e5f746f5f686578287061796c6f61642920232068657265277320746865204f505f52455455524e0a097d5d0a090a0972657475726e204f505f52455455524e5f62696e5f746f5f686578284f505f52455455524e5f7061636b5f74786e2874786e5f756e7061636b656429290a0a0a646566204f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574293a0a097369676e65645f74786e3d4f505f52455455524e5f626974636f696e5f636d6428277369676e7261777472616e73616374696f6e272c20746573746e65742c207261775f74786e290a096966206e6f74202827636f6d706c6574652720696e207369676e65645f74786e20616e64207369676e65645f74786e5b27636f6d706c657465275d293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f74207369676e20746865207472616e73616374696f6e277d0a090a0973656e645f747869643d4f505f52455455524e5f626974636f696e5f636d64282773656e647261777472616e73616374696f6e272c20746573746e65742c207369676e65645f74786e5b27686578275d290a096966206e6f7420286973696e7374616e63652873656e645f747869642c2062617365737472696e672920616e64206c656e2873656e645f74786964293d3d3634293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f742073656e6420746865207472616e73616374696f6e277d0a090a0972657475726e207b2774786964273a207374722873656e645f74786964297d0a0a0a646566204f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574293a0a0972657475726e204f505f52455455524e5f626974636f696e5f636d6428276765747261776d656d706f6f6c272c20746573746e6574290a0a0a646566204f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574293a0a097261775f74786e3d4f505f52455455524e5f626974636f696e5f636d6428276765747261777472616e73616374696f6e272c20746573746e65742c2074786964290a0972657475726e204f505f52455455524e5f756e7061636b5f74786e284f505f52455455524e5f6865785f746f5f62696e287261775f74786e29290a0a0a646566204f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574293a0a0974786964733d4f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574290a0a0974786e733d7b7d0a09666f72207478696420696e2074786964733a0a090974786e735b747869645d3d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574290a090a0972657475726e2074786e730a090a0a646566204f505f52455455524e5f6765745f7261775f626c6f636b286865696768742c20746573746e6574293a0a09626c6f636b5f686173683d4f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b68617368272c20746573746e65742c20686569676874290a096966206e6f7420286973696e7374616e636528626c6f636b5f686173682c2062617365737472696e672920616e64206c656e28626c6f636b5f68617368293d3d3634293a0a090972657475726e207b276572726f72273a2027426c6f636b2061742068656967687420272b73747228686569676874292b27206e6f7420666f756e64277d0a090a0972657475726e207b0a090927626c6f636b273a204f505f52455455524e5f6865785f746f5f62696e284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b272c20746573746e65742c20626c6f636b5f686173682c2046616c736529290a097d0a0a0a646566204f505f52455455524e5f6765745f626c6f636b5f74786e73286865696768742c20746573746e6574293a0a097261775f626c6f636b3d4f505f52455455524e5f6765745f7261775f626c6f636b286865696768742c20746573746e6574290a09696620276572726f722720696e207261775f626c6f636b3a0a090972657475726e207b276572726f72273a207261775f626c6f636b5b276572726f72275d7d0a090a09626c6f636b3d4f505f52455455524e5f756e7061636b5f626c6f636b287261775f626c6f636b5b27626c6f636b275d290a090a0972657475726e20626c6f636b5b27747873275d0a0a0a232054616c6b696e6720746f20626974636f696e2d636c690a0a646566204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a09696e666f3d4f505f52455455524e5f626974636f696e5f636d642827676574696e666f272c20746573746e6574290a090a0972657475726e206973696e7374616e636528696e666f2c20646963742920616e64202762616c616e63652720696e20696e666f0a0a0a646566204f505f52455455524e5f626974636f696e5f636d6428636f6d6d616e642c20746573746e65742c202a61726773293a2023206d6f726520706172616d732061726520726561642066726f6d20686572650a096966204f505f52455455524e5f424954434f494e5f5553455f434d443a0a09097375625f617267733d5b4f505f52455455524e5f424954434f494e5f504154485d0a0909696620746573746e65743a0a0909097375625f617267732e617070656e6428272d746573746e657427290a09090a09097375625f617267732e617070656e6428636f6d6d616e64290a09090a0909666f722061726720696e20617267733a0a0909097375625f617267732e617070656e64286a736f6e2e64756d70732861726729206966206973696e7374616e6365286172672c2028646963742c206c6973742c207475706c65292920656c7365207374722861726729290a09090a09097261775f726573756c743d73756270726f636573732e636865636b5f6f7574707574287375625f61726773292e6465636f646528227574662d3822292e72737472697028225c6e22290a09090a09097472793a2023206465636f6465204a534f4e20696620706f737369626c650a090909726573756c743d6a736f6e2e6c6f616473287261775f726573756c74290a09096578636570742056616c75654572726f723a0a090909726573756c743d7261775f726573756c740a0a09656c73653a0a0909726571756573743d7b0a090909276964273a207374722874696d652e74696d652829292b272d272b7374722872616e646f6d2e72616e64696e74283130303030302c39393939393929292c0a090909276d6574686f64273a20636f6d6d616e642c0a09090927706172616d73273a20617267732c0a09097d0a09090a0909706f72743d4f505f52455455524e5f424954434f494e5f504f52540a0909757365723d4f505f52455455524e5f424954434f494e5f555345520a090970617373776f72643d4f505f52455455524e5f424954434f494e5f50415353574f52440a09090a09096966206e6f7420286c656e28706f72742920616e64206c656e28757365722920616e64206c656e2870617373776f726429293a0a09090923636f6e665f6c696e65733d6f70656e286f732e706174682e657870616e647573657228277e27292b272f2e626974636f696e2f626974636f696e2e636f6e6627292e726561646c696e657328290a090909636f6e665f6c696e65733d6f70656e286f732e706174682e657870616e647573657228434f4e465f46494c4529292e726561646c696e657328290a0909090a090909666f7220636f6e665f6c696e6520696e20636f6e665f6c696e65733a0a0909090970617274733d636f6e665f6c696e652e737472697028292e73706c697428273d272c203129202320757020746f20322070617274730a090909090a090909096966202870617274735b305d3d3d27727063706f7274272920616e64206e6f74206c656e28706f7274293a0a0909090909706f72743d696e742870617274735b315d290a090909096966202870617274735b305d3d3d2772706375736572272920616e64206e6f74206c656e2875736572293a0a0909090909757365723d70617274735b315d0a090909096966202870617274735b305d3d3d2772706370617373776f7264272920616e64206e6f74206c656e2870617373776f7264293a0a090909090970617373776f72643d70617274735b315d0a09090a09096966206e6f74206c656e28706f7274293a0a090909706f72743d313833333220696620746573746e657420656c736520383333320a0909090a09096966206e6f7420286c656e28757365722920616e64206c656e2870617373776f726429293a0a09090972657475726e204e6f6e652023206e6f20706f696e7420747279696e6720696e207468697320636173650a09090a090975726c3d27687474703a2f2f272b4f505f52455455524e5f424954434f494e5f49502b273a272b73747228706f7274292b272f270a09090a09097472793a0a09090966726f6d2075726c6c69623220696d706f7274204854545050617373776f72644d67725769746844656661756c745265616c6d2c204854545042617369634175746848616e646c65722c206275696c645f6f70656e65722c20696e7374616c6c5f6f70656e65722c2075726c6f70656e2c20485454504572726f720a090965786365707420496d706f72744572726f723a0a09090966726f6d2075726c6c69622e7265717565737420696d706f7274204854545050617373776f72644d67725769746844656661756c745265616c6d2c204854545042617369634175746848616e646c65722c206275696c645f6f70656e65722c20696e7374616c6c5f6f70656e65722c2075726c6f70656e0a0a0909706173736d616e3d4854545050617373776f72644d67725769746844656661756c745265616c6d28290a0909706173736d616e2e6164645f70617373776f7264284e6f6e652c2075726c2c20757365722c2070617373776f7264290a0909617574685f68616e646c65723d4854545042617369634175746848616e646c657228706173736d616e290a09096f70656e65723d6275696c645f6f70656e657228617574685f68616e646c6572290a0909696e7374616c6c5f6f70656e6572286f70656e6572290a202020202020202020202020202020207472793a0a20202020202020202020202020202020202020207261775f726573756c743d75726c6f70656e2875726c2c206a736f6e2e64756d70732872657175657374292e656e636f646528277574662d3827292c204f505f52455455524e5f4e45545f54494d454f5554292e7265616428290a2020202020202020202020202020202065786365707420485454504572726f7220617320653a0a20202020202020202020202020202020202020207072696e7420652e66702e7265616428290a202020202020202020202020202020202020202072616973650a0a09090a0909726573756c745f61727261793d6a736f6e2e6c6f616473287261775f726573756c742e6465636f646528277574662d382729290a0909726573756c743d726573756c745f61727261795b27726573756c74275d0a0a0972657475726e20726573756c740a0a0a2320576f726b696e6720776974682064617461207265666572656e6365730a0a232054686520666f726d6174206f6620612064617461207265666572656e63652069733a205b657374696d6174656420626c6f636b206865696768745d2d5b7061727469616c20747869645d202d2077686572653a0a0a23205b657374696d6174656420626c6f636b206865696768745d2069732074686520626c6f636b20776865726520746865206669727374207472616e73616374696f6e206d696768742061707065617220616e6420666f6c6c6f77696e670a2320776869636820616c6c2073756273657175656e74207472616e73616374696f6e732061726520657870656374656420746f206170706561722e20496e20746865206576656e74206f66206120776569726420626c6f636b636861696e0a232072656f72672c20697420697320706f737369626c6520746865206669727374207472616e73616374696f6e206d696768742061707065617220696e206120736c696768746c79206561726c69657220626c6f636b2e205768656e0a2320656d62656464696e6720646174612c20776520736574205b657374696d6174656420626c6f636b206865696768745d20746f20312b287468652063757272656e7420626c6f636b20686569676874292e0a0a23205b7061727469616c20747869645d20636f6e7461696e7320322061646a6163656e742062797465732066726f6d2074686520747869642c206174206120737065636966696320706f736974696f6e20696e2074686520747869643a0a2320322a285b7061727469616c20747869645d206469762036353533362920676976657320746865206f6666736574206f662074686520322061646a6163656e742062797465732c206265747765656e203020616e642032382e0a2320285b7061727469616c20747869645d206d6f642032353629206973207468652062797465206f662074686520747869642061742074686174206f66667365742e0a232028285b7061727469616c20747869645d206d6f6420363535333629206469762032353629206973207468652062797465206f662074686520747869642061742074686174206f666673657420706c7573206f6e652e0a23204e6f74652074686174207468652074786964206973206f726465726564206163636f7264696e6720746f20757365722070726573656e746174696f6e2c206e6f7420726177206461746120696e2074686520626c6f636b2e0a0a0a646566204f505f52455455524e5f63616c635f726566286e6578745f6865696768742c20747869642c2061766f69645f7478696473293a0a09747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2874786964290a090a09666f7220747869645f6f666673657420696e2072616e6765283135293a0a09097375625f747869643d747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d0a0909636c61736865643d46616c73650a09090a0909666f722061766f69645f7478696420696e2061766f69645f74786964733a0a09090961766f69645f747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2861766f69645f74786964290a0909090a090909696620280a090909092861766f69645f747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d3d3d7375625f747869642920616e640a0909090928747869645f62696e617279213d61766f69645f747869645f62696e617279290a090909293a0a09090909636c61736865643d547275650a09090909627265616b0a0909090a09096966206e6f7420636c61736865643a0a090909627265616b0a090a09696620636c61736865643a202320636f756c64206e6f742066696e64206120676f6f64207265666572656e63650a090972657475726e204e6f6e650a09090a0974785f7265663d6f726428747869645f62696e6172795b322a747869645f6f66667365743a312b322a747869645f6f66667365745d292b3235362a6f726428747869645f62696e6172795b312b322a747869645f6f66667365743a322b322a747869645f6f66667365745d292b36353533362a747869645f6f66667365740a090a0972657475726e2027253036642d2530366427202520286e6578745f6865696768742c2074785f726566290a0a0a646566204f505f52455455524e5f6765745f7265665f706172747328726566293a0a096966206e6f742072652e73656172636828275e5b302d395d2b5c2d5b302d39412d46612d665d2b24272c20726566293a202320616c736f20737570706f7274207061727469616c207478696420666f72207365636f6e642068616c660a090972657475726e204e6f6e650a090a0970617274733d7265662e73706c697428272d27290a09090a0969662072652e73656172636828275b412d46612d665d272c2070617274735b315d293a0a09096966206c656e2870617274735b315d293e3d343a0a090909747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2870617274735b315d5b303a345d290a09090970617274735b315d3d6f726428747869645f62696e6172795b303a315d292b3235362a6f726428747869645f62696e6172795b313a325d292b36353533362a300a0909656c73653a0a09090972657475726e204e6f6e650a0909090a0970617274733d6c697374286d617028696e742c20706172747329290a090a0969662070617274735b315d3e3938333033393a20232031342a36353533362b36353533350a090972657475726e204e6f6e650a09090a0972657475726e2070617274730a0a0a646566204f505f52455455524e5f6765745f7265665f68656967687473287265662c206d61785f686569676874293a0a0970617274733d4f505f52455455524e5f6765745f7265665f706172747328726566290a096966206e6f742070617274733a0a090972657475726e204e6f6e650a09090a0972657475726e204f505f52455455524e5f6765745f7472795f686569676874732870617274735b305d2c206d61785f6865696768742c2054727565290a0a0a646566204f505f52455455524e5f6765745f7472795f68656967687473286573745f6865696768742c206d61785f6865696768742c20616c736f5f6261636b293a0a09666f72776172645f6865696768743d6573745f6865696768740a096261636b5f6865696768743d6d696e28666f72776172645f6865696768742d312c206d61785f686569676874290a090a09686569676874733d5b5d0a096d656d706f6f6c3d46616c73650a097472795f6865696768743d300a090a097768696c6520547275653a0a0909696620616c736f5f6261636b20616e642028287472795f6865696768742533293d3d32293a20232073746570206261636b20657665727920332074726965730a090909686569676874732e617070656e64286261636b5f686569676874290a0909096261636b5f6865696768742d3d310a0a0909656c73653a0a090909696620666f72776172645f6865696768743e6d61785f6865696768743a0a090909096966206e6f74206d656d706f6f6c3a0a0909090909686569676874732e617070656e64283029202320696e6469636174657320746f20747279206d656d706f6f6c0a09090909096d656d706f6f6c3d547275650a090909090a09090909656c6966206e6f7420616c736f5f6261636b3a0a0909090909627265616b2023206e6f7468696e67206d6f726520746f20646f20686572650a0909090a090909656c73653a0a09090909686569676874732e617070656e6428666f72776172645f686569676874290a0909090a090909666f72776172645f6865696768742b3d310a090a09096966206c656e2868656967687473293e3d4f505f52455455524e5f4d41585f424c4f434b533a0a090909627265616b0a0909090a09097472795f6865696768742b3d310a090a0972657475726e20686569676874730a0a0a646566204f505f52455455524e5f6d617463685f7265665f74786964287265662c2074786964293a0a0970617274733d4f505f52455455524e5f6765745f7265665f706172747328726566290a096966206e6f742070617274733a0a090972657475726e204e6f6e650a0a09747869645f6f66667365743d696e742870617274735b315d2f3635353336290a09747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2874786964290a0a09747869645f706172743d747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d0a09747869645f6d617463683d627974656172726179285b70617274735b315d253235362c20696e74282870617274735b315d253635353336292f323536295d290a0a0972657475726e20747869645f706172743d3d747869645f6d6174636820232065786163742062696e61727920636f6d70617269736f6e0a0a0a2320556e7061636b696e6720616e64207061636b696e6720626974636f696e20626c6f636b7320616e64207472616e73616374696f6e73090a0a646566204f505f52455455524e5f756e7061636b5f626c6f636b2862696e617279293a0a096275666665723d4f505f52455455524e5f6275666665722862696e617279290a09626c6f636b3d7b7d0a090a09626c6f636b5b2776657273696f6e275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b276861736850726576426c6f636b275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a09626c6f636b5b27686173684d65726b6c65526f6f74275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a09626c6f636b5b2774696d65275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b2762697473275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b276e6f6e6365275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b2774785f636f756e74275d3d6275666665722e73686966745f766172696e7428290a090a09626c6f636b5b27747873275d3d7b7d0a090a096f6c645f7074723d6275666665722e7573656428290a090a097768696c65206275666665722e72656d61696e696e6728293a0a09097472616e73616374696f6e3d4f505f52455455524e5f756e7061636b5f74786e5f62756666657228627566666572290a09096e65775f7074723d6275666665722e7573656428290a090973697a653d6e65775f7074722d6f6c645f7074720a09090a09097261775f74786e5f62696e6172793d62696e6172795b6f6c645f7074723a6f6c645f7074722b73697a655d0a0909747869643d4f505f52455455524e5f62696e5f746f5f68657828686173686c69622e73686132353628686173686c69622e736861323536287261775f74786e5f62696e617279292e6469676573742829292e64696765737428295b3a3a2d315d290a09090a09096f6c645f7074723d6e65775f7074720a090a09097472616e73616374696f6e5b2773697a65275d3d73697a650a0909626c6f636b5b27747873275d5b747869645d3d7472616e73616374696f6e0a090a0972657475726e20626c6f636b0a0a0a646566204f505f52455455524e5f756e7061636b5f74786e2862696e617279293a0a0972657475726e204f505f52455455524e5f756e7061636b5f74786e5f627566666572284f505f52455455524e5f6275666665722862696e61727929290a0a0a646566204f505f52455455524e5f756e7061636b5f74786e5f62756666657228627566666572293a0a0923207365653a2068747470733a2f2f656e2e626974636f696e2e69742f77696b692f5472616e73616374696f6e730a090a0974786e3d7b0a09092776696e273a205b5d2c0a090927766f7574273a205b5d2c0a097d0a090a0974786e5b2776657273696f6e275d3d6275666665722e73686966745f756e7061636b28342c20273c4c2729202320736d616c6c2d656e6469616e2033322d626974730a090a09696e707574733d6275666665722e73686966745f766172696e7428290a09696620696e707574733e3130303030303a20232073616e69747920636865636b0a090972657475726e204e6f6e650a090a09666f72205f20696e2072616e676528696e70757473293a0a0909696e7075743d7b7d0a09090a0909696e7075745b2774786964275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a0909696e7075745b27766f7574275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09096c656e6774683d6275666665722e73686966745f766172696e7428290a0909696e7075745b27736372697074536967275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674286c656e67746829290a0909696e7075745b2773657175656e6365275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09090a090974786e5b2776696e275d2e617070656e6428696e707574290a09090a096f7574707574733d6275666665722e73686966745f766172696e7428290a096966206f7574707574733e3130303030303a20232073616e69747920636865636b0a090972657475726e204e6f6e650a09090a09666f72205f20696e2072616e6765286f757470757473293a0a09096f75747075743d7b7d0a09090a09096f75747075745b2776616c7565275d3d666c6f6174286275666665722e73686966745f75696e7436342829292f3130303030303030300a09096c656e6774683d6275666665722e73686966745f766172696e7428290a09096f75747075745b277363726970745075624b6579275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674286c656e67746829290a09090a090974786e5b27766f7574275d2e617070656e64286f7574707574290a090a0974786e5b276c6f636b74696d65275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a090a0972657475726e2074786e0a0a0a646566204f505f52455455524e5f66696e645f7370656e745f747869642874786e732c207370656e745f747869642c207370656e745f766f7574293a0a09666f7220747869642c2074786e5f756e7061636b656420696e2074786e732e6974656d7328293a0a0909666f7220696e70757420696e2074786e5f756e7061636b65645b2776696e275d3a0a09090969662028696e7075745b2774786964275d3d3d7370656e745f747869642920616e642028696e7075745b27766f7574275d3d3d7370656e745f766f7574293a0a0909090972657475726e20747869640a090909090a0972657475726e204e6f6e650a0a0a646566204f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564293a0a09666f7220696e6465782c206f757470757420696e20656e756d65726174652874786e5f756e7061636b65645b27766f7574275d293a0a09096f705f72657475726e3d4f505f52455455524e5f6765745f7363726970745f64617461284f505f52455455524e5f6865785f746f5f62696e286f75747075745b277363726970745075624b6579275d29290a09090a09096966206f705f72657475726e3a0a09090972657475726e207b0a0909090927696e646578273a20696e6465782c0a09090909276f705f72657475726e273a206f705f72657475726e2c0a0909097d0a090a0972657475726e204e6f6e650a090a0a646566204f505f52455455524e5f6765745f7363726970745f64617461287363726970745075624b657942696e617279293a0a096f705f72657475726e3d4e6f6e650a090a096966207363726970745075624b657942696e6172795b303a315d3d3d62275c783661273a0a090966697273745f6f72643d6f7264287363726970745075624b657942696e6172795b313a325d290a09090a090969662066697273745f6f72643c3d37353a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b323a322b66697273745f6f72645d0a0909656c69662066697273745f6f72643d3d307834633a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b333a332b6f7264287363726970745075624b657942696e6172795b323a335d295d0a0909656c69662066697273745f6f72643d3d307834643a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b343a342b6f7264287363726970745075624b657942696e6172795b323a335d292b3235362a6f7264287363726970745075624b657942696e6172795b333a345d295d0a090a0972657475726e206f705f72657475726e090a0a0a646566204f505f52455455524e5f7061636b5f74786e2874786e293a0a0962696e6172793d6227270a090a0962696e6172792b3d7374727563742e7061636b28273c4c272c2074786e5b2776657273696f6e275d290a090a0962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e74286c656e2874786e5b2776696e275d29290a090a09666f7220696e70757420696e2074786e5b2776696e275d3a0a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e28696e7075745b2774786964275d295b3a3a2d315d0a090962696e6172792b3d7374727563742e7061636b28273c4c272c20696e7075745b27766f7574275d290a090962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e7428696e74286c656e28696e7075745b27736372697074536967275d292f322929202320646976696465206279203220626563617573652069742069732063757272656e746c7920696e206865780a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e28696e7075745b27736372697074536967275d290a090962696e6172792b3d7374727563742e7061636b28273c4c272c20696e7075745b2773657175656e6365275d290a090a0962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e74286c656e2874786e5b27766f7574275d29290a090a09666f72206f757470757420696e2074786e5b27766f7574275d3a0a090962696e6172792b3d4f505f52455455524e5f7061636b5f75696e74363428696e7428726f756e64286f75747075745b2776616c7565275d2a3130303030303030302929290a090962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e7428696e74286c656e286f75747075745b277363726970745075624b6579275d292f322929202320646976696465206279203220626563617573652069742069732063757272656e746c7920696e206865780a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e286f75747075745b277363726970745075624b6579275d290a090a0962696e6172792b3d7374727563742e7061636b28273c4c272c2074786e5b276c6f636b74696d65275d290a090a0972657475726e2062696e6172790a0a0a646566204f505f52455455524e5f7061636b5f766172696e7428696e7465676572293a0a09696620696e74656765723e307846464646464646463a0a09097061636b65643d225c784646222b4f505f52455455524e5f7061636b5f75696e74363428696e7465676572290a09656c696620696e74656765723e3078464646463a0a09097061636b65643d225c784645222b7374727563742e7061636b28273c4c272c20696e7465676572290a09656c696620696e74656765723e307846433a0a09097061636b65643d225c784644222b7374727563742e7061636b28273c48272c20696e7465676572290a09656c73653a0a09097061636b65643d7374727563742e7061636b282742272c20696e7465676572290a090a0972657475726e207061636b65640a0a0a646566204f505f52455455524e5f7061636b5f75696e74363428696e7465676572293a0a0975707065723d696e7428696e74656765722f34323934393637323936290a096c6f7765723d696e74656765722d75707065722a343239343936373239360a090a0972657475726e207374727563742e7061636b28273c4c272c206c6f776572292b7374727563742e7061636b28273c4c272c207570706572290a0a0a232048656c70657220636c61737320666f7220756e7061636b696e6720626974636f696e2062696e61727920646174610a0a636c617373204f505f52455455524e5f62756666657228293a0a0a09646566205f5f696e69745f5f2873656c662c20646174612c207074723d30293a0a090973656c662e646174613d646174610a090973656c662e6c656e3d6c656e2864617461290a090973656c662e7074723d7074720a09200a096465662073686966742873656c662c206368617273293a0a09097072656669783d73656c662e646174615b73656c662e7074723a73656c662e7074722b63686172735d0a090973656c662e7074722b3d63686172730a0a090972657475726e207072656669780a09200a096465662073686966745f756e7061636b2873656c662c2063686172732c20666f726d6174293a0a0909756e7061636b3d7374727563742e756e7061636b28666f726d61742c2073656c662e736869667428636861727329290a0a090972657475726e20756e7061636b5b305d0a0a096465662073686966745f766172696e742873656c66293a0a090976616c75653d73656c662e73686966745f756e7061636b28312c20274227290a0a090969662076616c75653d3d307846463a0a09090976616c75653d73656c662e73686966745f75696e74363428290a0909656c69662076616c75653d3d307846453a0a09090976616c75653d73656c662e73686966745f756e7061636b28342c20273c4c27290a0909656c69662076616c75653d3d307846443a0a09090976616c75653d73656c662e73686966745f756e7061636b28322c20273c4827290a090a090972657475726e2076616c75650a0a096465662073686966745f75696e7436342873656c66293a0a090972657475726e2073656c662e73686966745f756e7061636b28342c20273c4c27292b343239343936373239362a73656c662e73686966745f756e7061636b28342c20273c4c27290a090a0964656620757365642873656c66293a0a090972657475726e206d696e2873656c662e7074722c2073656c662e6c656e290a0a096465662072656d61696e696e672873656c66293a0a090972657475726e206d61782873656c662e6c656e2d73656c662e7074722c2030290a0a0a2320436f6e76657274696e672062696e617279203c2d3e2068657861646563696d616c0a0a646566204f505f52455455524e5f6865785f746f5f62696e28686578293a0a097472793a0a09097261773d62696e61736369692e6132625f68657828686578290a0965786365707420457863657074696f6e3a0a090972657475726e204e6f6e650a09090a0972657475726e207261770a090a0a646566204f505f52455455524e5f62696e5f746f5f68657828737472696e67293a0a0972657475726e2062696e61736369692e6232615f68657828737472696e67292e6465636f646528277574662d3827290a",
                "type": "nulldata"
            }
        }
    ],
    "hex": "010000000182565affd43be9b5e07032a6b6edb73cd63715c94cfa604315e0db237efd8ba5000000006b483045022100eaebe2fcd2a1ccaed1259e7792688e0cc83d849497a0cc9d6c0cd6f4495068cc0220331772e997f56cf41ded5ee16e0552c28db56d90780e96e6d40d0f8634a0469e012102948998077e8868e4900c4a3f522aaf5dd72da543b8b139bc3cbd712203933fb3ffffffff020c8f3e0b000000001976a914d923bca73da482216ac46178a32f54ce12e6422a88ac0000000000000000fdf45d6a4df05d23204f505f52455455524e2e70790a230a2320507974686f6e2073637269707420746f2067656e657261746520616e64207265747269657665204f505f52455455524e20626974636f696e207472616e73616374696f6e730a230a2320436f707972696768742028632920436f696e20536369656e636573204c74640a230a23205065726d697373696f6e20697320686572656279206772616e7465642c2066726565206f66206368617267652c20746f20616e7920706572736f6e206f627461696e696e67206120636f70790a23206f66207468697320736f66747761726520616e64206173736f63696174656420646f63756d656e746174696f6e2066696c657320287468652022536f66747761726522292c20746f206465616c0a2320696e2074686520536f66747761726520776974686f7574207265737472696374696f6e2c20696e636c7564696e6720776974686f7574206c696d69746174696f6e20746865207269676874730a2320746f207573652c20636f70792c206d6f646966792c206d657267652c207075626c6973682c20646973747269627574652c207375626c6963656e73652c20616e642f6f722073656c6c0a2320636f70696573206f662074686520536f6674776172652c20616e6420746f207065726d697420706572736f6e7320746f2077686f6d2074686520536f6674776172652069730a23206675726e697368656420746f20646f20736f2c207375626a65637420746f2074686520666f6c6c6f77696e6720636f6e646974696f6e733a0a230a23205468652061626f766520636f70797269676874206e6f7469636520616e642074686973207065726d697373696f6e206e6f74696365207368616c6c20626520696e636c7564656420696e0a2320616c6c20636f70696573206f72207375627374616e7469616c20706f7274696f6e73206f662074686520536f6674776172652e0a230a232054484520534f4654574152452049532050524f564944454420224153204953222c20574954484f55542057415252414e5459204f4620414e59204b494e442c2045585052455353204f520a2320494d504c4945442c20494e434c5544494e4720425554204e4f54204c494d4954454420544f205448452057415252414e54494553204f46204d45524348414e544142494c4954592c0a23204649544e45535320464f52204120504152544943554c415220505552504f534520414e44204e4f4e494e4652494e47454d454e542e20494e204e4f204556454e54205348414c4c205448450a2320415554484f5253204f5220434f5059524947485420484f4c44455253204245204c4941424c4520464f5220414e5920434c41494d2c2044414d41474553204f52204f544845520a23204c494142494c4954592c205748455448455220494e20414e20414354494f4e204f4620434f4e54524143542c20544f5254204f52204f54484552574953452c2041524953494e472046524f4d2c0a23204f5554204f46204f5220494e20434f4e4e454354494f4e20574954482054484520534f465457415245204f522054484520555345204f52204f54484552204445414c494e475320494e0a232054484520534f4654574152452e0a0a0a696d706f72742073756270726f636573732c206a736f6e2c2074696d652c2072616e646f6d2c206f732e706174682c2062696e61736369692c207374727563742c20737472696e672c2072652c20686173686c69620a0a0a2320507974686f6e20322d3320636f6d7061746962696c697479206c6f6769630a0a7472793a0a0962617365737472696e670a657863657074204e616d654572726f723a0a0962617365737472696e67203d207374720a090a20200a2320557365722d646566696e65642071756173692d636f6e7374616e74730a0a4f505f52455455524e5f424954434f494e5f49503d273132372e302e302e312720232049502061646472657373206f6620796f757220626974636f696e206e6f64650a4f505f52455455524e5f424954434f494e5f5553455f434d443d46616c736520232075736520636f6d6d616e642d6c696e6520696e7374656164206f66204a534f4e2d5250433f0a0a434f4e465f46494c45203d20277e2f746573746e65742e636f6e66270a0a6966204f505f52455455524e5f424954434f494e5f5553455f434d443a0a094f505f52455455524e5f424954434f494e5f504154483d272f7573722f62696e2f626974636f696e2d636c69272023207061746820746f20626974636f696e2d636c692065786563757461626c65206f6e2074686973207365727665720a090a656c73653a0a094f505f52455455524e5f424954434f494e5f504f52543d27272023206c6561766520656d70747920746f207573652064656661756c7420706f727420666f72206d61696e6e65742f746573746e65740a094f505f52455455524e5f424954434f494e5f555345523d27272023206c6561766520656d70747920746f20726561642066726f6d207e2f2e626974636f696e2f626974636f696e2e636f6e662028556e6978206f6e6c79290a094f505f52455455524e5f424954434f494e5f50415353574f52443d27272023206c6561766520656d70747920746f20726561642066726f6d207e2f2e626974636f696e2f626974636f696e2e636f6e662028556e6978206f6e6c79290a090a4f505f52455455524e5f4254435f4645453d302e3030332023204254432066656520746f2070617920706572207472616e73616374696f6e0a4f505f52455455524e5f4254435f445553543d302e30303030312023206f6d697420425443206f75747075747320736d616c6c6572207468616e20746869730a0a4f505f52455455524e5f4d41585f42595445533d36353533352023206d6178696d756d20627974657320696e20616e204f505f52455455524e20283430206173206f6620426974636f696e20302e3130290a4f505f52455455524e5f4d41585f424c4f434b533d31302023206d6178696d756d206e756d626572206f6620626c6f636b7320746f20747279207768656e2072657472696576696e6720646174610a0a4f505f52455455524e5f4e45545f54494d454f55543d3130202320686f77206c6f6e6720746f2074696d65206f75742028696e207365636f6e647329207768656e20636f6d6d756e69636174696e67207769746820626974636f696e206e6f64650a0a0a2320557365722d666163696e672066756e6374696f6e730a0a646566204f505f52455455524e5f73656e642873656e645f616464726573732c2073656e645f616d6f756e742c206d657461646174612c20746573746e65743d46616c7365293a0a09232056616c696461746520736f6d6520706172616d65746572730a090a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a0a09726573756c743d4f505f52455455524e5f626974636f696e5f636d64282776616c696461746561646472657373272c20746573746e65742c2073656e645f61646472657373290a096966206e6f74202827697376616c69642720696e20726573756c7420616e6420726573756c745b27697376616c6964275d293a0a090972657475726e207b276572726f72273a202753656e64206164647265737320636f756c64206e6f742062652076616c6964617465643a20272b73656e645f616464726573737d0a090a096966206973696e7374616e6365286d657461646174612c2062617365737472696e67293a0a09096d657461646174613d6d657461646174612e656e636f646528277574662d382729202320636f6e7665727420746f2062696e61727920737472696e670a0a096d657461646174615f6c656e3d6c656e286d65746164617461290a09090a096966206d657461646174615f6c656e3e36353533363a0a090972657475726e207b276572726f72273a202754686973206c696272617279206f6e6c7920737570706f727473206d6574616461746120757020746f20363535333620627974657320696e2073697a65277d0a09090a096966206d657461646174615f6c656e3e4f505f52455455524e5f4d41585f42595445533a0a090972657475726e207b276572726f72273a20274d657461646174612068617320272b737472286d657461646174615f6c656e292b2720627974657320627574206973206c696d6974656420746f20272b737472284f505f52455455524e5f4d41585f4259544553292b272028736565204f505f52455455524e5f4d41585f425954455329277d0a090a09232043616c63756c61746520616d6f756e747320616e642063686f6f736520696e707574730a0a096f75747075745f616d6f756e743d73656e645f616d6f756e742b4f505f52455455524e5f4254435f4645450a0a09696e707574735f7370656e643d4f505f52455455524e5f73656c6563745f696e70757473286f75747075745f616d6f756e742c20746573746e6574290a090a09696620276572726f722720696e20696e707574735f7370656e643a0a090972657475726e207b276572726f72273a20696e707574735f7370656e645b276572726f72275d7d0a090a096368616e67655f616d6f756e743d696e707574735f7370656e645b27746f74616c275d2d6f75747075745f616d6f756e740a0a0923204275696c642074686520726177207472616e73616374696f6e0a09090a096368616e67655f616464726573733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776368616e676561646472657373272c20746573746e6574290a090a096f7574707574733d7b73656e645f616464726573733a2073656e645f616d6f756e747d0a090a096966206368616e67655f616d6f756e743e3d4f505f52455455524e5f4254435f445553543a0a09096f7574707574735b6368616e67655f616464726573735d3d6368616e67655f616d6f756e740a09090a097261775f74786e3d4f505f52455455524e5f6372656174655f74786e28696e707574735f7370656e645b27696e70757473275d2c206f7574707574732c206d657461646174612c206c656e286f757470757473292c20746573746e6574290a0a0923205369676e20616e642073656e6420746865207472616e73616374696f6e2c2072657475726e20726573756c740a0a0972657475726e204f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574290a0a0a646566204f505f52455455524e5f73746f726528646174612c20746573746e65743d46616c7365293a0a092320446174612069732073746f72656420696e204f505f52455455524e732077697468696e206120736572696573206f6620636861696e6564207472616e73616374696f6e732e0a092320496620746865204f505f52455455524e20697320666f6c6c6f77656420627920616e6f74686572206f75747075742c20746865206461746120636f6e74696e75657320696e20746865207472616e73616374696f6e207370656e64696e672074686174206f75747075742e0a0923205768656e20746865204f505f52455455524e20697320746865206c617374206f75747075742c207468697320616c736f207369676e69666965732074686520656e64206f662074686520646174612e0a0a09232056616c696461746520706172616d657465727320616e6420676574206368616e676520616464726573730a0a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a09090a096966206973696e7374616e636528646174612c2062617365737472696e67293a0a0909646174613d646174612e656e636f646528277574662d382729202320636f6e7665727420746f2062696e61727920737472696e670a090a09646174615f6c656e3d6c656e2864617461290a09696620646174615f6c656e3d3d303a0a090972657475726e207b276572726f72273a2027536f6d65206461746120697320726571756972656420746f2062652073746f726564277d0a0a096368616e67655f616464726573733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776368616e676561646472657373272c20746573746e6574290a090a09232043616c63756c61746520616d6f756e747320616e642063686f6f736520666972737420696e7075747320746f207573650a0a096f75747075745f616d6f756e743d4f505f52455455524e5f4254435f4645452a696e742828646174615f6c656e2b4f505f52455455524e5f4d41585f42595445532d31292f4f505f52455455524e5f4d41585f4259544553292023206e756d626572206f66207472616e73616374696f6e732072657175697265640a090a09696e707574735f7370656e643d4f505f52455455524e5f73656c6563745f696e70757473286f75747075745f616d6f756e742c20746573746e6574290a09696620276572726f722720696e20696e707574735f7370656e643a0a090972657475726e207b276572726f72273a20696e707574735f7370656e645b276572726f72275d7d0a09090a09696e707574733d696e707574735f7370656e645b27696e70757473275d0a09696e7075745f616d6f756e743d696e707574735f7370656e645b27746f74616c275d0a0a09232046696e64207468652063757272656e7420626c6f636b636861696e2068656967687420616e64206d656d706f6f6c2074786964730a0a096865696768743d696e74284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b636f756e74272c20746573746e657429290a0961766f69645f74786964733d4f505f52455455524e5f626974636f696e5f636d6428276765747261776d656d706f6f6c272c20746573746e6574290a0a0923204c6f6f7020746f206275696c6420616e642073656e64207472616e73616374696f6e730a0a09726573756c743d7b277478696473273a5b5d7d0a0a09666f7220646174615f70747220696e2072616e676528302c20646174615f6c656e2c204f505f52455455524e5f4d41585f4259544553293a0a09092320536f6d65207072657061726174696f6e20666f72207468697320697465726174696f6e0a090a09096c6173745f74786e3d2828646174615f7074722b4f505f52455455524e5f4d41585f4259544553293e3d646174615f6c656e292023206973207468697320746865206c61737420747820696e2074686520636861696e3f0a09096368616e67655f616d6f756e743d696e7075745f616d6f756e742d4f505f52455455524e5f4254435f4645450a09096d657461646174613d646174615b646174615f7074723a646174615f7074722b4f505f52455455524e5f4d41585f42595445535d0a0909090a090923204275696c6420616e642073656e642074686973207472616e73616374696f6e0a090a09096f7574707574733d7b7d0a09096966206368616e67655f616d6f756e743e3d4f505f52455455524e5f4254435f445553543a2023206d6967687420626520736b697070656420666f72206c617374207472616e73616374696f6e0a0909096f7574707574735b6368616e67655f616464726573735d3d6368616e67655f616d6f756e740a0909090a09097261775f74786e3d4f505f52455455524e5f6372656174655f74786e28696e707574732c206f7574707574732c206d657461646174612c206c656e286f75747075747329206966206c6173745f74786e20656c736520302c20746573746e6574290a09090a090973656e645f726573756c743d4f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574290a090a09092320436865636b20666f72206572726f727320616e6420636f6c6c6563742074686520747869640a090a0909696620276572726f722720696e2073656e645f726573756c743a0a090909726573756c745b276572726f72275d3d73656e645f726573756c745b276572726f72275d0a090909627265616b0a09090a0909726573756c745b277478696473275d2e617070656e642873656e645f726573756c745b2774786964275d290a09090a0909696620646174615f7074723d3d303a0a090909726573756c745b27726566275d3d4f505f52455455524e5f63616c635f726566286865696768742c2073656e645f726573756c745b2774786964275d2c2061766f69645f7478696473290a09090a090923205072657061726520696e7075747320666f72206e65787420697465726174696f6e0a0a0909696e707574733d5b7b0a0909092774786964273a2073656e645f726573756c745b2774786964275d2c0a09090927766f7574273a20312c0a09097d5d0a0a0909696e7075745f616d6f756e743d6368616e67655f616d6f756e740a090a09232052657475726e207468652066696e616c20726573756c740a0a0972657475726e20726573756c740a0a0a646566204f505f52455455524e5f7265747269657665287265662c206d61785f726573756c74733d312c20746573746e65743d46616c7365293a0a09232056616c696461746520706172616d657465727320616e642067657420737461747573206f6620426974636f696e20436f72650a0a096966206e6f74204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a090972657475726e207b276572726f72273a2027506c6561736520636865636b20426974636f696e20436f72652069732072756e6e696e6720616e64204f505f52455455524e5f424954434f494e5f2a20636f6e7374616e7473206172652073657420636f72726563746c79277d0a09090a096d61785f6865696768743d696e74284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b636f756e74272c20746573746e657429290a09686569676874733d4f505f52455455524e5f6765745f7265665f68656967687473287265662c206d61785f686569676874290a090a096966206e6f74206973696e7374616e636528686569676874732c206c697374293a0a090972657475726e207b276572726f72273a2027526566206973206e6f742076616c6964277d0a0a092320436f6c6c65637420616e642072657475726e2074686520726573756c74730a090a09726573756c74733d5b5d0a090a09666f722068656967687420696e20686569676874733a0a09096966206865696768743d3d303a0a09090974786964733d4f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574292023206966206d656d706f6f6c2c206f6e6c7920676574206c69737420666f72206e6f772028746f2073617665205250432063616c6c73290a09090974786e733d4e6f6e650a0909656c73653a0a09090974786e733d4f505f52455455524e5f6765745f626c6f636b5f74786e73286865696768742c20746573746e657429202320696620626c6f636b2c2067657420616c6c2066756c6c7920756e7061636b65640a09090974786964733d74786e732e6b65797328290a09090a0909666f72207478696420696e2074786964733a0a0909096966204f505f52455455524e5f6d617463685f7265665f74786964287265662c2074786964293a0a090909096966206865696768743d3d303a0a090909090974786e5f756e7061636b65643d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574290a09090909656c73653a0a090909090974786e5f756e7061636b65643d74786e735b747869645d0a09090909090a09090909666f756e643d4f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564290a090909090a09090909696620666f756e643a090909090a09090909092320436f6c6c65637420646174612066726f6d2074786964207768696368206d6174636865732072656620616e6420636f6e7461696e7320616e204f505f52455455524e0a090909090a0909090909726573756c743d7b0a090909090909277478696473273a205b7374722874786964295d2c0a0909090909092764617461273a20666f756e645b276f705f72657475726e275d2c0a09090909097d0a09090909090a09090909096b65795f686569676874733d7b6865696768743a20547275657d0a09090909090a09090909092320576f726b206f7574207768696368206f7468657220626c6f636b2068656967687473202f206d656d706f6f6c2077652073686f756c64207472790a09090909090a09090909096966206865696768743d3d303a0a0909090909097472795f686569676874733d5b5d2023206e6f776865726520656c736520746f206c6f6f6b206966206669727374207374696c6c20696e206d656d706f6f6c0a0909090909656c73653a0a090909090909726573756c745b27726566275d3d4f505f52455455524e5f63616c635f726566286865696768742c20747869642c2074786e732e6b6579732829290a0909090909097472795f686569676874733d4f505f52455455524e5f6765745f7472795f68656967687473286865696768742b312c206d61785f6865696768742c2046616c7365290a09090909090a09090909092320436f6c6c656374207468652072657374206f662074686520646174612c20696620617070726f7072696174650a09090909090a09090909096966206865696768743d3d303a0a090909090909746869735f74786e733d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574292023206e6f7720726574726965766520616c6c20746f20666f6c6c6f7720636861696e0a0909090909656c73653a0a090909090909746869735f74786e733d74786e730a0909090909090a09090909096c6173745f747869643d747869640a0909090909746869735f6865696768743d6865696768740a09090909090a09090909097768696c6520666f756e645b27696e646578275d203c20286c656e2874786e5f756e7061636b65645b27766f7574275d292d31293a20232074686973206d65616e73206d6f7265206461746120746f20636f6d650a0909090909096e6578745f747869643d4f505f52455455524e5f66696e645f7370656e745f7478696428746869735f74786e732c206c6173745f747869642c20666f756e645b27696e646578275d2b31290a0909090909090a0909090909092320496620776520666f756e6420746865206e657874207478696420696e20746865206461746120636861696e0a09090909090a0909090909096966206e6578745f747869643a0a09090909090909726573756c745b277478696473275d2e617070656e6428737472286e6578745f7478696429290a090909090909090a0909090909090974786e5f756e7061636b65643d746869735f74786e735b6e6578745f747869645d0a09090909090909666f756e643d4f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564290a0a09090909090909696620666f756e643a0a0909090909090909726573756c745b2764617461275d2b3d666f756e645b276f705f72657475726e275d0a09090909090909096b65795f686569676874735b746869735f6865696768745d3d547275650a09090909090909656c73653a0a0909090909090909726573756c745b276572726f72275d3d274461746120696e636f6d706c657465202d206d697373696e67204f505f52455455524e270a0909090909090909627265616b0a090909090909090a090909090909096c6173745f747869643d6e6578745f747869640a090909090909090a09090909090923204f7468657277697365206d6f7665206f6e20746f20746865206e6578742068656967687420746f206b656570206c6f6f6b696e670a090909090909090a090909090909656c73653a0a090909090909096966206c656e287472795f68656967687473293a0a0909090909090909746869735f6865696768743d7472795f686569676874732e706f702830290a0a0909090909090909696620746869735f6865696768743d3d303a0a090909090909090909746869735f74786e733d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574290a0909090909090909656c73653a0a090909090909090909746869735f74786e733d4f505f52455455524e5f6765745f626c6f636b5f74786e7328746869735f6865696768742c20746573746e657429090a0a09090909090909656c73653a0a0909090909090909726573756c745b276572726f72275d3d274461746120696e636f6d706c657465202d20636f756c64206e6f742066696e64206e657874207472616e73616374696f6e270a0909090909090909627265616b0a09090909090a0909090909232046696e6973682075702074686520696e666f726d6174696f6e2061626f7574207468697320726573756c74200a09090909090a0909090909726573756c745b2768656967687473275d3d6c697374286b65795f686569676874732e6b65797328292909090909090a0909090909726573756c74732e617070656e6428726573756c74290a09090909090a09096966206c656e28726573756c7473293e3d6d61785f726573756c74733a0a090909627265616b20232073746f70206966207765206861766520636f6c6c656374656420656e6f7567680a090a0972657475726e20726573756c74730a0a0a23205574696c6974792066756e6374696f6e730a0a646566204f505f52455455524e5f73656c6563745f696e7075747328746f74616c5f616d6f756e742c20746573746e6574293a0a0923204c69737420616e6420736f727420756e7370656e7420696e70757473206279207072696f726974790a0a09756e7370656e745f696e707574733d4f505f52455455524e5f626974636f696e5f636d6428276c697374756e7370656e74272c20746573746e65742c20302909090a096966206e6f74206973696e7374616e636528756e7370656e745f696e707574732c206c697374293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f74207265747269657665206c697374206f6620756e7370656e7420696e70757473277d0a09090a09756e7370656e745f696e707574732e736f7274286b65793d6c616d62646120756e7370656e745f696e7075743a20756e7370656e745f696e7075745b27616d6f756e74275d2a756e7370656e745f696e7075745b27636f6e6669726d6174696f6e73275d2c20726576657273653d54727565290a090a0923204964656e7469667920776869636820696e707574732073686f756c64206265207370656e740a0a09696e707574735f7370656e643d5b5d0a09696e7075745f616d6f756e743d300a090a09666f7220756e7370656e745f696e70757420696e20756e7370656e745f696e707574733a0a0909696e707574735f7370656e642e617070656e6428756e7370656e745f696e707574290a0a0909696e7075745f616d6f756e742b3d756e7370656e745f696e7075745b27616d6f756e74275d0a0909696620696e7075745f616d6f756e743e3d746f74616c5f616d6f756e743a0a090909627265616b20232073746f70207768656e207765206861766520656e6f7567680a090a09696620696e7075745f616d6f756e743c746f74616c5f616d6f756e743a0a090972657475726e207b276572726f72273a20274e6f7420656e6f7567682066756e64732061726520617661696c61626c6520746f20636f7665722074686520616d6f756e7420616e6420666565277d0a09090a09232052657475726e20746865207375636365737366756c20726573756c740a0a0972657475726e207b0a090927696e70757473273a20696e707574735f7370656e642c0a090927746f74616c273a20696e7075745f616d6f756e742c0a097d0a0a0a646566204f505f52455455524e5f6372656174655f74786e28696e707574732c206f7574707574732c206d657461646174612c206d657461646174615f706f732c20746573746e6574293a0a097261775f74786e3d4f505f52455455524e5f626974636f696e5f636d6428276372656174657261777472616e73616374696f6e272c20746573746e65742c20696e707574732c206f757470757473290a090a0974786e5f756e7061636b65643d4f505f52455455524e5f756e7061636b5f74786e284f505f52455455524e5f6865785f746f5f62696e287261775f74786e29290a090a096d657461646174615f6c656e3d6c656e286d65746164617461290a090a096966206d657461646174615f6c656e3c3d37353a0a09097061796c6f61643d62797465617272617928286d657461646174615f6c656e2c29292b6d657461646174612023206c656e6774682062797465202b2064617461202868747470733a2f2f656e2e626974636f696e2e69742f77696b692f536372697074290a09656c6966206d657461646174615f6c656e3c3d3235363a0a09097061796c6f61643d225c783463222b62797465617272617928286d657461646174615f6c656e2c29292b6d657461646174612023204f505f50555348444154413120666f726d61740a09656c73653a0a09097061796c6f61643d225c783464222b62797465617272617928286d657461646174615f6c656e253235362c29292b6279746561727261792828696e74286d657461646174615f6c656e2f323536292c29292b6d657461646174612023204f505f50555348444154413220666f726d61740a090a096d657461646174615f706f733d6d696e286d617828302c206d657461646174615f706f73292c206c656e2874786e5f756e7061636b65645b27766f7574275d2929202320636f6e73747261696e20746f2076616c69642076616c7565730a0a0974786e5f756e7061636b65645b27766f7574275d5b6d657461646174615f706f733a6d657461646174615f706f735d3d5b7b0a09092776616c7565273a20302c0a0909277363726970745075624b6579273a20273661272b4f505f52455455524e5f62696e5f746f5f686578287061796c6f61642920232068657265277320746865204f505f52455455524e0a097d5d0a090a0972657475726e204f505f52455455524e5f62696e5f746f5f686578284f505f52455455524e5f7061636b5f74786e2874786e5f756e7061636b656429290a0a0a646566204f505f52455455524e5f7369676e5f73656e645f74786e287261775f74786e2c20746573746e6574293a0a097369676e65645f74786e3d4f505f52455455524e5f626974636f696e5f636d6428277369676e7261777472616e73616374696f6e272c20746573746e65742c207261775f74786e290a096966206e6f74202827636f6d706c6574652720696e207369676e65645f74786e20616e64207369676e65645f74786e5b27636f6d706c657465275d293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f74207369676e20746865207472616e73616374696f6e277d0a090a0973656e645f747869643d4f505f52455455524e5f626974636f696e5f636d64282773656e647261777472616e73616374696f6e272c20746573746e65742c207369676e65645f74786e5b27686578275d290a096966206e6f7420286973696e7374616e63652873656e645f747869642c2062617365737472696e672920616e64206c656e2873656e645f74786964293d3d3634293a0a090972657475726e207b276572726f72273a2027436f756c64206e6f742073656e6420746865207472616e73616374696f6e277d0a090a0972657475726e207b2774786964273a207374722873656e645f74786964297d0a0a0a646566204f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574293a0a0972657475726e204f505f52455455524e5f626974636f696e5f636d6428276765747261776d656d706f6f6c272c20746573746e6574290a0a0a646566204f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574293a0a097261775f74786e3d4f505f52455455524e5f626974636f696e5f636d6428276765747261777472616e73616374696f6e272c20746573746e65742c2074786964290a0972657475726e204f505f52455455524e5f756e7061636b5f74786e284f505f52455455524e5f6865785f746f5f62696e287261775f74786e29290a0a0a646566204f505f52455455524e5f6765745f6d656d706f6f6c5f74786e7328746573746e6574293a0a0974786964733d4f505f52455455524e5f6c6973745f6d656d706f6f6c5f74786e7328746573746e6574290a0a0974786e733d7b7d0a09666f72207478696420696e2074786964733a0a090974786e735b747869645d3d4f505f52455455524e5f6765745f6d656d706f6f6c5f74786e28747869642c20746573746e6574290a090a0972657475726e2074786e730a090a0a646566204f505f52455455524e5f6765745f7261775f626c6f636b286865696768742c20746573746e6574293a0a09626c6f636b5f686173683d4f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b68617368272c20746573746e65742c20686569676874290a096966206e6f7420286973696e7374616e636528626c6f636b5f686173682c2062617365737472696e672920616e64206c656e28626c6f636b5f68617368293d3d3634293a0a090972657475726e207b276572726f72273a2027426c6f636b2061742068656967687420272b73747228686569676874292b27206e6f7420666f756e64277d0a090a0972657475726e207b0a090927626c6f636b273a204f505f52455455524e5f6865785f746f5f62696e284f505f52455455524e5f626974636f696e5f636d642827676574626c6f636b272c20746573746e65742c20626c6f636b5f686173682c2046616c736529290a097d0a0a0a646566204f505f52455455524e5f6765745f626c6f636b5f74786e73286865696768742c20746573746e6574293a0a097261775f626c6f636b3d4f505f52455455524e5f6765745f7261775f626c6f636b286865696768742c20746573746e6574290a09696620276572726f722720696e207261775f626c6f636b3a0a090972657475726e207b276572726f72273a207261775f626c6f636b5b276572726f72275d7d0a090a09626c6f636b3d4f505f52455455524e5f756e7061636b5f626c6f636b287261775f626c6f636b5b27626c6f636b275d290a090a0972657475726e20626c6f636b5b27747873275d0a0a0a232054616c6b696e6720746f20626974636f696e2d636c690a0a646566204f505f52455455524e5f626974636f696e5f636865636b28746573746e6574293a0a09696e666f3d4f505f52455455524e5f626974636f696e5f636d642827676574696e666f272c20746573746e6574290a090a0972657475726e206973696e7374616e636528696e666f2c20646963742920616e64202762616c616e63652720696e20696e666f0a0a0a646566204f505f52455455524e5f626974636f696e5f636d6428636f6d6d616e642c20746573746e65742c202a61726773293a2023206d6f726520706172616d732061726520726561642066726f6d20686572650a096966204f505f52455455524e5f424954434f494e5f5553455f434d443a0a09097375625f617267733d5b4f505f52455455524e5f424954434f494e5f504154485d0a0909696620746573746e65743a0a0909097375625f617267732e617070656e6428272d746573746e657427290a09090a09097375625f617267732e617070656e6428636f6d6d616e64290a09090a0909666f722061726720696e20617267733a0a0909097375625f617267732e617070656e64286a736f6e2e64756d70732861726729206966206973696e7374616e6365286172672c2028646963742c206c6973742c207475706c65292920656c7365207374722861726729290a09090a09097261775f726573756c743d73756270726f636573732e636865636b5f6f7574707574287375625f61726773292e6465636f646528227574662d3822292e72737472697028225c6e22290a09090a09097472793a2023206465636f6465204a534f4e20696620706f737369626c650a090909726573756c743d6a736f6e2e6c6f616473287261775f726573756c74290a09096578636570742056616c75654572726f723a0a090909726573756c743d7261775f726573756c740a0a09656c73653a0a0909726571756573743d7b0a090909276964273a207374722874696d652e74696d652829292b272d272b7374722872616e646f6d2e72616e64696e74283130303030302c39393939393929292c0a090909276d6574686f64273a20636f6d6d616e642c0a09090927706172616d73273a20617267732c0a09097d0a09090a0909706f72743d4f505f52455455524e5f424954434f494e5f504f52540a0909757365723d4f505f52455455524e5f424954434f494e5f555345520a090970617373776f72643d4f505f52455455524e5f424954434f494e5f50415353574f52440a09090a09096966206e6f7420286c656e28706f72742920616e64206c656e28757365722920616e64206c656e2870617373776f726429293a0a09090923636f6e665f6c696e65733d6f70656e286f732e706174682e657870616e647573657228277e27292b272f2e626974636f696e2f626974636f696e2e636f6e6627292e726561646c696e657328290a090909636f6e665f6c696e65733d6f70656e286f732e706174682e657870616e647573657228434f4e465f46494c4529292e726561646c696e657328290a0909090a090909666f7220636f6e665f6c696e6520696e20636f6e665f6c696e65733a0a0909090970617274733d636f6e665f6c696e652e737472697028292e73706c697428273d272c203129202320757020746f20322070617274730a090909090a090909096966202870617274735b305d3d3d27727063706f7274272920616e64206e6f74206c656e28706f7274293a0a0909090909706f72743d696e742870617274735b315d290a090909096966202870617274735b305d3d3d2772706375736572272920616e64206e6f74206c656e2875736572293a0a0909090909757365723d70617274735b315d0a090909096966202870617274735b305d3d3d2772706370617373776f7264272920616e64206e6f74206c656e2870617373776f7264293a0a090909090970617373776f72643d70617274735b315d0a09090a09096966206e6f74206c656e28706f7274293a0a090909706f72743d313833333220696620746573746e657420656c736520383333320a0909090a09096966206e6f7420286c656e28757365722920616e64206c656e2870617373776f726429293a0a09090972657475726e204e6f6e652023206e6f20706f696e7420747279696e6720696e207468697320636173650a09090a090975726c3d27687474703a2f2f272b4f505f52455455524e5f424954434f494e5f49502b273a272b73747228706f7274292b272f270a09090a09097472793a0a09090966726f6d2075726c6c69623220696d706f7274204854545050617373776f72644d67725769746844656661756c745265616c6d2c204854545042617369634175746848616e646c65722c206275696c645f6f70656e65722c20696e7374616c6c5f6f70656e65722c2075726c6f70656e2c20485454504572726f720a090965786365707420496d706f72744572726f723a0a09090966726f6d2075726c6c69622e7265717565737420696d706f7274204854545050617373776f72644d67725769746844656661756c745265616c6d2c204854545042617369634175746848616e646c65722c206275696c645f6f70656e65722c20696e7374616c6c5f6f70656e65722c2075726c6f70656e0a0a0909706173736d616e3d4854545050617373776f72644d67725769746844656661756c745265616c6d28290a0909706173736d616e2e6164645f70617373776f7264284e6f6e652c2075726c2c20757365722c2070617373776f7264290a0909617574685f68616e646c65723d4854545042617369634175746848616e646c657228706173736d616e290a09096f70656e65723d6275696c645f6f70656e657228617574685f68616e646c6572290a0909696e7374616c6c5f6f70656e6572286f70656e6572290a202020202020202020202020202020207472793a0a20202020202020202020202020202020202020207261775f726573756c743d75726c6f70656e2875726c2c206a736f6e2e64756d70732872657175657374292e656e636f646528277574662d3827292c204f505f52455455524e5f4e45545f54494d454f5554292e7265616428290a2020202020202020202020202020202065786365707420485454504572726f7220617320653a0a20202020202020202020202020202020202020207072696e7420652e66702e7265616428290a202020202020202020202020202020202020202072616973650a0a09090a0909726573756c745f61727261793d6a736f6e2e6c6f616473287261775f726573756c742e6465636f646528277574662d382729290a0909726573756c743d726573756c745f61727261795b27726573756c74275d0a0a0972657475726e20726573756c740a0a0a2320576f726b696e6720776974682064617461207265666572656e6365730a0a232054686520666f726d6174206f6620612064617461207265666572656e63652069733a205b657374696d6174656420626c6f636b206865696768745d2d5b7061727469616c20747869645d202d2077686572653a0a0a23205b657374696d6174656420626c6f636b206865696768745d2069732074686520626c6f636b20776865726520746865206669727374207472616e73616374696f6e206d696768742061707065617220616e6420666f6c6c6f77696e670a2320776869636820616c6c2073756273657175656e74207472616e73616374696f6e732061726520657870656374656420746f206170706561722e20496e20746865206576656e74206f66206120776569726420626c6f636b636861696e0a232072656f72672c20697420697320706f737369626c6520746865206669727374207472616e73616374696f6e206d696768742061707065617220696e206120736c696768746c79206561726c69657220626c6f636b2e205768656e0a2320656d62656464696e6720646174612c20776520736574205b657374696d6174656420626c6f636b206865696768745d20746f20312b287468652063757272656e7420626c6f636b20686569676874292e0a0a23205b7061727469616c20747869645d20636f6e7461696e7320322061646a6163656e742062797465732066726f6d2074686520747869642c206174206120737065636966696320706f736974696f6e20696e2074686520747869643a0a2320322a285b7061727469616c20747869645d206469762036353533362920676976657320746865206f6666736574206f662074686520322061646a6163656e742062797465732c206265747765656e203020616e642032382e0a2320285b7061727469616c20747869645d206d6f642032353629206973207468652062797465206f662074686520747869642061742074686174206f66667365742e0a232028285b7061727469616c20747869645d206d6f6420363535333629206469762032353629206973207468652062797465206f662074686520747869642061742074686174206f666673657420706c7573206f6e652e0a23204e6f74652074686174207468652074786964206973206f726465726564206163636f7264696e6720746f20757365722070726573656e746174696f6e2c206e6f7420726177206461746120696e2074686520626c6f636b2e0a0a0a646566204f505f52455455524e5f63616c635f726566286e6578745f6865696768742c20747869642c2061766f69645f7478696473293a0a09747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2874786964290a090a09666f7220747869645f6f666673657420696e2072616e6765283135293a0a09097375625f747869643d747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d0a0909636c61736865643d46616c73650a09090a0909666f722061766f69645f7478696420696e2061766f69645f74786964733a0a09090961766f69645f747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2861766f69645f74786964290a0909090a090909696620280a090909092861766f69645f747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d3d3d7375625f747869642920616e640a0909090928747869645f62696e617279213d61766f69645f747869645f62696e617279290a090909293a0a09090909636c61736865643d547275650a09090909627265616b0a0909090a09096966206e6f7420636c61736865643a0a090909627265616b0a090a09696620636c61736865643a202320636f756c64206e6f742066696e64206120676f6f64207265666572656e63650a090972657475726e204e6f6e650a09090a0974785f7265663d6f726428747869645f62696e6172795b322a747869645f6f66667365743a312b322a747869645f6f66667365745d292b3235362a6f726428747869645f62696e6172795b312b322a747869645f6f66667365743a322b322a747869645f6f66667365745d292b36353533362a747869645f6f66667365740a090a0972657475726e2027253036642d2530366427202520286e6578745f6865696768742c2074785f726566290a0a0a646566204f505f52455455524e5f6765745f7265665f706172747328726566293a0a096966206e6f742072652e73656172636828275e5b302d395d2b5c2d5b302d39412d46612d665d2b24272c20726566293a202320616c736f20737570706f7274207061727469616c207478696420666f72207365636f6e642068616c660a090972657475726e204e6f6e650a090a0970617274733d7265662e73706c697428272d27290a09090a0969662072652e73656172636828275b412d46612d665d272c2070617274735b315d293a0a09096966206c656e2870617274735b315d293e3d343a0a090909747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2870617274735b315d5b303a345d290a09090970617274735b315d3d6f726428747869645f62696e6172795b303a315d292b3235362a6f726428747869645f62696e6172795b313a325d292b36353533362a300a0909656c73653a0a09090972657475726e204e6f6e650a0909090a0970617274733d6c697374286d617028696e742c20706172747329290a090a0969662070617274735b315d3e3938333033393a20232031342a36353533362b36353533350a090972657475726e204e6f6e650a09090a0972657475726e2070617274730a0a0a646566204f505f52455455524e5f6765745f7265665f68656967687473287265662c206d61785f686569676874293a0a0970617274733d4f505f52455455524e5f6765745f7265665f706172747328726566290a096966206e6f742070617274733a0a090972657475726e204e6f6e650a09090a0972657475726e204f505f52455455524e5f6765745f7472795f686569676874732870617274735b305d2c206d61785f6865696768742c2054727565290a0a0a646566204f505f52455455524e5f6765745f7472795f68656967687473286573745f6865696768742c206d61785f6865696768742c20616c736f5f6261636b293a0a09666f72776172645f6865696768743d6573745f6865696768740a096261636b5f6865696768743d6d696e28666f72776172645f6865696768742d312c206d61785f686569676874290a090a09686569676874733d5b5d0a096d656d706f6f6c3d46616c73650a097472795f6865696768743d300a090a097768696c6520547275653a0a0909696620616c736f5f6261636b20616e642028287472795f6865696768742533293d3d32293a20232073746570206261636b20657665727920332074726965730a090909686569676874732e617070656e64286261636b5f686569676874290a0909096261636b5f6865696768742d3d310a0a0909656c73653a0a090909696620666f72776172645f6865696768743e6d61785f6865696768743a0a090909096966206e6f74206d656d706f6f6c3a0a0909090909686569676874732e617070656e64283029202320696e6469636174657320746f20747279206d656d706f6f6c0a09090909096d656d706f6f6c3d547275650a090909090a09090909656c6966206e6f7420616c736f5f6261636b3a0a0909090909627265616b2023206e6f7468696e67206d6f726520746f20646f20686572650a0909090a090909656c73653a0a09090909686569676874732e617070656e6428666f72776172645f686569676874290a0909090a090909666f72776172645f6865696768742b3d310a090a09096966206c656e2868656967687473293e3d4f505f52455455524e5f4d41585f424c4f434b533a0a090909627265616b0a0909090a09097472795f6865696768742b3d310a090a0972657475726e20686569676874730a0a0a646566204f505f52455455524e5f6d617463685f7265665f74786964287265662c2074786964293a0a0970617274733d4f505f52455455524e5f6765745f7265665f706172747328726566290a096966206e6f742070617274733a0a090972657475726e204e6f6e650a0a09747869645f6f66667365743d696e742870617274735b315d2f3635353336290a09747869645f62696e6172793d4f505f52455455524e5f6865785f746f5f62696e2874786964290a0a09747869645f706172743d747869645f62696e6172795b322a747869645f6f66667365743a322a747869645f6f66667365742b325d0a09747869645f6d617463683d627974656172726179285b70617274735b315d253235362c20696e74282870617274735b315d253635353336292f323536295d290a0a0972657475726e20747869645f706172743d3d747869645f6d6174636820232065786163742062696e61727920636f6d70617269736f6e0a0a0a2320556e7061636b696e6720616e64207061636b696e6720626974636f696e20626c6f636b7320616e64207472616e73616374696f6e73090a0a646566204f505f52455455524e5f756e7061636b5f626c6f636b2862696e617279293a0a096275666665723d4f505f52455455524e5f6275666665722862696e617279290a09626c6f636b3d7b7d0a090a09626c6f636b5b2776657273696f6e275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b276861736850726576426c6f636b275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a09626c6f636b5b27686173684d65726b6c65526f6f74275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a09626c6f636b5b2774696d65275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b2762697473275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b276e6f6e6365275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09626c6f636b5b2774785f636f756e74275d3d6275666665722e73686966745f766172696e7428290a090a09626c6f636b5b27747873275d3d7b7d0a090a096f6c645f7074723d6275666665722e7573656428290a090a097768696c65206275666665722e72656d61696e696e6728293a0a09097472616e73616374696f6e3d4f505f52455455524e5f756e7061636b5f74786e5f62756666657228627566666572290a09096e65775f7074723d6275666665722e7573656428290a090973697a653d6e65775f7074722d6f6c645f7074720a09090a09097261775f74786e5f62696e6172793d62696e6172795b6f6c645f7074723a6f6c645f7074722b73697a655d0a0909747869643d4f505f52455455524e5f62696e5f746f5f68657828686173686c69622e73686132353628686173686c69622e736861323536287261775f74786e5f62696e617279292e6469676573742829292e64696765737428295b3a3a2d315d290a09090a09096f6c645f7074723d6e65775f7074720a090a09097472616e73616374696f6e5b2773697a65275d3d73697a650a0909626c6f636b5b27747873275d5b747869645d3d7472616e73616374696f6e0a090a0972657475726e20626c6f636b0a0a0a646566204f505f52455455524e5f756e7061636b5f74786e2862696e617279293a0a0972657475726e204f505f52455455524e5f756e7061636b5f74786e5f627566666572284f505f52455455524e5f6275666665722862696e61727929290a0a0a646566204f505f52455455524e5f756e7061636b5f74786e5f62756666657228627566666572293a0a0923207365653a2068747470733a2f2f656e2e626974636f696e2e69742f77696b692f5472616e73616374696f6e730a090a0974786e3d7b0a09092776696e273a205b5d2c0a090927766f7574273a205b5d2c0a097d0a090a0974786e5b2776657273696f6e275d3d6275666665722e73686966745f756e7061636b28342c20273c4c2729202320736d616c6c2d656e6469616e2033322d626974730a090a09696e707574733d6275666665722e73686966745f766172696e7428290a09696620696e707574733e3130303030303a20232073616e69747920636865636b0a090972657475726e204e6f6e650a090a09666f72205f20696e2072616e676528696e70757473293a0a0909696e7075743d7b7d0a09090a0909696e7075745b2774786964275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674283332295b3a3a2d315d290a0909696e7075745b27766f7574275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09096c656e6774683d6275666665722e73686966745f766172696e7428290a0909696e7075745b27736372697074536967275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674286c656e67746829290a0909696e7075745b2773657175656e6365275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a09090a090974786e5b2776696e275d2e617070656e6428696e707574290a09090a096f7574707574733d6275666665722e73686966745f766172696e7428290a096966206f7574707574733e3130303030303a20232073616e69747920636865636b0a090972657475726e204e6f6e650a09090a09666f72205f20696e2072616e6765286f757470757473293a0a09096f75747075743d7b7d0a09090a09096f75747075745b2776616c7565275d3d666c6f6174286275666665722e73686966745f75696e7436342829292f3130303030303030300a09096c656e6774683d6275666665722e73686966745f766172696e7428290a09096f75747075745b277363726970745075624b6579275d3d4f505f52455455524e5f62696e5f746f5f686578286275666665722e7368696674286c656e67746829290a09090a090974786e5b27766f7574275d2e617070656e64286f7574707574290a090a0974786e5b276c6f636b74696d65275d3d6275666665722e73686966745f756e7061636b28342c20273c4c27290a090a0972657475726e2074786e0a0a0a646566204f505f52455455524e5f66696e645f7370656e745f747869642874786e732c207370656e745f747869642c207370656e745f766f7574293a0a09666f7220747869642c2074786e5f756e7061636b656420696e2074786e732e6974656d7328293a0a0909666f7220696e70757420696e2074786e5f756e7061636b65645b2776696e275d3a0a09090969662028696e7075745b2774786964275d3d3d7370656e745f747869642920616e642028696e7075745b27766f7574275d3d3d7370656e745f766f7574293a0a0909090972657475726e20747869640a090909090a0972657475726e204e6f6e650a0a0a646566204f505f52455455524e5f66696e645f74786e5f646174612874786e5f756e7061636b6564293a0a09666f7220696e6465782c206f757470757420696e20656e756d65726174652874786e5f756e7061636b65645b27766f7574275d293a0a09096f705f72657475726e3d4f505f52455455524e5f6765745f7363726970745f64617461284f505f52455455524e5f6865785f746f5f62696e286f75747075745b277363726970745075624b6579275d29290a09090a09096966206f705f72657475726e3a0a09090972657475726e207b0a0909090927696e646578273a20696e6465782c0a09090909276f705f72657475726e273a206f705f72657475726e2c0a0909097d0a090a0972657475726e204e6f6e650a090a0a646566204f505f52455455524e5f6765745f7363726970745f64617461287363726970745075624b657942696e617279293a0a096f705f72657475726e3d4e6f6e650a090a096966207363726970745075624b657942696e6172795b303a315d3d3d62275c783661273a0a090966697273745f6f72643d6f7264287363726970745075624b657942696e6172795b313a325d290a09090a090969662066697273745f6f72643c3d37353a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b323a322b66697273745f6f72645d0a0909656c69662066697273745f6f72643d3d307834633a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b333a332b6f7264287363726970745075624b657942696e6172795b323a335d295d0a0909656c69662066697273745f6f72643d3d307834643a0a0909096f705f72657475726e3d7363726970745075624b657942696e6172795b343a342b6f7264287363726970745075624b657942696e6172795b323a335d292b3235362a6f7264287363726970745075624b657942696e6172795b333a345d295d0a090a0972657475726e206f705f72657475726e090a0a0a646566204f505f52455455524e5f7061636b5f74786e2874786e293a0a0962696e6172793d6227270a090a0962696e6172792b3d7374727563742e7061636b28273c4c272c2074786e5b2776657273696f6e275d290a090a0962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e74286c656e2874786e5b2776696e275d29290a090a09666f7220696e70757420696e2074786e5b2776696e275d3a0a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e28696e7075745b2774786964275d295b3a3a2d315d0a090962696e6172792b3d7374727563742e7061636b28273c4c272c20696e7075745b27766f7574275d290a090962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e7428696e74286c656e28696e7075745b27736372697074536967275d292f322929202320646976696465206279203220626563617573652069742069732063757272656e746c7920696e206865780a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e28696e7075745b27736372697074536967275d290a090962696e6172792b3d7374727563742e7061636b28273c4c272c20696e7075745b2773657175656e6365275d290a090a0962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e74286c656e2874786e5b27766f7574275d29290a090a09666f72206f757470757420696e2074786e5b27766f7574275d3a0a090962696e6172792b3d4f505f52455455524e5f7061636b5f75696e74363428696e7428726f756e64286f75747075745b2776616c7565275d2a3130303030303030302929290a090962696e6172792b3d4f505f52455455524e5f7061636b5f766172696e7428696e74286c656e286f75747075745b277363726970745075624b6579275d292f322929202320646976696465206279203220626563617573652069742069732063757272656e746c7920696e206865780a090962696e6172792b3d4f505f52455455524e5f6865785f746f5f62696e286f75747075745b277363726970745075624b6579275d290a090a0962696e6172792b3d7374727563742e7061636b28273c4c272c2074786e5b276c6f636b74696d65275d290a090a0972657475726e2062696e6172790a0a0a646566204f505f52455455524e5f7061636b5f766172696e7428696e7465676572293a0a09696620696e74656765723e307846464646464646463a0a09097061636b65643d225c784646222b4f505f52455455524e5f7061636b5f75696e74363428696e7465676572290a09656c696620696e74656765723e3078464646463a0a09097061636b65643d225c784645222b7374727563742e7061636b28273c4c272c20696e7465676572290a09656c696620696e74656765723e307846433a0a09097061636b65643d225c784644222b7374727563742e7061636b28273c48272c20696e7465676572290a09656c73653a0a09097061636b65643d7374727563742e7061636b282742272c20696e7465676572290a090a0972657475726e207061636b65640a0a0a646566204f505f52455455524e5f7061636b5f75696e74363428696e7465676572293a0a0975707065723d696e7428696e74656765722f34323934393637323936290a096c6f7765723d696e74656765722d75707065722a343239343936373239360a090a0972657475726e207374727563742e7061636b28273c4c272c206c6f776572292b7374727563742e7061636b28273c4c272c207570706572290a0a0a232048656c70657220636c61737320666f7220756e7061636b696e6720626974636f696e2062696e61727920646174610a0a636c617373204f505f52455455524e5f62756666657228293a0a0a09646566205f5f696e69745f5f2873656c662c20646174612c207074723d30293a0a090973656c662e646174613d646174610a090973656c662e6c656e3d6c656e2864617461290a090973656c662e7074723d7074720a09200a096465662073686966742873656c662c206368617273293a0a09097072656669783d73656c662e646174615b73656c662e7074723a73656c662e7074722b63686172735d0a090973656c662e7074722b3d63686172730a0a090972657475726e207072656669780a09200a096465662073686966745f756e7061636b2873656c662c2063686172732c20666f726d6174293a0a0909756e7061636b3d7374727563742e756e7061636b28666f726d61742c2073656c662e736869667428636861727329290a0a090972657475726e20756e7061636b5b305d0a0a096465662073686966745f766172696e742873656c66293a0a090976616c75653d73656c662e73686966745f756e7061636b28312c20274227290a0a090969662076616c75653d3d307846463a0a09090976616c75653d73656c662e73686966745f75696e74363428290a0909656c69662076616c75653d3d307846453a0a09090976616c75653d73656c662e73686966745f756e7061636b28342c20273c4c27290a0909656c69662076616c75653d3d307846443a0a09090976616c75653d73656c662e73686966745f756e7061636b28322c20273c4827290a090a090972657475726e2076616c75650a0a096465662073686966745f75696e7436342873656c66293a0a090972657475726e2073656c662e73686966745f756e7061636b28342c20273c4c27292b343239343936373239362a73656c662e73686966745f756e7061636b28342c20273c4c27290a090a0964656620757365642873656c66293a0a090972657475726e206d696e2873656c662e7074722c2073656c662e6c656e290a0a096465662072656d61696e696e672873656c66293a0a090972657475726e206d61782873656c662e6c656e2d73656c662e7074722c2030290a0a0a2320436f6e76657274696e672062696e617279203c2d3e2068657861646563696d616c0a0a646566204f505f52455455524e5f6865785f746f5f62696e28686578293a0a097472793a0a09097261773d62696e61736369692e6132625f68657828686578290a0965786365707420457863657074696f6e3a0a090972657475726e204e6f6e650a09090a0972657475726e207261770a090a0a646566204f505f52455455524e5f62696e5f746f5f68657828737472696e67293a0a0972657475726e2062696e61736369692e6232615f68657828737472696e67292e6465636f646528277574662d3827290a00000000",
    "blockhash": "0000000000cf9a82973b38d2579b7aafdd2c0ccdbc47dc3242b018398b3e8df3",
    "confirmations": 1023655,
    "time": 1447585510,
    "blocktime": 1447585510,
    "finalized": true
}

UTXOs


[
    null,
    null
]
hosted by bitcoinabc.org