0 txs
0 calls
constructor
constructor(uint256 newGlobalMakerFeePercent, uint256 newGlobalTakerFeePercent, address newFeesAddress, string newDomainName, string newDomainVersion)
functions
calculateMakerFees
viewfunction calculateMakerFees(address makerAsset, uint256 makerAmount) view returns (uint256)
calculateTakerFees
viewfunction calculateTakerFees(address takerAsset, uint256 takerAmount) view returns (uint256)
canCreateUnsignedOrder
viewfunction canCreateUnsignedOrder(address makerAddress, address makerAsset, uint256 makerAmount, bytes32 makerOrderId, address takerAddress, address takerAsset, uint256 takerAmount, uint256 expiryDate) view returns (bytes32)
canTakeOrder
viewfunction canTakeOrder(tuple order, bytes32 rTaker, bytes32 sTaker, uint8 vTaker) view returns (bool)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
fees
viewfunction fees(address) view returns (uint256 makerFee, uint256 takerFee, bool enabled)
feesAddress
viewfunction feesAddress() view returns (address)
globalMakerFeePercent
viewfunction globalMakerFeePercent() view returns (uint256)
globalTakerFeePercent
viewfunction globalTakerFeePercent() view returns (uint256)
hashSignedOrder
viewfunction hashSignedOrder(tuple unsignedOrder, bytes32 rMaker, bytes32 sMaker, uint8 vMaker) view returns (bytes32)
hashUnsignedOrder
viewfunction hashUnsignedOrder(address makerAddress, address makerAsset, uint256 makerAmount, bytes32 makerOrderId, address takerAddress, address takerAsset, uint256 takerAmount, uint256 expiryDate) view returns (bytes32)
isPaused
viewfunction isPaused() view returns (bool)
isWhitelistedToken
viewfunction isWhitelistedToken(address tokenAddr) view returns (bool)
MAX_ORDER_DURATION
viewfunction MAX_ORDER_DURATION() view returns (uint256)
owner
viewfunction owner() view returns (address)
cancelOrder
nonpayablefunction cancelOrder(tuple order)
disableToken
nonpayablefunction disableToken(address tokenAddr)
enableToken
nonpayablefunction enableToken(address tokenAddr)
enableTokenWithFees
nonpayablefunction enableTokenWithFees(address tokenAddr, uint256 newMakerFeePercent, uint256 newTakerFeePercent)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
setTokenFees
nonpayablefunction setTokenFees(address tokenAddr, uint256 newMakerFeePercent, uint256 newTakerFeePercent)
takeOrder
nonpayablefunction takeOrder(tuple order, bytes32 rTaker, bytes32 sTaker, uint8 vTaker)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateFeesAddress
nonpayablefunction updateFeesAddress(address newFeesAddress)
updateGlobalFees
nonpayablefunction updateGlobalFees(uint256 newGlobalMakerFeePercent, uint256 newGlobalTakerFeePercent)
events
EIP712DomainChanged
event EIP712DomainChanged()
OnContractPaused
event OnContractPaused()
OnContractUnpaused
event OnContractUnpaused()
OnFeesAddressUpdated
event OnFeesAddressUpdated()
OnGlobalFeesUpdated
event OnGlobalFeesUpdated(uint256 newGlobalMakerFeePercent, uint256 newGlobalTakerFeePercent)
OnOrderCancelled
event OnOrderCancelled(bytes32 unsignedOrderHash)
OnSwap
event OnSwap(bytes32 unsignedOrderHash)
OnTokenDisabled
event OnTokenDisabled(address tokenAddr)
OnTokenEnabled
event OnTokenEnabled(address tokenAddr, uint256 makerFeePercent, uint256 takerFeePercent)
OnTokenFeesUpdated
event OnTokenFeesUpdated(address tokenAddr, uint256 makerFeePercent, uint256 takerFeePercent)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
errors
InvalidShortString
error InvalidShortString()
StringTooLong
error StringTooLong(string str)
creation bytecode
0x6101606040523480156200001257600080fd5b5060405162006c3438038062006c348339818101604052810190620000389190620007bf565b818160016000819055506200006262000056620001ed60201b60201c565b620001f560201b60201c565b6200007d600583620002bb60201b620023f41790919060201c565b6101208181525050620000a0600682620002bb60201b620023f41790919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620000df6200031f60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200018f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018690620008e6565b60405180910390fd5b620001a185856200037c60201b60201c565b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505062000c37565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000602083511015620002e157620002d9836200045b60201b60201c565b905062000319565b82620002f883620004c860201b6200243f1760201c565b600001908051906020019062000310929190620004d2565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016200036195949392919062000945565b60405160208183030381529060405280519060200120905090565b6305f5e1008210620003c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003bc90620009f2565b60405180910390fd5b6305f5e10081106200040e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004059062000a64565b60405180910390fd5b81600281905550806003819055507f01ff5bc2f5c9d0eb16a7afb832c60fa176e2f06798534c001cb310f698f4a78c82826040516200044f92919062000a86565b60405180910390a15050565b600080829050601f81511115620004ab57826040517f305a27a9000000000000000000000000000000000000000000000000000000008152600401620004a2919062000aff565b60405180910390fd5b805181620004b99062000b62565b60001c1760001b915050919050565b6000819050919050565b828054620004e09062000c01565b90600052602060002090601f01602090048101928262000504576000855562000550565b82601f106200051f57805160ff191683800117855562000550565b8280016001018555821562000550579182015b828111156200054f57825182559160200191906001019062000532565b5b5090506200055f919062000563565b5090565b5b808211156200057e57600081600090555060010162000564565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620005ab8162000596565b8114620005b757600080fd5b50565b600081519050620005cb81620005a0565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005fe82620005d1565b9050919050565b6200061081620005f1565b81146200061c57600080fd5b50565b600081519050620006308162000605565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200068b8262000640565b810181811067ffffffffffffffff82111715620006ad57620006ac62000651565b5b80604052505050565b6000620006c262000582565b9050620006d0828262000680565b919050565b600067ffffffffffffffff821115620006f357620006f262000651565b5b620006fe8262000640565b9050602081019050919050565b60005b838110156200072b5780820151818401526020810190506200070e565b838111156200073b576000848401525b50505050565b6000620007586200075284620006d5565b620006b6565b9050828152602081018484840111156200077757620007766200063b565b5b620007848482856200070b565b509392505050565b600082601f830112620007a457620007a362000636565b5b8151620007b684826020860162000741565b91505092915050565b600080600080600060a08688031215620007de57620007dd6200058c565b5b6000620007ee88828901620005ba565b95505060206200080188828901620005ba565b945050604062000814888289016200061f565b935050606086015167ffffffffffffffff81111562000838576200083762000591565b5b62000846888289016200078c565b925050608086015167ffffffffffffffff8111156200086a576200086962000591565b5b62000878888289016200078c565b9150509295509295909350565b600082825260208201905092915050565b7f496e76616c696420466565732061646472657373000000000000000000000000600082015250565b6000620008ce60148362000885565b9150620008db8262000896565b602082019050919050565b600060208201905081810360008301526200090181620008bf565b9050919050565b6000819050919050565b6200091d8162000908565b82525050565b6200092e8162000596565b82525050565b6200093f81620005f1565b82525050565b600060a0820190506200095c600083018862000912565b6200096b602083018762000912565b6200097a604083018662000912565b62000989606083018562000923565b62000998608083018462000934565b9695505050505050565b7f496e76616c6964206d616b657220666565000000000000000000000000000000600082015250565b6000620009da60118362000885565b9150620009e782620009a2565b602082019050919050565b6000602082019050818103600083015262000a0d81620009cb565b9050919050565b7f496e76616c69642074616b657220666565000000000000000000000000000000600082015250565b600062000a4c60118362000885565b915062000a598262000a14565b602082019050919050565b6000602082019050818103600083015262000a7f8162000a3d565b9050919050565b600060408201905062000a9d600083018562000923565b62000aac602083018462000923565b9392505050565b600081519050919050565b600062000acb8262000ab3565b62000ad7818562000885565b935062000ae98185602086016200070b565b62000af48162000640565b840191505092915050565b6000602082019050818103600083015262000b1b818462000abe565b905092915050565b600081519050919050565b6000819050602082019050919050565b600062000b4c825162000908565b80915050919050565b600082821b905092915050565b600062000b6f8262000b23565b8262000b7b8462000b2e565b905062000b888162000b3e565b9250602082101562000bcb5762000bc67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262000b55565b831692505b5050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c1a57607f821691505b6020821081141562000c315762000c3062000bd2565b5b50919050565b60805160a05160c05160e051610100516101205161014051615fa262000c92600039600061195e0152600061192a01526000613cdf01526000613cbe015260006136ff015260006137550152600061377e0152615fa26000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80638da5cb5b116100f9578063bb64d49011610097578063d911c09011610071578063d911c09014610488578063ebd10e29146104b8578063f2fde38b146104d4578063faaebd21146104f0576101a9565b8063bb64d49014610432578063c66996bc1461044e578063c690908a1461046c576101a9565b80639fda84ed116100d35780639fda84ed14610396578063ab37f486146103b4578063b187bd26146103e4578063b6bf345e14610402576101a9565b80638da5cb5b1461033c57806391dd75e71461035a578063981a160b14610378576101a9565b806356171e7b11610166578063700b1ac511610140578063700b1ac5146102e8578063715018a6146103045780638456cb591461030e57806384b0196e14610318576101a9565b806356171e7b146102585780635ca7fc5f146102885780636efc479f146102b8576101a9565b80630c9b3406146101ae578063126990a4146101ca57806323e27a64146101e65780633f4ba83a1461020257806341b526001461020c5780634a40b72614610228575b600080fd5b6101c860048036038101906101c391906141da565b610522565b005b6101e460048036038101906101df919061422d565b610729565b005b61020060048036038101906101fb919061426d565b61079f565b005b61020a6108e6565b005b610226600480360381019061022191906141da565b610996565b005b610242600480360381019061023d919061432e565b610c0e565b60405161024f91906143b4565b60405180910390f35b610272600480360381019061026d91906143cf565b610d14565b60405161027f9190614494565b60405180910390f35b6102a2600480360381019061029d91906144cf565b6112aa565b6040516102af9190614494565b60405180910390f35b6102d260048036038101906102cd919061453a565b611374565b6040516102df9190614589565b60405180910390f35b61030260048036038101906102fd91906145a4565b6113f0565b005b61030c611852565b005b610316611866565b005b610320611917565b6040516103339796959493929190614773565b60405180910390f35b610344611a19565b60405161035191906147f7565b60405180910390f35b610362611a43565b60405161036f91906147f7565b60405180910390f35b610380611a69565b60405161038d9190614589565b60405180910390f35b61039e611a70565b6040516103ab9190614589565b60405180910390f35b6103ce60048036038101906103c9919061426d565b611a76565b6040516103db91906143b4565b60405180910390f35b6103ec611acf565b6040516103f991906143b4565b60405180910390f35b61041c6004803603810190610417919061453a565b611ae2565b6040516104299190614589565b60405180910390f35b61044c6004803603810190610447919061432e565b611b5e565b005b610456611e29565b6040516104639190614589565b60405180910390f35b6104866004803603810190610481919061426d565b611e2f565b005b6104a2600480360381019061049d91906143cf565b612021565b6040516104af9190614494565b60405180910390f35b6104d260048036038101906104cd919061426d565b612090565b005b6104ee60048036038101906104e9919061426d565b6122a1565b005b61050a6004803603810190610505919061426d565b6123bd565b60405161051993929190614812565b60405180910390f35b61052a612449565b610532612499565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166105c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b890614895565b60405180910390fd5b6305f5e1008210610607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fe90614901565b60405180910390fd5b6305f5e100811061064d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106449061496d565b60405180910390fd5b604051806060016040528083815260200182815260200160011515815250600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055509050507fd83fc9ab843eefe23cd17148aa776bc75332548917421bd9ac102b7b0b2127678383836040516107149392919061498d565b60405180910390a1610724612517565b505050565b610731612449565b600760149054906101000a900460ff1615610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077890614a10565b60405180910390fd5b610789612499565b6107938282612521565b61079b612517565b5050565b6107a7612449565b6107af612499565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1661083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083590614895565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff021916905550507f8c70f523aa5b049969418995ff0d34c0ff19203f1e2f82028904a69433b84260816040516108d391906147f7565b60405180910390a16108e3612517565b50565b6108ee612449565b600760149054906101000a900460ff1661093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093490614a7c565b60405180910390fd5b610945612499565b6000600760146101000a81548160ff0219169083151502179055507f9d8f62f82313d017f09243ab8d0fbf32ca519a5a5a6a9d807f18467b1ad3b85760405160405180910390a1610994612517565b565b61099e612449565b6109a6612499565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d90614ae8565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90614b54565b60405180910390fd5b6305f5e1008210610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae390614901565b60405180910390fd5b6305f5e1008110610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b299061496d565b60405180910390fd5b604051806060016040528083815260200182815260200160011515815250600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055509050507f28f66d78b273535a401bfb7ab02bb9ec45a331b25e51f75d9192c3e0acf1191e838383604051610bf99392919061498d565b60405180910390a1610c09612517565b505050565b6000600760149054906101000a900460ff1615610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790614a10565b60405180910390fd5b6000610c6f86338787876125f8565b9150506000610c9a876000016060016020810190610c8d919061426d565b8860000160200135611374565b90506000818860000160200135610cb19190614ba3565b90506000610cdb8960000160e0016020810190610cce919061426d565b8a60000160800135611ae2565b90506000818a60000160800135610cf29190614ba3565b9050610d038a600001848388612fb8565b600195505050505050949350505050565b60008087118015610d255750600083115b610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90614c45565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16148015610dcb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b8015610e045750600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a90614cb1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614d1d565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890614daf565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8790614e1b565b60405180910390fd5b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1661101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690614e87565b60405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590614ef3565b60405180910390fd5b4282116110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790614f5f565b60405180910390fd5b6203f48042836111009190614f7f565b1115611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113890614fff565b60405180910390fd5b6000801b861415611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e9061506b565b60405180910390fd5b600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002060009054906101000a900460ff1615611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906150d7565b60405180910390fd5b60006112378a8a8a8a8a8a8a8a612021565b90506009600082815260200190815260200160002060009054906101000a900460ff161561129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190615143565b60405180910390fd5b8091505098975050505050505050565b600061136a7f9fe805054e30e467df92d61724c26f30a5382ebb9bc16fa642e64205720ffb146113388760400160208101906112e6919061426d565b8860600160208101906112f9919061426d565b89602001358a600001358b60c0016020810190611316919061426d565b8c60e0016020810190611329919061426d565b8d608001358e60a00135612021565b86868660405160200161134f959493929190615172565b6040516020818303038152906040528051906020012061331e565b9050949350505050565b600080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081146113e4576305f5e10083826113d591906151c5565b6113df919061524e565b6113e7565b60005b91505092915050565b6113f8612449565b600760149054906101000a900460ff1615611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90614a10565b60405180910390fd5b80600001604001602081019061145e919061426d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c2906152cb565b60405180910390fd5b600061154d8260000160400160208101906114e6919061426d565b8360000160600160208101906114fc919061426d565b846000016020013585600001600001358660000160c0016020810190611522919061426d565b8760000160e0016020810190611538919061426d565b88600001608001358960000160a00135612021565b9050611578818361014001602081019061156791906152eb565b846101000135856101200135613338565b73ffffffffffffffffffffffffffffffffffffffff168260000160400160208101906115a4919061426d565b73ffffffffffffffffffffffffffffffffffffffff16146115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190615364565b60405180910390fd5b6009600082815260200190815260200160002060009054906101000a900460ff161561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290615143565b60405180910390fd5b60086000836000016040016020810190611675919061426d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008360000160000135815260200190815260200160002060009054906101000a900460ff1615611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c906150d7565b60405180910390fd5b428260000160a001351161175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590614f5f565b60405180910390fd5b60016009600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008460000160400160208101906117a6919061426d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008460000160000135815260200190815260200160002060006101000a81548160ff0219169083151502179055507f77b69113dd074b49efd3a6771dcf02ed6c07dad1f825c8b1a1c5a2c17ebd4ddb8160405161183e9190614494565b60405180910390a15061184f612517565b50565b61185a612499565b6118646000613363565b565b61186e612449565b600760149054906101000a900460ff16156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590614a10565b60405180910390fd5b6118c6612499565b6001600760146101000a81548160ff0219169083151502179055507fca68cefa7e3e9a1a73147be87b871a20359eb5c46d31dd19c3fed9b2725f775e60405160405180910390a1611915612517565b565b60006060806000806000606061195760057f000000000000000000000000000000000000000000000000000000000000000061342990919063ffffffff16565b61198b60067f000000000000000000000000000000000000000000000000000000000000000061342990919063ffffffff16565b46306000801b600067ffffffffffffffff8111156119ac576119ab615384565b5b6040519080825280602002602001820160405280156119da5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6203f48081565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050919050565b600760149054906101000a900460ff1681565b600080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008114611b52576305f5e1008382611b4391906151c5565b611b4d919061524e565b611b55565b60005b91505092915050565b611b66612449565b600760149054906101000a900460ff1615611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90614a10565b60405180910390fd5b600080611bc686338787876125f8565b91509150600060046000886000016060016020810190611be6919061426d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000808214611c56576305f5e100886000016020013583611c4791906151c5565b611c51919061524e565b611c59565b60005b90506000818960000160200135611c709190614ba3565b90506000600460008b60000160e0016020810190611c8e919061426d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000808214611cfe576305f5e1008b6000016080013583611cef91906151c5565b611cf9919061524e565b611d01565b60005b90506000818c60000160800135611d189190614ba3565b90506001600960008a815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008e6000016040016020810190611d62919061426d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e60000160000135815260200190815260200160002060006101000a81548160ff021916908315150217905550611ddc8c600001858388868c6134d9565b7fdd01808f194d5d88fbf3f9a897e6dd8fd69dc8847f8b05605c4393a5a37b842488604051611e0b9190614494565b60405180910390a15050505050505050611e23612517565b50505050565b60025481565b611e37612449565b611e3f612499565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea690614ae8565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690614b54565b60405180910390fd5b60405180606001604052806002548152602001600354815260200160011515815250600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055509050507f28f66d78b273535a401bfb7ab02bb9ec45a331b25e51f75d9192c3e0acf1191e8160025460035460405161200e9392919061498d565b60405180910390a161201e612517565b50565b60006120827f320c0a192153cc542f40dea6d22647724e5485dea836468805eac98048f300b987898c8c88888c8c604051602001612067999897969594939291906153b3565b6040516020818303038152906040528051906020012061331e565b905098975050505050505050565b612098612449565b600760149054906101000a900460ff16156120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90614a10565b60405180910390fd5b6120f0612499565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561215957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f9061548c565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612220906154f8565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe50e94f34cc9cc2c15697195c89b8d9bc77bba0db40902905ee3793d7f7181d760405160405180910390a161229e612517565b50565b6122a9612449565b600760149054906101000a900460ff16156122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f090614a10565b60405180910390fd5b612301612499565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561236a57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090615564565b60405180910390fd5b6123b281613363565b6123ba612517565b50565b60046020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16905083565b6000602083511015612410576124098361368b565b9050612439565b8261241a8361243f565b600001908051906020019061243092919061409e565b5060ff60001b90505b92915050565b6000819050919050565b6002600054141561248f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612486906155d0565b60405180910390fd5b6002600081905550565b6124a16136f3565b73ffffffffffffffffffffffffffffffffffffffff166124bf611a19565b73ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c9061563c565b60405180910390fd5b565b6001600081905550565b6305f5e1008210612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e90614901565b60405180910390fd5b6305f5e10081106125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a49061496d565b60405180910390fd5b81600281905550806003819055507f01ff5bc2f5c9d0eb16a7afb832c60fa176e2f06798534c001cb310f698f4a78c82826040516125ec92919061565c565b60405180910390a15050565b600080600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561266457503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156126b15750866000016040016020810190612681919061426d565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b6126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e7906156d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168760000160c001602081019061271e919061426d565b73ffffffffffffffffffffffffffffffffffffffff1614612754578660000160c001602081019061274f919061426d565b612756565b855b905060008760000160200135118015612776575060008760000160800135115b6127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90614c45565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168760000160400160208101906127e2919061426d565b73ffffffffffffffffffffffffffffffffffffffff16141580156128485750600073ffffffffffffffffffffffffffffffffffffffff1687600001604001602081019061282f919061426d565b73ffffffffffffffffffffffffffffffffffffffff1614155b612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e90614cb1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146128f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ec90614d1d565b60405180910390fd5b8660000160c001602081019061290b919061426d565b73ffffffffffffffffffffffffffffffffffffffff16876000016040016020810190612937919061426d565b73ffffffffffffffffffffffffffffffffffffffff16141561298e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298590614daf565b60405180910390fd5b8660000160e00160208101906129a4919061426d565b73ffffffffffffffffffffffffffffffffffffffff168760000160600160208101906129d0919061426d565b73ffffffffffffffffffffffffffffffffffffffff161415612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90614e1b565b60405180910390fd5b60046000886000016060016020810190612a41919061426d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16612acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac290614e87565b60405180910390fd5b600460008860000160e0016020810190612ae5919061426d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16612b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6690614ef3565b60405180910390fd5b612bef876000016040016020810190612b88919061426d565b886000016060016020810190612b9e919061426d565b89600001602001358a600001600001358b60000160c0016020810190612bc4919061426d565b8c60000160e0016020810190612bda919061426d565b8d600001608001358e60000160a00135612021565b9150612c1a8288610140016020810190612c0991906152eb565b8961010001358a6101200135613338565b73ffffffffffffffffffffffffffffffffffffffff16876000016040016020810190612c46919061426d565b73ffffffffffffffffffffffffffffffffffffffff1614612c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9390615364565b60405180910390fd5b428760000160a0013511612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc90614f5f565b60405180910390fd5b6203f480428860000160a00135612cfc9190614f7f565b1115612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490614fff565b60405180910390fd5b6000801b87600001600001351415612d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d819061506b565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900460ff1615612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290615143565b60405180910390fd5b60086000886000016040016020810190612e05919061426d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008860000160000135815260200190815260200160002060009054906101000a900460ff1615612ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9c906150d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168760000160c0016020810190612ed3919061426d565b73ffffffffffffffffffffffffffffffffffffffff1614612fae576000612f1c886000018961010001358a61012001358b610140016020810190612f1791906152eb565b6112aa565b9050612f2a81858888613338565b73ffffffffffffffffffffffffffffffffffffffff168860000160c0016020810190612f56919061426d565b73ffffffffffffffffffffffffffffffffffffffff1614612fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa39061573d565b60405180910390fd5b505b9550959350505050565b82846060016020810190612fcc919061426d565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e866040016020810190612ffa919061426d565b306040518363ffffffff1660e01b815260040161301892919061575d565b602060405180830381865afa158015613035573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613059919061579b565b101561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309190615814565b60405180910390fd5b818460e00160208101906130ae919061426d565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e83306040518363ffffffff1660e01b81526004016130e892919061575d565b602060405180830381865afa158015613105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613129919061579b565b101561316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190615880565b60405180910390fd5b8284606001602081019061317e919061426d565b73ffffffffffffffffffffffffffffffffffffffff166370a082318660400160208101906131ac919061426d565b6040518263ffffffff1660e01b81526004016131c891906147f7565b602060405180830381865afa1580156131e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613209919061579b565b101561324a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613241906158ec565b60405180910390fd5b818460e001602081019061325e919061426d565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161329691906147f7565b602060405180830381865afa1580156132b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d7919061579b565b1015613318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330f90615958565b60405180910390fd5b50505050565b600061333161332b6136fb565b836137b2565b9050919050565b6000806000613349878787876137f3565b91509150613356816138d6565b8192505050949350505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606060ff60001b83146134465761343f83613a44565b90506134d3565b818054613452906159a7565b80601f016020809104026020016040519081016040528092919081815260200182805461347e906159a7565b80156134cb5780601f106134a0576101008083540402835291602001916134cb565b820191906000526020600020905b8154815290600101906020018083116134ae57829003601f168201915b505050505090505b92915050565b6134e586868684612fb8565b61354a8660600160208101906134fb919061426d565b87604001602081019061350e919061426d565b876040518060400160405280601481526020017f4d616b6572206465706f736974206661696c6564000000000000000000000000815250613ab8565b61359d8660e0016020810190613560919061426d565b82866040518060400160405280601481526020017f54616b6572206465706f736974206661696c6564000000000000000000000000815250613ab8565b60008311156135e6576135e58660600160208101906135bc919061426d565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685613c13565b5b600082111561362f5761362e8660e0016020810190613605919061426d565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613c13565b5b6136628660e0016020810190613645919061426d565b876040016020810190613658919061426d565b8860800135613c13565b613683866060016020810190613678919061426d565b828860200135613c13565b505050505050565b600080829050601f815111156136d857826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016136cf91906159d9565b60405180910390fd5b8051816136e490615a38565b60001c1760001b915050919050565b600033905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561377757507f000000000000000000000000000000000000000000000000000000000000000046145b156137a4577f000000000000000000000000000000000000000000000000000000000000000090506137af565b6137ac613c99565b90505b90565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561382e5760006003915091506138cd565b6000600187878787604051600081526020016040526040516138539493929190615a9f565b6020604051602081039080840390855afa158015613875573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156138c4576000600192509250506138cd565b80600092509250505b94509492505050565b600060048111156138ea576138e9615ae4565b5b8160048111156138fd576138fc615ae4565b5b141561390857613a41565b6001600481111561391c5761391b615ae4565b5b81600481111561392f5761392e615ae4565b5b1415613970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396790615b5f565b60405180910390fd5b6002600481111561398457613983615ae4565b5b81600481111561399757613996615ae4565b5b14156139d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cf90615bcb565b60405180910390fd5b600360048111156139ec576139eb615ae4565b5b8160048111156139ff576139fe615ae4565b5b1415613a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3790615c5d565b60405180910390fd5b5b50565b60606000613a5183613d2f565b90506000602067ffffffffffffffff811115613a7057613a6f615384565b5b6040519080825280601f01601f191660200182016040528015613aa25781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613af391906147f7565b602060405180830381865afa158015613b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b34919061579b565b9050613b4285853086613d7f565b8281613b4e9190614ba3565b8573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613b8791906147f7565b602060405180830381865afa158015613ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc8919061579b565b148290613c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0291906159d9565b60405180910390fd5b505050505050565b613c948363a9059cbb60e01b8484604051602401613c32929190615c7d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e08565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001613d14959493929190615ca6565b60405160208183030381529060405280519060200120905090565b60008060ff8360001c169050601f811115613d76576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b613e02846323b872dd60e01b858585604051602401613da093929190615cf9565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e08565b50505050565b6000613e6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613ed09092919063ffffffff16565b9050600081511480613e8c575080806020019051810190613e8b9190615d5c565b5b613ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ec290615dfb565b60405180910390fd5b505050565b6060613edf8484600085613ee8565b90509392505050565b606082471015613f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2490615e8d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613f569190615ee9565b60006040518083038185875af1925050503d8060008114613f93576040519150601f19603f3d011682016040523d82523d6000602084013e613f98565b606091505b5091509150613fa987838387613fb5565b92505050949350505050565b606083156140185760008351141561401057613fd08561402b565b61400f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161400690615f4c565b60405180910390fd5b5b829050614023565b614022838361404e565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156140615781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409591906159d9565b60405180910390fd5b8280546140aa906159a7565b90600052602060002090601f0160209004810192826140cc5760008555614113565b82601f106140e557805160ff1916838001178555614113565b82800160010185558215614113579182015b828111156141125782518255916020019190600101906140f7565b5b5090506141209190614124565b5090565b5b8082111561413d576000816000905550600101614125565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061417182614146565b9050919050565b61418181614166565b811461418c57600080fd5b50565b60008135905061419e81614178565b92915050565b6000819050919050565b6141b7816141a4565b81146141c257600080fd5b50565b6000813590506141d4816141ae565b92915050565b6000806000606084860312156141f3576141f2614141565b5b60006142018682870161418f565b9350506020614212868287016141c5565b9250506040614223868287016141c5565b9150509250925092565b6000806040838503121561424457614243614141565b5b6000614252858286016141c5565b9250506020614263858286016141c5565b9150509250929050565b60006020828403121561428357614282614141565b5b60006142918482850161418f565b91505092915050565b600080fd5b600061016082840312156142b6576142b561429a565b5b81905092915050565b6000819050919050565b6142d2816142bf565b81146142dd57600080fd5b50565b6000813590506142ef816142c9565b92915050565b600060ff82169050919050565b61430b816142f5565b811461431657600080fd5b50565b60008135905061432881614302565b92915050565b6000806000806101c0858703121561434957614348614141565b5b60006143578782880161429f565b945050610160614369878288016142e0565b93505061018061437b878288016142e0565b9250506101a061438d87828801614319565b91505092959194509250565b60008115159050919050565b6143ae81614399565b82525050565b60006020820190506143c960008301846143a5565b92915050565b600080600080600080600080610100898b0312156143f0576143ef614141565b5b60006143fe8b828c0161418f565b985050602061440f8b828c0161418f565b97505060406144208b828c016141c5565b96505060606144318b828c016142e0565b95505060806144428b828c0161418f565b94505060a06144538b828c0161418f565b93505060c06144648b828c016141c5565b92505060e06144758b828c016141c5565b9150509295985092959890939650565b61448e816142bf565b82525050565b60006020820190506144a96000830184614485565b92915050565b600061010082840312156144c6576144c561429a565b5b81905092915050565b60008060008061016085870312156144ea576144e9614141565b5b60006144f8878288016144af565b94505061010061450a878288016142e0565b93505061012061451c878288016142e0565b92505061014061452e87828801614319565b91505092959194509250565b6000806040838503121561455157614550614141565b5b600061455f8582860161418f565b9250506020614570858286016141c5565b9150509250929050565b614583816141a4565b82525050565b600060208201905061459e600083018461457a565b92915050565b600061016082840312156145bb576145ba614141565b5b60006145c98482850161429f565b91505092915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b614607816145d2565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561464757808201518184015260208101905061462c565b83811115614656576000848401525b50505050565b6000601f19601f8301169050919050565b60006146788261460d565b6146828185614618565b9350614692818560208601614629565b61469b8161465c565b840191505092915050565b6146af81614166565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146ea816141a4565b82525050565b60006146fc83836146e1565b60208301905092915050565b6000602082019050919050565b6000614720826146b5565b61472a81856146c0565b9350614735836146d1565b8060005b8381101561476657815161474d88826146f0565b975061475883614708565b925050600181019050614739565b5085935050505092915050565b600060e082019050614788600083018a6145fe565b818103602083015261479a818961466d565b905081810360408301526147ae818861466d565b90506147bd606083018761457a565b6147ca60808301866146a6565b6147d760a0830185614485565b81810360c08301526147e98184614715565b905098975050505050505050565b600060208201905061480c60008301846146a6565b92915050565b6000606082019050614827600083018661457a565b614834602083018561457a565b61484160408301846143a5565b949350505050565b7f546f6b656e206e6f742077686974656c69737465640000000000000000000000600082015250565b600061487f601583614618565b915061488a82614849565b602082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f496e76616c6964206d616b657220666565000000000000000000000000000000600082015250565b60006148eb601183614618565b91506148f6826148b5565b602082019050919050565b6000602082019050818103600083015261491a816148de565b9050919050565b7f496e76616c69642074616b657220666565000000000000000000000000000000600082015250565b6000614957601183614618565b915061496282614921565b602082019050919050565b600060208201905081810360008301526149868161494a565b9050919050565b60006060820190506149a260008301866146a6565b6149af602083018561457a565b6149bc604083018461457a565b949350505050565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b60006149fa600f83614618565b9150614a05826149c4565b602082019050919050565b60006020820190508181036000830152614a29816149ed565b9050919050565b7f436f6e7472616374206e6f742070617573656400000000000000000000000000600082015250565b6000614a66601383614618565b9150614a7182614a30565b602082019050919050565b60006020820190508181036000830152614a9581614a59565b9050919050565b7f546f6b656e206164647265737320726571756972656400000000000000000000600082015250565b6000614ad2601683614618565b9150614add82614a9c565b602082019050919050565b60006020820190508181036000830152614b0181614ac5565b9050919050565b7f546f6b656e20616c726561647920656e61626c65640000000000000000000000600082015250565b6000614b3e601583614618565b9150614b4982614b08565b602082019050919050565b60006020820190508181036000830152614b6d81614b31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bae826141a4565b9150614bb9836141a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bee57614bed614b74565b5b828201905092915050565b7f4f7264657220616d6f756e747320726571756972656400000000000000000000600082015250565b6000614c2f601683614618565b9150614c3a82614bf9565b602082019050919050565b60006020820190508181036000830152614c5e81614c22565b9050919050565b7f496e76616c6964206d616b657220616464726573730000000000000000000000600082015250565b6000614c9b601583614618565b9150614ca682614c65565b602082019050919050565b60006020820190508181036000830152614cca81614c8e565b9050919050565b7f496e76616c69642074616b657220616464726573730000000000000000000000600082015250565b6000614d07601583614618565b9150614d1282614cd1565b602082019050919050565b60006020820190508181036000830152614d3681614cfa565b9050919050565b7f4d616b657220616e642074616b65722063616e6e6f742062652074686520736160008201527f6d65000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d99602283614618565b9150614da482614d3d565b604082019050919050565b60006020820190508181036000830152614dc881614d8c565b9050919050565b7f496e76616c69642073796e746865746963207061697200000000000000000000600082015250565b6000614e05601683614618565b9150614e1082614dcf565b602082019050919050565b60006020820190508181036000830152614e3481614df8565b9050919050565b7f4d616b6572206173736574206e6f742077686974656c69737465640000000000600082015250565b6000614e71601b83614618565b9150614e7c82614e3b565b602082019050919050565b60006020820190508181036000830152614ea081614e64565b9050919050565b7f54616b6572206173736574206e6f742077686974656c69737465640000000000600082015250565b6000614edd601b83614618565b9150614ee882614ea7565b602082019050919050565b60006020820190508181036000830152614f0c81614ed0565b9050919050565b7f4f72646572206578706972656400000000000000000000000000000000000000600082015250565b6000614f49600d83614618565b9150614f5482614f13565b602082019050919050565b60006020820190508181036000830152614f7881614f3c565b9050919050565b6000614f8a826141a4565b9150614f95836141a4565b925082821015614fa857614fa7614b74565b5b828203905092915050565b7f457870697279206461746520746f6f206c6f6e67000000000000000000000000600082015250565b6000614fe9601483614618565b9150614ff482614fb3565b602082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b7f4d616b6572204f72646572204944207265717569726564000000000000000000600082015250565b6000615055601783614618565b91506150608261501f565b602082019050919050565b6000602082019050818103600083015261508481615048565b9050919050565b7f4d616b657220494420616c726561647920757365640000000000000000000000600082015250565b60006150c1601583614618565b91506150cc8261508b565b602082019050919050565b600060208201905081810360008301526150f0816150b4565b9050919050565b7f4f7264657220616c72656164792074616b656e00000000000000000000000000600082015250565b600061512d601383614618565b9150615138826150f7565b602082019050919050565b6000602082019050818103600083015261515c81615120565b9050919050565b61516c816142f5565b82525050565b600060a0820190506151876000830188614485565b6151946020830187614485565b6151a16040830186614485565b6151ae6060830185614485565b6151bb6080830184615163565b9695505050505050565b60006151d0826141a4565b91506151db836141a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561521457615213614b74565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615259826141a4565b9150615264836141a4565b9250826152745761527361521f565b5b828204905092915050565b7f496e76616c6964206d616b657200000000000000000000000000000000000000600082015250565b60006152b5600d83614618565b91506152c08261527f565b602082019050919050565b600060208201905081810360008301526152e4816152a8565b9050919050565b60006020828403121561530157615300614141565b5b600061530f84828501614319565b91505092915050565b7f496e76616c6964206d616b6572207369676e6174757265000000000000000000600082015250565b600061534e601783614618565b915061535982615318565b602082019050919050565b6000602082019050818103600083015261537d81615341565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000610120820190506153c9600083018c614485565b6153d6602083018b614485565b6153e3604083018a61457a565b6153f060608301896146a6565b6153fd60808301886146a6565b61540a60a083018761457a565b61541760c083018661457a565b61542460e08301856146a6565b6154326101008301846146a6565b9a9950505050505050505050565b7f496e76616c696420466565732061646472657373000000000000000000000000600082015250565b6000615476601483614618565b915061548182615440565b602082019050919050565b600060208201905081810360008301526154a581615469565b9050919050565b7f46656573206164647265737320616c7265616479207365740000000000000000600082015250565b60006154e2601883614618565b91506154ed826154ac565b602082019050919050565b60006020820190508181036000830152615511816154d5565b9050919050565b7f496e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b600061554e600d83614618565b915061555982615518565b602082019050919050565b6000602082019050818103600083015261557d81615541565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006155ba601f83614618565b91506155c582615584565b602082019050919050565b600060208201905081810360008301526155e9816155ad565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615626602083614618565b9150615631826155f0565b602082019050919050565b6000602082019050818103600083015261565581615619565b9050919050565b6000604082019050615671600083018561457a565b61567e602083018461457a565b9392505050565b7f496e76616c69642073656e646572000000000000000000000000000000000000600082015250565b60006156bb600e83614618565b91506156c682615685565b602082019050919050565b600060208201905081810360008301526156ea816156ae565b9050919050565b7f496e76616c69642074616b6572207369676e6174757265000000000000000000600082015250565b6000615727601783614618565b9150615732826156f1565b602082019050919050565b600060208201905081810360008301526157568161571a565b9050919050565b600060408201905061577260008301856146a6565b61577f60208301846146a6565b9392505050565b600081519050615795816141ae565b92915050565b6000602082840312156157b1576157b0614141565b5b60006157bf84828501615786565b91505092915050565b7f496e73756666696369656e7420616c6c6f77616e63653a206d616b6572000000600082015250565b60006157fe601d83614618565b9150615809826157c8565b602082019050919050565b6000602082019050818103600083015261582d816157f1565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e63653a2074616b6572000000600082015250565b600061586a601d83614618565b915061587582615834565b602082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f496e73756666696369656e742062616c616e63653a206d616b65720000000000600082015250565b60006158d6601b83614618565b91506158e1826158a0565b602082019050919050565b60006020820190508181036000830152615905816158c9565b9050919050565b7f496e73756666696369656e742062616c616e63653a2074616b65720000000000600082015250565b6000615942601b83614618565b915061594d8261590c565b602082019050919050565b6000602082019050818103600083015261597181615935565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806159bf57607f821691505b602082108114156159d3576159d2615978565b5b50919050565b600060208201905081810360008301526159f3818461466d565b905092915050565b600081519050919050565b6000819050602082019050919050565b6000615a2282516142bf565b80915050919050565b600082821b905092915050565b6000615a43826159fb565b82615a4d84615a06565b9050615a5881615a16565b92506020821015615a9857615a937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615a2b565b831692505b5050919050565b6000608082019050615ab46000830187614485565b615ac16020830186615163565b615ace6040830185614485565b615adb6060830184614485565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000615b49601883614618565b9150615b5482615b13565b602082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615bb5601f83614618565b9150615bc082615b7f565b602082019050919050565b60006020820190508181036000830152615be481615ba8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c47602283614618565b9150615c5282615beb565b604082019050919050565b60006020820190508181036000830152615c7681615c3a565b9050919050565b6000604082019050615c9260008301856146a6565b615c9f602083018461457a565b9392505050565b600060a082019050615cbb6000830188614485565b615cc86020830187614485565b615cd56040830186614485565b615ce2606083018561457a565b615cef60808301846146a6565b9695505050505050565b6000606082019050615d0e60008301866146a6565b615d1b60208301856146a6565b615d28604083018461457a565b949350505050565b615d3981614399565b8114615d4457600080fd5b50565b600081519050615d5681615d30565b92915050565b600060208284031215615d7257615d71614141565b5b6000615d8084828501615d47565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615de5602a83614618565b9150615df082615d89565b604082019050919050565b60006020820190508181036000830152615e1481615dd8565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000615e77602683614618565b9150615e8282615e1b565b604082019050919050565b60006020820190508181036000830152615ea681615e6a565b9050919050565b600081905092915050565b6000615ec3826159fb565b615ecd8185615ead565b9350615edd818560208601614629565b80840191505092915050565b6000615ef58284615eb8565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615f36601d83614618565b9150615f4182615f00565b602082019050919050565b60006020820190508181036000830152615f6581615f29565b905091905056fea2646970667358221220944dea94021735eb11675f5a8db6b9ebfa544a65b4a7132d8ca75793726030e664736f6c634300080a003300000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000c692d583567cda0fde14cd3d6136c2623202ed6800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000114f5443205377617020417262697472756d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003312e300000000000000000000000000000000000000000000000000000000000