@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 637 kB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_settle_balanceInPool_shouldNotApplyDelta","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_failsWithNativeERC20IfNotSyncedInOrder","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_native_afterERC20Sync_succeeds","inputs":[{"name":"currency2Balance","type":"uint256","internalType":"uint256"},{"name":"ethBalance","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_noBalanceInPool_shouldNotApplyDelta","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_nonNative_withoutSync_loseFunds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_payOnBehalf","inputs":[{"name":"taker","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_twice_doesNotApplyDelta","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_withNoStartingBalance","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_settle_withStartingBalance","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_sync_balanceIsNonzero","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_sync_balanceIsZero","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_sync_multiple_unlocked","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60806040523461016457600160ff19600c541617600c55600160ff19601f541617601f555f606061002e610168565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a610168565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176101505760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e17905560438054909216614000600160a01b0317909155516201eb789081620001888239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b038111838210176101505760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630a9254e41461385d575080630cad91831461320d5780631b10c81b14612a995780631ed7831c146129f057806327657a91146125405780632ade3880146123145780633965b4a11461204b57806339cd201314611fea5780633a347ba714611e035780633e5e3c2314611d5a5780633f7286f414611cb1578063542524dd14611c6457806366d9a9a014611b09578063761c1a081461189c57806385226c81146117f4578063916a17c61461171f57806393ad73ed146116ba578063b0464fdc146115e5578063b1a73b8a1461157d578063b41ceac5146113bc578063b5508aa914611314578063ba414fa6146112d1578063c296736f14611163578063c3895d4214610ede578063c7b8e15d14610ea0578063c8d6d76314610b71578063cbbf460314610779578063e20c9f71146106c0578063e743863f146101b15763fa7626d40361000f57346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57602060ff601f54166040519015158152f35b80fd5b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5773ffffffffffffffffffffffffffffffffffffffff604454169073ffffffffffffffffffffffffffffffffffffffff602b54166102256102208285615cb7565b615e0c565b60295473ffffffffffffffffffffffffffffffffffffffff16838110156106a057829173ffffffffffffffffffffffffffffffffffffffff602092955b816040519761027089614f34565b1687521682860152610bb86040860152603c606086015282608086015260c4604051809481937f6276cbbe000000000000000000000000000000000000000000000000000000008352610310600484018a73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af180156105f957610673575b5073ffffffffffffffffffffffffffffffffffffffff602c5416604051608081019381851067ffffffffffffffff8611176106465783946040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc482526020820191603c835260408101936064855261046d8660608401948186526104a06020988997604051916103c18a84614f50565b8583527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a01368b8501376040519a8b998a9889977f5a6bcfda000000000000000000000000000000000000000000000000000000008952600489019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b5160020b60a48701525160020b60c48601525160e485015251610104840152610140610124840152610144830190614d5f565b03925af1801561063b57610609575b5073ffffffffffffffffffffffffffffffffffffffff60445416906104ec73ffffffffffffffffffffffffffffffffffffffff602b541683615cb7565b604051916104fb606084614f50565b600283526040368285013761050e615019565b93600561051a856150ca565b526040519082820152818152610531604082614f50565b61053a856150ca565b52610544846150ca565b50600961055084615104565b5260405191818301528152610566604082614f50565b61056f83615104565b5261057982615104565b5073ffffffffffffffffffffffffffffffffffffffff6032541691823b15610604576105d7928492836040518096819582947f5ef243140000000000000000000000000000000000000000000000000000000084526004840161519a565b03925af180156105f9576105e85750f35b816105f291614f50565b6101ae5780f35b6040513d84823e3d90fd5b505050fd5b91508082813d8311610634575b6106208183614f50565b81010312610630578291516104af565b5f80fd5b503d610616565b6040513d85823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6106949060203d602011610699575b61068c8183614f50565b81019061575f565b610330565b503d610682565b829160209173ffffffffffffffffffffffffffffffffffffffff90610262565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b81811061074d576107498561073d81870382614f50565b60405191829182614d10565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610726565b50346101ae5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57806f3fffffffffffffffffffffffffffffff6107d36107ca82600435615be8565b91602435615be8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b62576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815230600482015260248101829052838160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610b66578491610b4d575b505061088a8273ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff602b5416906160e2565b604051917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101206108bc8186614f50565b60088552013660208501376108cf615071565b9060096108db856150ca565b52604051856020820152602081526108f4604082614f50565b6108fd836150ca565b52610907826150ca565b50600561091385615104565b5273ffffffffffffffffffffffffffffffffffffffff6044541660405190602082015260208152610945604082614f50565b61094e83615104565b5261095882615104565b50600961096485615114565b526040519060208201526020815261097d604082614f50565b61098682615114565b5261099081615114565b50600561099c84615124565b52604051846020820152602081526109b5604082614f50565b6109be82615124565b526109c881615124565b5060096109d484615134565b52604051846020820152602081526109ed604082614f50565b6109f682615134565b52610a0081615134565b506001610a0c84615144565b5260405182602082015260208152610a25604082614f50565b610a2e82615144565b52610a3881615144565b50600a610a4484615154565b52603254604080515f602082015273ffffffffffffffffffffffffffffffffffffffff9092169082018190526060820184905290610aad81608081015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614f50565b610ab683615154565b52610ac082615154565b506003610acc85615164565b52604080515f6020820152309181019190915260608101849052610af38160808101610a81565b610afc83615164565b52610b0682615164565b50803b15610b49576105d79385936040518096819582947f5ef243140000000000000000000000000000000000000000000000000000000084526004840161519a565b8480fd5b81610b5791614f50565b610b6257825f61084c565b5050fd5b6040513d86823e3d90fd5b50346101ae5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5780610bbe6f3fffffffffffffffffffffffffffffff600435615be8565b610bfa8173ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff602b5416906160e2565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610120610c2b8184614f50565b6008835201366020830137610c3e615071565b6005610c49836150ca565b5273ffffffffffffffffffffffffffffffffffffffff604454169260405184602082015260208152610c7c604082614f50565b610c85836150ca565b52610c8f826150ca565b506009610c9b84615104565b5260405181602082015260208152610cb4604082614f50565b610cbd83615104565b52610cc782615104565b50600c610cd384615114565b52602b546040805173ffffffffffffffffffffffffffffffffffffffff878116602083015230928201929092529116606082015260808101829052610d1b8160a08101610a81565b610d2483615114565b52610d2e82615114565b5084610d3984615124565b52600a610d4584615134565b52610dfa73ffffffffffffffffffffffffffffffffffffffff6032541694604051610da281610a81868a866020850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b610dab85615134565b52610db584615134565b506003610dc186615144565b526040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152309082015260608101929092528160808101610a81565b610e0382615144565b52610e0d81615144565b5083610e1883615154565b52600a610e2483615164565b5260405184602082015283604082015284606082015260608152610e49608082614f50565b610e5282615164565b52610e5c81615164565b50823b15610604576105d7928492836040518096819582947f5ef243140000000000000000000000000000000000000000000000000000000084526004840161519a565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5760206040516401000276a48152f35b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57333014610fba5780806040513682823780368101838152039082305af13d15610fb5573d67ffffffffffffffff8111610f885760405190610f76601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200183614f50565b81528260203d92013e5b156101ae5780f35b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b610f80565b8073ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff602a5416813b15610b625782916024839260405194859384927fa584119400000000000000000000000000000000000000000000000000000000845260048401525af180156105f95761114e575b5073ffffffffffffffffffffffffffffffffffffffff602a541661109373ffffffffffffffffffffffffffffffffffffffff602b54169173ffffffffffffffffffffffffffffffffffffffff61108c84615f78565b1690616053565b73ffffffffffffffffffffffffffffffffffffffff60295416813b15610b625782916024839260405194859384927fa584119400000000000000000000000000000000000000000000000000000000845260048401525af180156105f957611139575b505061113673ffffffffffffffffffffffffffffffffffffffff6029541673ffffffffffffffffffffffffffffffffffffffff61108c81602b5416615f78565b80f35b8161114391614f50565b6101ae57805f6110f6565b8161115891614f50565b6101ae57805f611037565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57806112be73ffffffffffffffffffffffffffffffffffffffff604454166111d461022073ffffffffffffffffffffffffffffffffffffffff602b541683615cb7565b604051906111e360a083614f50565b6004825260803660208401376111f7614fc1565b906005611203846150ca565b526040518160208201526020815261121c604082614f50565b611225836150ca565b5261122f826150ca565b50600961123b84615104565b5260405185602082015260208152611254604082614f50565b61125d83615104565b5261126782615104565b508461127284615114565b52600a61127e84615124565b526032546040805173ffffffffffffffffffffffffffffffffffffffff9384166020820152929091169082018190525f6060830152938160808101610a81565b6112c782615124565b52610e5c81615124565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57602061130a615686565b6040519015158152f35b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5760195461134f81614fa9565b9161135d6040519384614f50565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061139f57604051806107498782614df7565b6001602081926113ae856152df565b81520192019201919061138a565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae578073ffffffffffffffffffffffffffffffffffffffff6044541661142a61022073ffffffffffffffffffffffffffffffffffffffff602b541683615cb7565b604051611438606082614f50565b60028152604036602083013761144c615019565b916005611458836150ca565b5260405190602082015260208152611471604082614f50565b61147a836150ca565b52611484826150ca565b50600961149082615104565b52604051836020820152602081526114a9604082614f50565b6114b283615104565b526114bc82615104565b5073ffffffffffffffffffffffffffffffffffffffff6032541691823b156106045761151a928492836040518096819582947f5ef243140000000000000000000000000000000000000000000000000000000084526004840161519a565b03925af180156105f957611568575b5061113661022073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff602b541690615cb7565b8161157291614f50565b6101ae57805f611529565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57601c5461162081614fa9565b9161162e6040519384614f50565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061167057604051806107498782614e74565b6002602060019260405161168381614f18565b73ffffffffffffffffffffffffffffffffffffffff86541681526116a88587016153e2565b8382015281520192019201919061165b565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57601d5461175a81614fa9565b916117686040519384614f50565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106117aa57604051806107498782614e74565b600260206001926040516117bd81614f18565b73ffffffffffffffffffffffffffffffffffffffff86541681526117e28587016153e2565b83820152815201920192019190611795565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57601a5461182f81614fa9565b9161183d6040519384614f50565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061187f57604051806107498782614df7565b60016020819261188e856152df565b81520192019201919061186a565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae578073ffffffffffffffffffffffffffffffffffffffff6029541661191061190b73ffffffffffffffffffffffffffffffffffffffff602b54168093615cb7565b615f02565b611a8f6040519161192083614f18565b8383526119366102206020850192868452615d65565b73ffffffffffffffffffffffffffffffffffffffff602f541692602093849286604051936119648686614f50565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086013687870137604051968795869485937f2229d0b4000000000000000000000000000000000000000000000000000000008552611a366004860173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b60ff60265416151560a486015260275460c486015273ffffffffffffffffffffffffffffffffffffffff6028541660e4860152511515610104850152511515610124840152610160610144840152610164830190614d5f565b03925af1801561063b57611adb575b5073ffffffffffffffffffffffffffffffffffffffff60295416906104ec73ffffffffffffffffffffffffffffffffffffffff602b541683615cb7565b91508082813d8311611b02575b611af28183614f50565b8101031261063057829151611a9e565b503d611ae8565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57601b54611b4481614fa9565b611b516040519182614f50565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611c2957868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210611bbe57505050500390f35b91936020611c19827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083611c098351604084526040840190614d5f565b9201519084818403910152614da2565b9601920192018594939192611baf565b60026020600192604051611c3c81614f18565b611c45866152df565b8152611c528587016153e2565b83820152815201920192019190611b81565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57602060405173fffd8963efd1fc6a506488495d951d5263988d258152f35b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110611d2e576107498561073d81870382614f50565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611d17565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110611dd7576107498561073d81870382614f50565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611dc0565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5773ffffffffffffffffffffffffffffffffffffffff6029541690611e6e73ffffffffffffffffffffffffffffffffffffffff602b541683615cb7565b91611e7883615f02565b60405190611e8760c083614f50565b6005825260a03660208401376040519360c0611ea38187614f50565b600586527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001845b818110611fac578580611f99878a88886009611ee6856150ca565b5260405186602082015260208152611eff604082614f50565b611f08846150ca565b52611f12836150ca565b506005611f1e85615104565b5260405182602082015260208152611f37604082614f50565b611f4084615104565b52611f4a83615104565b506009611f5685615114565b5260405190602082015260208152611f6f604082614f50565b611f7883615114565b52611f8282615114565b5084611f8d84615124565b52600a61127e84615134565b611fa282615134565b52610e5c81615134565b806060602080938a01015201611ecb565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae578073ffffffffffffffffffffffffffffffffffffffff602954166120b673ffffffffffffffffffffffffffffffffffffffff602b541682615cb7565b906120c082615f02565b6040516120ce60a082614f50565b6004815260803660208301376120e2614fc1565b9160096120ee836150ca565b5260405185602082015260208152612107604082614f50565b612110846150ca565b5261211a836150ca565b50600561212683615104565b526040519060208201526020815261213f604082614f50565b61214883615104565b5261215282615104565b50600961215e82615114565b5260405183602082015260208152612177604082614f50565b61218083615114565b5261218a82615114565b5073ffffffffffffffffffffffffffffffffffffffff6032541691823b15610b49576121e8928592836040518096819582947f5ef243140000000000000000000000000000000000000000000000000000000084526004840161519a565b03925af190811561063b5783916122fc575b505061223773ffffffffffffffffffffffffffffffffffffffff6029541673ffffffffffffffffffffffffffffffffffffffff602b541690615cb7565b60405191612246604084614f50565b601183527f62616c616e6365206e6f7420657175616c0000000000000000000000000000006020840152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106045783916122d660405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190614d5f565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105f9576105e85750f35b8161230691614f50565b61231157815f6121fa565b50fd5b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae57601e5461234f81614fa9565b61235c6040519182614f50565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106124aa5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106123c85786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110612461575050505050602080600192970193019301909286959492936123bb565b909192939460208061249d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951614d5f565b970195019392910161243d565b6040516124b681614f18565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546124df81614fa9565b916124ed6040519384614f50565b8183528a526020808b20908b9084015b83821061252357505050506001928260209283600295015281520192019201919061238c565b600160208192612532866152df565b8152019301910190916124fd565b50346101ae5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5761258c6f3fffffffffffffffffffffffffffffff600435615be8565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101ae576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815230600482015260248101839052818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156105f9579082916129db575b505073ffffffffffffffffffffffffffffffffffffffff602b5416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156129d7576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260248101839052818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156105f9579082916129c2575b5050604051611b1c8082019082821067ffffffffffffffff831117610646579082916200ffde8339039082f080156129b55773ffffffffffffffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff602b541690604051917f70a082310000000000000000000000000000000000000000000000000000000083526004830152602082602481875afa91821561063b578392612981575b5060405191612768608084614f50565b6003835260603660208501376040519460806127848188614f50565b600387527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001855b8181106129705750509084959160056127c4866150ca565b52604051906020820152602081526127dd604082614f50565b6127e6836150ca565b526127f0826150ca565b5060096127fc85615104565b5260405190602082015260208152612815604082614f50565b61281e82615104565b5261282881615104565b50600161283484615114565b526040518260208201526020815261284d604082614f50565b61285682615114565b5261286081615114565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610604576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb0ec849e000000000000000000000000000000000000000000000000000000006004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612965578591612950575b505073ffffffffffffffffffffffffffffffffffffffff60325416803b15610b49576105d79385936040518096819582947f5ef243140000000000000000000000000000000000000000000000000000000084526004840161519a565b8161295a91614f50565b61060457835f6128f3565b6040513d87823e3d90fd5b806060602080938b010152016127ac565b9091506020813d6020116129ad575b8161299d60209383614f50565b810103126106305751905f612758565b3d9150612990565b50604051903d90823e3d90fd5b816129cc91614f50565b6101ae57805f6126b2565b5080fd5b816129e591614f50565b6101ae57805f612606565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110612a6d576107498561073d81870382614f50565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612a56565b50346101ae57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae5780602073ffffffffffffffffffffffffffffffffffffffff60295416604473ffffffffffffffffffffffffffffffffffffffff6032541660405194859384927f095ea7b300000000000000000000000000000000000000000000000000000000845260048401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248401525af180156105f9576131e0575b5073ffffffffffffffffffffffffffffffffffffffff60295416612ba9612ba173ffffffffffffffffffffffffffffffffffffffff602b541683615cb7565b913090615cb7565b906101407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060405191612bdc8184614f50565b600983520136602083013760405190610140612bf88184614f50565b600983528591907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825b8181106131ca575050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156129d7576040517f3cad9d7b00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f67657452657365727665730000000000000000000000000000000000000000006044820152828160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561063b5783916131b5575b5050612cef73ffffffffffffffffffffffffffffffffffffffff602b5416615d65565b926040517ff6402eda00000000000000000000000000000000000000000000000000000000815260208160048187737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610b665761317c575b50612d4d61300d9394615e0c565b6003612d58836150ca565b5273ffffffffffffffffffffffffffffffffffffffff60295416604051816020820152306040820152600a606082015260608152612d97608082614f50565b612da0836150ca565b52612daa826150ca565b50600a612db684615104565b5273ffffffffffffffffffffffffffffffffffffffff603254169384916040518160208201528360408201527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6606082015260608152612e17608082614f50565b612e2085615104565b52612e2a84615104565b50600c612e3686615114565b52610a81612fa673ffffffffffffffffffffffffffffffffffffffff602b5416604051612e9e81610a818430896020850173ffffffffffffffffffffffffffffffffffffffff606092959481600a958160808601991685521660208401521660408201520152565b612ea788615114565b52612eb187615114565b5089612ebc89615124565b52600a612ec889615134565b526040518460208201528660408201527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6606082015260608152612f0d608082614f50565b612f1688615134565b52612f2087615134565b506005612f2c89615144565b5260405184602082015260208152612f45604082614f50565b612f4e88615144565b52612f5887615144565b50600c612f6489615154565b526040805173ffffffffffffffffffffffffffffffffffffffff8087166020830152309282019290925291166060820152600a608082015291829060a0820190565b612faf85615154565b52612fb984615154565b5086612fc486615164565b52600a612fd086615175565b52610a816040519384926020840160409073ffffffffffffffffffffffffffffffffffffffff5f9395948160608401971683521660208201520152565b61301682615175565b5261302081615175565b50823b1561317857613064928492836040518096819582947f5ef243140000000000000000000000000000000000000000000000000000000084526004840161519a565b03925af180156105f95761315f575b505073ffffffffffffffffffffffffffffffffffffffff60295416906130b173ffffffffffffffffffffffffffffffffffffffff602b541683615cb7565b600a8201809211613132576130d192916130ca91615e8c565b3090615cb7565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68201918211613105579061113691615e8c565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161316991614f50565b61317457825f613073565b8280fd5b8380fd5b9392506020843d6020116131ad575b8161319860209383614f50565b81010312610630579192508591612d4d612d3f565b3d915061318b565b816131bf91614f50565b6129d757815f612ccc565b6060602082870181019190915288945001612c23565b6132019060203d602011613206575b6131f98183614f50565b810190614f91565b612b62565b503d6131ef565b50346101ae5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ae576004359073ffffffffffffffffffffffffffffffffffffffff82168083036129d75773ffffffffffffffffffffffffffffffffffffffff60325416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15613174576040517f4c63e5620000000000000000000000000000000000000000000000000000000081528183141560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610b6657908491613848575b505061330c6f7fffffffffffffffffffffffffffffff600160243561640d565b93836020604093828086516133218882614f50565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000008582015287516133bd818d61338b898301957fb60e72cc0000000000000000000000000000000000000000000000000000000087528d60248501526064840190614d5f565b906044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614f50565b51906a636f6e736f6c652e6c6f675afa50604473ffffffffffffffffffffffffffffffffffffffff81541691865194859384927f095ea7b300000000000000000000000000000000000000000000000000000000845260048401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248401525af1801561381d5761382b575b5073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff602b5416813b156138275783517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481018790529085908290604490829084905af1801561381d57908591613808575b50508151906134fb60e083614f50565b6006825260c036602084013782519360e06135168187614f50565b600686527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001865b8181106137f75750506004613552846150ca565b52604454845173ffffffffffffffffffffffffffffffffffffffff918216602082018190529184166040820181905260608201526080810189905290979061359d8160a08101610a81565b6135a6876150ca565b526135b0866150ca565b50600a6135bc85615104565b528087038181057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14821517156137ca579187989161373e938751908460208301528389830152606082015260608152613617608082614f50565b61362089615104565b5261362a88615104565b50600561363687615114565b5286518360208201526020815261364d8882614f50565b61365689615114565b5261366088615114565b50600c61366c87615124565b52602b54875173ffffffffffffffffffffffffffffffffffffffff8581166020830152306040830152909116606082015260808101919091526136b28160a08101610a81565b6136bb88615124565b526136c587615124565b5060026136d186615134565b528551906020820152602081526136e88682614f50565b6136f187615134565b526136fb86615134565b50600a61370785615144565b52845173ffffffffffffffffffffffffffffffffffffffff9182166020820152921660408301525f60608301528160808101610a81565b61374784615144565b5261375183615144565b5073ffffffffffffffffffffffffffffffffffffffff6032541692833b15610b49576137ae9385928385518097819582947f5ef243140000000000000000000000000000000000000000000000000000000084526004840161519a565b03925af19081156137c157506105e85750f35b513d84823e3d90fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b806060602080938a0101520161353e565b8161381291614f50565b61317857835f6134eb565b83513d87823e3d90fd5b8580fd5b6138439060203d602011613206576131f98183614f50565b61344b565b8161385291614f50565b61317457825f6132ec565b905034610630575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261063057615e828082019082821067ffffffffffffffff831117611fbd5760209183916200791183393081520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602b541617602b5560405190611bb980830183811067ffffffffffffffff821117611fbd5760209284926201b322843981520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602f541617602f5573ffffffffffffffffffffffffffffffffffffffff602b541660405190610d6f80830183811067ffffffffffffffff821117611fbd5760209284926201ddfd843981520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602e541617602e5573ffffffffffffffffffffffffffffffffffffffff602b54166040519061183580830183811067ffffffffffffffff821117611fbd57602092849262013a04843981520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602c541617602c5573ffffffffffffffffffffffffffffffffffffffff602b54166040519061131580830183811067ffffffffffffffff821117611fbd57602092849262015239843981520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602d541617602d5573ffffffffffffffffffffffffffffffffffffffff602b5416604051906112d280830183811067ffffffffffffffff821117611fbd57602092849262012732843981520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603054161760305573ffffffffffffffffffffffffffffffffffffffff602b541660405190610f2280830183811067ffffffffffffffff821117611fbd5760209284926201cedb843981520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603154161760315573ffffffffffffffffffffffffffffffffffffffff602b541660405190610c3880830183811067ffffffffffffffff821117611fbd57602092849262011afa843981520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603354161760335573ffffffffffffffffffffffffffffffffffffffff602b541660405190614dd480830183811067ffffffffffffffff821117611fbd5760209284926201654e843981520301905ff08015614d055773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603454161760345560408051613d5d8282614f50565b600d8152602081017f666565436f6e74726f6c6c65720000000000000000000000000000000000000081528251600d6020820192835e5f602d820152600d8152613da8602d82614f50565b5190208251907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614cac575f91614cb6575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610630575f73ffffffffffffffffffffffffffffffffffffffff613e7992855193849283927fc657c71800000000000000000000000000000000000000000000000000000000845216958660048401528760248401526044830190614d5f565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015614cac57614c97575b507fffffffffffffffffffffffff0000000000000000000000000000000000000000603554161760355573ffffffffffffffffffffffffffffffffffffffff602b541681519061284b908183019183831067ffffffffffffffff841117614c6a579183916020936200d7938439815203019083f08015614c5f5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060325416176032558173ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60355416813b1561317457829160248392865194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af18015614c5257614c3d575b5050613fdd6157a4565b73ffffffffffffffffffffffffffffffffffffffff80613ffb6157a4565b9216911680821015614c205773ffffffffffffffffffffffffffffffffffffffff80915b1691827fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a551690817fffffffffffffffffffffffff0000000000000000000000000000000000000000602954161760295561407f616317565b50614088616317565b508251603c9261409782614f34565b81526020808201928352610bb88583019081526060830185815260808401888152602b5488517f6276cbbe000000000000000000000000000000000000000000000000000000008152865173ffffffffffffffffffffffffffffffffffffffff9081166004830152885181166024830152604088015162ffffff166044830152845160020b60648301528351811660848301529496959294909291839160c49183918e91166c0100000000000000000000000060a48401525af18015614c1657614bf7575b5073ffffffffffffffffffffffffffffffffffffffff602c54169388602096876141ee8b519861418c838b614f50565b848a527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301998a36858301378d519586809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083528d60048401616341565b03925af18015614b845773ffffffffffffffffffffffffffffffffffffffff9687938492614bda575b5051167fffffffffffffffffffffffff0000000000000000000000000000000000000000603654161760365551167fffffffffffffffffffffffff00000000000000000000000000000000000000006037541617603755517fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000806037549360a01b1616911617603755517fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff6037549160b81b60190b79ffffff00000000000000000000000000000000000000000000001691161760375551167fffffffffffffffffffffffff000000000000000000000000000000000000000060385416176038558460048373ffffffffffffffffffffffffffffffffffffffff603454168751928380927fc34c08e50000000000000000000000000000000000000000000000000000000082525afa8015614ba35773ffffffffffffffffffffffffffffffffffffffff918391614bad575b5016803b156129d75781809160a48851809481937f1b9ec89e00000000000000000000000000000000000000000000000000000000835261444d6004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b5af18015614ba357614b8e575b505073ffffffffffffffffffffffffffffffffffffffff602a541661447d616317565b50614486616317565b5084519161449383614f34565b86835283830191825285830190610bb882526060840192868452608085019489865260a0812050898773ffffffffffffffffffffffffffffffffffffffff602b541660c48c51809481937f6276cbbe000000000000000000000000000000000000000000000000000000008352614557600484018973ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af18015614b8457670de0b6b3a76400009489926145ec92614b67575b508c73ffffffffffffffffffffffffffffffffffffffff602c5416918d51916145b08684614f50565b825236858301378c519687809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083528860048401616341565b03925af1908115614b5d5773ffffffffffffffffffffffffffffffffffffffff9788948593614b2f575b505051167fffffffffffffffffffffffff0000000000000000000000000000000000000000603954161760395551167fffffffffffffffffffffffff0000000000000000000000000000000000000000603a541617603a55517fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff000000000000000000000000000000000000000080603a549360a01b1616911617603a55517fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff603a549160b81b60190b79ffffff000000000000000000000000000000000000000000000016911617603a5551167fffffffffffffffffffffffff0000000000000000000000000000000000000000603b541617603b5573ffffffffffffffffffffffffffffffffffffffff603654167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905573ffffffffffffffffffffffffffffffffffffffff603754167fffffffffffffffffffffffff0000000000000000000000000000000000000000603d541617603d556037547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000807fffffffffffffffffffffffff0000000000000000000000000000000000000000603d5494161616911617603d556037547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff0000000000000000000000000000000000000000000000603d54921660190b79ffffff000000000000000000000000000000000000000000000016911617603d5573ffffffffffffffffffffffffffffffffffffffff603854167fffffffffffffffffffffffff0000000000000000000000000000000000000000603e541617603e5573ffffffffffffffffffffffffffffffffffffffff603954167fffffffffffffffffffffffff0000000000000000000000000000000000000000603f541617603f5573ffffffffffffffffffffffffffffffffffffffff603a54167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416178155603a547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000807fffffffffffffffffffffffff00000000000000000000000000000000000000008554941616169116178155603a547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff00000000000000000000000000000000000000000000008354921660190b79ffffff000000000000000000000000000000000000000000000016911617815573ffffffffffffffffffffffffffffffffffffffff603b54167fffffffffffffffffffffffff00000000000000000000000000000000000000006041541617604155746400000000000000000000000000000000000000007fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff603d541617603d55746400000000000000000000000000000000000000007fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff82541617905573ffffffffffffffffffffffffffffffffffffffff614b026157a4565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000604454161760445580f35b81614b4e92903d10614b56575b614b468183614f50565b810190615289565b505f80614616565b503d614b3c565b89513d8c823e3d90fd5b614b7d90843d86116106995761068c8183614f50565b505f614587565b8a513d8d823e3d90fd5b81614b9891614f50565b610b4957845f61445a565b86513d84823e3d90fd5b614bcd9150853d8711614bd3575b614bc58183614f50565b810190615778565b5f61439c565b503d614bbb565b614bf0908b3d8d11614b5657614b468183614f50565b505f614217565b614c0f9060203d6020116106995761068c8183614f50565b505f61415c565b88513d8b823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff809161401f565b81614c4791614f50565b6129d757815f613fd3565b50505051903d90823e3d90fd5b5051903d90823e3d90fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b614ca49193505f90614f50565b5f915f613e9e565b83513d5f823e3d90fd5b90506020813d602011614cfd575b816